Changeset 2937 in MondoRescue for branches/3.1/mondo/src/mondorestore
- Timestamp:
- Jan 28, 2012, 1:51:28 AM (14 years ago)
- Location:
- branches/3.1/mondo/src/mondorestore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3.1/mondo/src/mondorestore/mondo-prep.c
r2816 r2937 10 10 #include "mondoprep.h" 11 11 #include "../common/libmondo.h" 12 #include "../common/libmondo-tools-EXT.h" 12 13 #include "mondo-rstr-tools-EXT.h" 13 14 #include <sys/ioctl.h> … … 43 44 44 45 FILE *g_fprep = NULL; 45 46 46 extern char *g_mondo_cfg_file; // where m*ndo-restore.cfg (the config file) is stored 47 47 48 48 int g_partition_table_locked_up = 0; 49 50 51 52 53 54 55 56 49 57 50 … … 323 316 res = run_program_and_log_output(command, 5); 324 317 if (res > 0 && (p = strstr(command, "lvm "))) { 318 log_msg(0, "%s --> %d failed so removing lvm just in case", command, res); 325 319 *p = *(p + 1) = *(p + 2) = ' '; 326 320 res = run_program_and_log_output(command, 5); … … 545 539 char *level = NULL; 546 540 char *program = NULL; 541 char *tmp = NULL; 542 char *oldmd = NULL; 543 char *bootdevice; 544 char *name; 545 546 malloc_string(bootdevice); 547 malloc_string(name); 547 548 548 549 // leave straight away if raidlist is initial or has no entries … … 589 590 // - faulty devices ignored 590 591 // - persistent superblock always used as this is recommended 591 mr_asprintf(program, "mdadm --create --force --run --auto=yes %s --level=%s --raid-devices=%d", raidlist->el[i].raid_device, level, raidlist->el[i].data_disks.entries); 592 // As per bug #473, the parameter "-e 0.90" is used only when: 593 // 1) It detects that system boots from Raid-1 594 // 2) grub bootloader < v1 is used. 595 // Otherwise it won't boot which is bad. 596 read_cfg_var(g_mondo_cfg_file, "bootloader.device", bootdevice); 597 read_cfg_var(g_mondo_cfg_file, "bootloader.name", name); 598 if (strcmp(name,"GRUB") == 0) { 599 mr_asprintf(tmp, "%s", call_program_and_get_last_line_of_output("grub --version")); 600 if ((strstr(tmp, "GRUB 0.9") != NULL) && (strcmp(raidlist->el[i].raid_device,device) == 0)) { 601 mr_free(oldmd); 602 mr_asprintf(oldmd, "-e 0.90"); 603 log_it("Forcing old metadata 0.90 for md on %s for old GRUB", device); 604 } 605 } else if ((strcmp(name,"LILO") == 0) && (strcmp(raidlist->el[i].raid_device,device) == 0)) { 606 mr_free(oldmd); 607 mr_asprintf(oldmd, "-e 0.90"); 608 log_it("Forcing old metadata 0.90 for md on %s for LILO", device); 609 } else { 610 mr_asprintf(oldmd, ""); 611 } 612 mr_free(device); 613 mr_free(name); 614 615 mr_asprintf(program, "mdadm --create --force --run --auto=yes %s --level=%s --raid-devices=%d %s", raidlist->el[i].raid_device, level, raidlist->el[i].data_disks.entries, oldmd); 616 mr_free(oldmd); 592 617 if (raidlist->el[i].parity != -1) { 593 618 mr_asprintf(strtmp, "%s", program); … … 2289 2314 2290 2315 /** float ***********************************************************/ 2291 long longfactor;2316 float factor; 2292 2317 long long new_size; 2293 2318 … … 2322 2347 2323 2348 drivemntlist = malloc(sizeof(struct mountlist_reference)); 2324 drivemntlist->el = 2325 malloc(sizeof(struct mountlist_line *) * MAX_MOUNTLIST_ENTRIES); 2349 drivemntlist->el = malloc(sizeof(struct mountlist_line *) * MAX_MOUNTLIST_ENTRIES); 2326 2350 2327 2351 if (!drivemntlist) { … … 2337 2361 } 2338 2362 2339 if (original_size_of_drive <= 0 ) {2363 if (original_size_of_drive <= 0LL) { 2340 2364 log_to_screen("Cannot resize %s's entries. Drive not found.", drive_name); 2341 2365 return; 2342 2366 } 2343 factor = (current_size_of_drive) / (original_size_of_drive); 2344 log_to_screen("Disk %s was %lld MB; is now %lld MB; Proportionally resizing partitions (factor ~= %lld)", drive_name, original_size_of_drive/1024, current_size_of_drive/1024, factor); 2367 factor = ((float)current_size_of_drive/(float)original_size_of_drive); 2368 mr_asprintf(tmp, "Disk %s was %lld MB; is now %lld MB; Proportionally resizing partitions (factor ~= %.5f)", 2369 drive_name, original_size_of_drive/1024, current_size_of_drive/1024, factor); 2370 log_to_screen(tmp); 2371 mr_free(tmp); 2345 2372 2346 2373 lastpart = drivemntlist->entries - 1; … … 2348 2375 /* the 'atoi' thing is to make sure we don't try to resize _images_, whose formats will be numeric */ 2349 2376 if (!atoi(drivemntlist->el[partno]->format)) { 2350 new_size = ( drivemntlist->el[partno]->size) * factor;2377 new_size = (long long)((drivemntlist->el[partno]->size) * factor); 2351 2378 } else { 2352 2379 new_size = drivemntlist->el[partno]->size; -
branches/3.1/mondo/src/mondorestore/mondo-rstr-newt.c
r2816 r2937 1804 1804 #undef ACOMP 1805 1805 1806 newtDrawForm(editraidForm); 1806 1807 newtRefresh(); 1807 1808 b_res = newtRunForm(editraidForm); -
branches/3.1/mondo/src/mondorestore/mondo-rstr-tools.c
r2850 r2937 205 205 return (1); 206 206 } 207 paranoid_system("umount "MNT_CDROM" 2> /dev/null"); /* just in case */207 paranoid_system("umount -d " MNT_CDROM " 2> /dev/null"); /* just in case */ 208 208 209 209 if (is_this_device_mounted(g_isodir_device)) { … … 612 612 } 613 613 } 614 run_program_and_log_output("umount "MNT_CDROM, FALSE);614 run_program_and_log_output("umount -d "MNT_CDROM, FALSE); 615 615 if (!does_file_exist(cfg_file)) { 616 616 log_it("%s",cfg_file); … … 684 684 if (does_file_exist(MNT_CDROM"/archives/filelist.0")) { 685 685 bkpinfo->backup_media_type = cdr; 686 run_program_and_log_output("umount "MNT_CDROM, 1);686 run_program_and_log_output("umount -d "MNT_CDROM, 1); 687 687 log_it 688 688 ("Re-jigging configuration AGAIN. CD-R, not ISO."); … … 1414 1414 if (res) { 1415 1415 popup_and_OK 1416 ("GRUB installation failed. Please install manually using 'grub-install' or similar command. You are now chroot()'ed to your restored system. Please type 'exit' when you are done."); 1417 newtSuspend(); 1418 system("chroot " MNT_RESTORING); 1419 newtResume(); 1420 popup_and_OK("Thank you."); 1416 ("GRUB installation failed. You will now edit fstab, mtab, device.map and menu.lst/grub.cfg in order to fix grub install"); 1417 if (!g_text_mode) { 1418 newtSuspend(); 1419 } 1420 sprintf(tmp, "chroot %s %s /etc/fstab", MNT_RESTORING, editor); 1421 paranoid_system(tmp); 1422 sprintf(tmp, "chroot %s %s /etc/mtab", MNT_RESTORING, editor); 1423 paranoid_system(tmp); 1424 if (does_file_exist(MNT_RESTORING"/boot/grub/menu.lst")) { 1425 sprintf(tmp, "chroot %s %s /boot/grub/menu.lst", MNT_RESTORING, editor); 1426 } else if (does_file_exist(MNT_RESTORING"/boot/grub/grub.cfg")) { 1427 sprintf(tmp, "chroot %s %s /boot/grub/grub.cfg", MNT_RESTORING, editor); 1428 } 1429 paranoid_system(tmp); 1430 sprintf(tmp, "chroot %s %s /boot/grub/device.map", MNT_RESTORING, editor); 1431 paranoid_system(tmp); 1432 if (!g_text_mode) { 1433 newtResume(); 1434 } 1435 sprintf(command, "stabgrub-me %s", boot_device); 1436 res = run_program_and_log_output(command, 1); 1437 if (res) { 1438 popup_and_OK 1439 ("GRUB installation failed. Please fix the conf files so that a manual install using 'grub-install' or similar command works. You are now chroot()'ed to your restored system. Please type 'exit' when you are done."); 1440 newtSuspend(); 1441 system("chroot " MNT_RESTORING); 1442 newtResume(); 1443 popup_and_OK("Thank you."); 1444 } else { 1445 popup_and_OK("GRUB is now installed correctly"); 1446 done = TRUE; 1447 } 1421 1448 } else { 1422 1449 done = TRUE; … … 1933 1960 1934 1961 /* Unmounting the local /proc and /sys first */ 1935 run_program_and_log_output("umount " MNT_RESTORING "/proc",3);1936 run_program_and_log_output("umount " MNT_RESTORING "/sys",3);1962 run_program_and_log_output("umount -d " MNT_RESTORING "/proc",3); 1963 run_program_and_log_output("umount -d " MNT_RESTORING "/sys",3); 1937 1964 1938 1965 for (lino = mountlist->entries - 1; lino >= 0; lino--) { … … 1948 1975 } else { 1949 1976 if (!strcmp(mountlist->el[lino].mountpoint, "/1")) { 1950 mr_asprintf(command, "umount %s/", MNT_RESTORING);1977 mr_asprintf(command, "umount -d %s/", MNT_RESTORING); 1951 1978 log_msg(3, 1952 1979 "Well, I know a certain kitty-kitty who'll be sleeping with Mommy tonight..."); 1953 1980 } else { 1954 mr_asprintf(command, "umount " MNT_RESTORING "%s", mountlist->el[lino].mountpoint);1981 mr_asprintf(command, "umount -d " MNT_RESTORING "%s", mountlist->el[lino].mountpoint); 1955 1982 1956 1983 /* To support latest Ubuntu where /var is a separate FS … … 1998 2025 *END_UNMOUNT_ALL_DEVICES * 1999 2026 **************************************************************************/ 2000 2001 2002 2027 2003 2028 /************************************************************************** -
branches/3.1/mondo/src/mondorestore/mondorestore.c
r2874 r2937 116 116 117 117 /************************************************************************** 118 * COMPAQ P ROLIANTStuff: needs some special help *118 * COMPAQ ProLiant Stuff: needs some special help * 119 119 **************************************************************************/ 120 120 121 121 /** 122 * The message to display if we detect that the user is using a Compaq Pro liant.122 * The message to display if we detect that the user is using a Compaq ProLiant. 123 123 */ 124 124 #define COMPAQ_PROLIANTS_SUCK "Partition and format your disk using Compaq's disaster recovery CD. After you've done that, please reboot with your Mondo media in Interactive Mode." … … 209 209 * @ingroup restoreUtilityGroup 210 210 */ 211 void offer_to_abort_because_Compaq_Pro liants_suck(void)211 void offer_to_abort_because_Compaq_ProLiants_suck(void) 212 212 { 213 213 popup_and_OK(COMPAQ_PROLIANTS_SUCK); … … 256 256 popup_and_OK("No restoring or comparing will take place today."); 257 257 if (is_this_device_mounted("/mnt/cdrom")) { 258 run_program_and_log_output("umount /mnt/cdrom", FALSE);258 run_program_and_log_output("umount -d /mnt/cdrom", FALSE); 259 259 } 260 260 if (g_ISO_restore_mode) { 261 mr_asprintf(tmp, "umount %s", bkpinfo->isodir);261 mr_asprintf(tmp, "umount -d %s", bkpinfo->isodir); 262 262 run_program_and_log_output(tmp, FALSE); 263 263 mr_free(tmp); … … 485 485 if (partition_table_contains_Compaq_diagnostic_partition 486 486 (mountlist)) { 487 offer_to_abort_because_Compaq_Pro liants_suck();487 offer_to_abort_because_Compaq_ProLiants_suck(); 488 488 done = TRUE; 489 489 } else { … … 693 693 } 694 694 if (is_this_device_mounted(MNT_CDROM)) { 695 paranoid_system("umount " MNT_CDROM);695 paranoid_system("umount -d " MNT_CDROM); 696 696 } 697 697 // if (! already_mounted) 698 698 // { 699 if (system("umount /tmp/isodir 2> /dev/null")) {699 if (system("umount -d /tmp/isodir 2> /dev/null")) { 700 700 log_to_screen 701 701 ("WARNING - unable to unmount device where the ISO files are stored."); … … 773 773 if (partition_table_contains_Compaq_diagnostic_partition 774 774 (mountlist)) { 775 offer_to_abort_because_Compaq_Pro liants_suck();775 offer_to_abort_because_Compaq_ProLiants_suck(); 776 776 } else { 777 777 twenty_seconds_til_yikes(); … … 949 949 "Tape : I don't need to unmount or eject the CD-ROM."); 950 950 } else { 951 run_program_and_log_output("umount " MNT_CDROM, FALSE);951 run_program_and_log_output("umount -d " MNT_CDROM, FALSE); 952 952 if (!bkpinfo->please_dont_eject) { 953 953 eject_device(bkpinfo->media_device); 954 954 } 955 955 } 956 run_program_and_log_output("umount " MNT_CDROM, FALSE);956 run_program_and_log_output("umount -d " MNT_CDROM, FALSE); 957 957 if (!bkpinfo->please_dont_eject) { 958 958 eject_device(bkpinfo->media_device); … … 2138 2138 2139 2139 /* Now we need to umount the current media to have the next mounted by insist_on_this_cd_number */ 2140 run_program_and_log_output("umount " MNT_CDROM, FALSE);2140 /* run_program_and_log_output("umount " MNT_CDROM, FALSE); */ 2141 2141 } 2142 2142 mr_free(mds); … … 2635 2635 make_hole_for_dir("/var/log"); 2636 2636 make_hole_for_dir("/tmp/tmpfs"); /* just in case... */ 2637 run_program_and_log_output("umount " MNT_CDROM, FALSE);2637 run_program_and_log_output("umount -d " MNT_CDROM, FALSE); 2638 2638 2639 2639 run_program_and_log_output("rm -Rf /tmp/tmpfs/mondo.tmp.*", FALSE); … … 2669 2669 fout = fopen("/tmp/out.txt", "w"); 2670 2670 fput_string_one_char_at_a_time(stderr, argv[2]); 2671 finish(0);2672 }2673 2674 if (argc == 3 && strcmp(argv[1], "--gendf") == 0) {2675 make_grub_install_scriptlet(argv[2]);2676 2671 finish(0); 2677 2672 } … … 2892 2887 sync(); 2893 2888 if (is_this_device_mounted(MNT_CDROM)) { 2894 run_program_and_log_output("umount " MNT_CDROM, FALSE);2889 run_program_and_log_output("umount -d " MNT_CDROM, FALSE); 2895 2890 } 2896 2891 … … 2950 2945 log_to_screen("Mondo-restore is exiting (retval=%d) ", retval); 2951 2946 2952 mr_asprintf(tmp, "umount %s", bkpinfo->isodir);2947 mr_asprintf(tmp, "umount -d %s", bkpinfo->isodir); 2953 2948 run_program_and_log_output(tmp, 5); 2954 2949 mr_free(tmp);
Note:
See TracChangeset
for help on using the changeset viewer.