Changeset 3892 in MondoRescue for branches/3.3/mondo/src/mondorestore
- Timestamp:
- Mar 12, 2024, 3:10:24 AM (2 years ago)
- Location:
- branches/3.3/mondo/src/mondorestore
- Files:
-
- 5 edited
-
mondo-prep.c (modified) (5 diffs)
-
mondo-rstr-newt.c (modified) (7 diffs)
-
mondo-rstr-tools-EXT.h (modified) (1 diff)
-
mondo-rstr-tools.c (modified) (6 diffs)
-
mondorestore.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/3.3/mondo/src/mondorestore/mondo-prep.c
r3885 r3892 1026 1026 } 1027 1027 #else 1028 fin = fopen( "/proc/mdstat", "r");1028 fin = fopen(MDSTAT_FILE, "r"); 1029 1029 if (!fin) { 1030 log_OS_error( "/proc/mdstat");1030 log_OS_error(MDSTAT_FILE); 1031 1031 paranoid_free(incoming); 1032 1032 return (1); … … 1127 1127 log_msg(1, "Creating LVMs"); 1128 1128 if (does_file_exist("/tmp/i-want-my-lvm")) { 1129 wait_until_software_raids_are_prepped( "/proc/mdstat",100);1129 wait_until_software_raids_are_prepped(100); 1130 1130 log_to_screen("Configuring LVM"); 1131 1131 if (!g_text_mode) { … … 1899 1899 log_it("Partitioning drive %s", drivename); 1900 1900 1901 #if __FreeBSD__1901 #ifdef __FreeBSD__ 1902 1902 log_it("(Not opening fdisk now; that's the Linux guy's job)"); 1903 1903 pout_to_fdisk = NULL; … … 1920 1920 if (lino < 0) { 1921 1921 // device not found in mountlist 1922 #if __FreeBSD__1922 #ifdef __FreeBSD__ 1923 1923 // If this is the first partition (just as a sentinel value), 1924 1924 // then see if the user has picked 'dangerously-dedicated' mode. … … 1986 1986 1987 1987 log_it("Wiping %s's partition table", drivename); 1988 #if __FreeBSD__1988 #ifdef __FreeBSD__ 1989 1989 // FreeBSD doesn't let you write to blk devices in <512byte chunks. 1990 1990 file = open(drivename, O_WRONLY); -
branches/3.3/mondo/src/mondorestore/mondo-rstr-newt.c
r3879 r3892 615 615 * @ingroup restoreGuiMountlist 616 616 */ 617 void 618 choose_raid_level(struct OSSWAP (raid_device_record, vinum_plex) * raidrec) 619 { 617 void choose_raid_level(struct OSSWAP (raid_device_record, vinum_plex) * raidrec) { 620 618 621 619 #ifdef __FreeBSD__ 622 620 623 621 /** int ***************************************************************/ 624 int res = 0;625 622 int out = 0; 626 623 627 624 /** buffers ***********************************************************/ 628 char tmp[MAX_STR_LEN]; 625 char *tmp = NULL; 626 char *tmp1 = NULL; 629 627 char *prompt = NULL; 630 char sz[MAX_STR_LEN];628 char *sz = NULL; 631 629 632 630 mr_asprintf(prompt, "Please enter the RAID level you want. (concat, striped, raid5)"); 633 631 if (raidrec->raidlevel == -1) { 634 strcpy(tmp, "concat");632 mr_asprintf(tmp, "%s", "concat"); 635 633 } else if (raidrec->raidlevel == 0) { 636 strcpy(tmp, "striped");634 mr_asprintf(tmp, "%s", "striped"); 637 635 } else { 638 sprintf(tmp, "raid%i", raidrec->raidlevel);636 mr_asprintf(tmp, "raid%i", raidrec->raidlevel); 639 637 } 640 638 for (out = 999; out == 999;) { 641 res = popup_and_get_string("Specify RAID level", prompt, tmp, 10);642 if ( !res) {639 tmp1 = mr_popup_and_get_string("Specify RAID level", prompt, tmp); 640 if (tmp1 == NULL) { 643 641 mr_free(prompt); 642 mr_free(tmp); 644 643 return; 645 644 } 646 strip_spaces(tmp); 645 mr_free(tmp); 646 tmp = mr_strip_spaces(tmp1); 647 log_it(tmp); 648 647 649 if (tmp[0] == '[' && tmp[strlen(tmp) - 1] == ']') { 648 strcpy(sz, tmp); 649 strncpy(tmp, sz + 1, strlen(sz) - 2); 650 sz = tmp; 651 // safe as shorter 652 mr_strncpy(tmp, sz + 1, strlen(sz) - 2); 650 653 tmp[strlen(sz) - 2] = '\0'; 651 654 } … … 657 660 out = 5; 658 661 } 659 log_it(tmp); 662 mr_free(tmp); 663 660 664 if (is_this_raid_personality_registered(out)) { 661 665 log_it("Groovy. You've picked a RAID personality which is registered."); … … 664 668 { 665 669 out = 999; 670 if (raidrec->raid_level == -1) { 671 mr_asprintf(tmp, "%s", "linear"); 672 } else { 673 mr_asprintf(tmp, "%d", raidrec->raid_level); 674 } 666 675 } 667 676 } 668 677 } 669 678 mr_free(prompt); 679 mr_free(tmp); 670 680 671 681 raidrec->raidlevel = out; 672 682 #else 673 683 /** buffers ***********************************************************/ 674 char tmp[MAX_STR_LEN]; 684 char *tmp = NULL; 685 char *tmp1 = NULL; 675 686 char *personalities = NULL; 676 687 char *prompt = NULL; 677 char sz[MAX_STR_LEN];688 char *sz; 678 689 int out = 0; 679 int res = 0;680 690 681 691 682 692 assert(raidrec != NULL); 683 paranoid_system("grep Pers /proc/mdstat> /tmp/raid-personalities.txt 2> /dev/null");693 paranoid_system("grep Pers " MDSTAT_FILE " > /tmp/raid-personalities.txt 2> /dev/null"); 684 694 mr_asprintf(personalities, "%s", last_line_of_file("/tmp/raid-personalities.txt")); 685 695 mr_asprintf(prompt, "Please enter the RAID level you want. %s", personalities); … … 687 697 688 698 if (raidrec->raid_level == -1) { 689 strcpy(tmp, "linear");699 mr_asprintf(tmp, "%s", "linear"); 690 700 } else { 691 sprintf(tmp, "%d", raidrec->raid_level);701 mr_asprintf(tmp, "%d", raidrec->raid_level); 692 702 } 693 703 for (out = 999; 694 704 out != -1 && out != 0 && out != 1 && out != 4 && out != 5 695 705 && out != 10;) { 696 res = popup_and_get_string("Specify RAID level", prompt, tmp, 10); 697 if (!res) { 706 tmp1 = mr_popup_and_get_string("Specify RAID level", prompt, tmp); 707 if (tmp1 == NULL) { 708 mr_free(tmp); 709 mr_free(prompt); 698 710 return; 699 711 } 700 strip_spaces(tmp); 712 mr_free(tmp); 713 tmp = mr_strip_spaces(tmp1); 714 log_it(tmp); 715 701 716 if (tmp[0] == '[' && tmp[strlen(tmp) - 1] == ']') { 702 strcpy(sz, tmp); 703 strncpy(tmp, sz + 1, strlen(sz) - 2); 717 sz = tmp; 718 // safe as shorter 719 mr_strncpy(tmp, sz + 1, strlen(sz) - 2); 704 720 tmp[strlen(sz) - 2] = '\0'; 705 721 } … … 711 727 out = atoi(tmp); 712 728 } 713 log_it(tmp); 729 mr_free(tmp); 730 714 731 if (is_this_raid_personality_registered(out)) { 715 732 log_it("Groovy. You've picked a RAID personality which is registered."); … … 717 734 if (ask_me_yes_or_no("You have chosen a RAID personality which is not registered with the kernel. Make another selection?")) { 718 735 out = 999; 736 mr_free(tmp); 737 if (raidrec->raid_level == -1) { 738 mr_asprintf(tmp, "%s", "linear"); 739 } else { 740 mr_asprintf(tmp, "%d", raidrec->raid_level); 741 } 719 742 } 720 743 } 721 744 } 722 745 mr_free(prompt); 746 mr_free(tmp); 723 747 724 748 raidrec->raid_level = out; … … 2483 2507 2484 2508 2485 #if __FreeBSD__2509 #ifdef __FreeBSD__ 2486 2510 /** 2487 2511 * Add a subdisk to @p raidrec. -
branches/3.3/mondo/src/mondorestore/mondo-rstr-tools-EXT.h
r3885 r3892 29 29 extern void ask_about_these_imagedevs(char *infname, char *outfname); 30 30 31 extern void wait_until_software_raids_are_prepped(char *mdstat_file, 32 int wait_for_percentage); 31 extern void wait_until_software_raids_are_prepped(int wait_for_percentage); -
branches/3.3/mondo/src/mondorestore/mondo-rstr-tools.c
r3889 r3892 22 22 // no include for now in mondo-rstr-newt.c 23 23 extern int edit_filelist(struct s_node *); 24 25 extern struct s_bkpinfo *bkpinfo; 24 26 25 27 /** … … 90 92 extern char *MONDO_LOGFILE; 91 93 92 /* Reference to global bkpinfo */93 extern struct s_bkpinfo *bkpinfo;94 95 94 /* Should we use or not extended attributes and acl when restoring */ 96 95 extern char *g_getfattr; … … 525 524 * @return TRUE if OK was pressed, FALSE otherwise. 526 525 */ 527 bool get_isodir_info(char *isodir_device, char *isodir_format, 528 struct s_bkpinfo *bkpinfo, bool nuke_me_please) 526 bool get_isodir_info(char *isodir_device, char *isodir_format, bool nuke_me_please) 529 527 { 530 528 … … 610 608 } 611 609 612 if (!get_isodir_info(g_isodir_device, g_isodir_format, bkpinfo,nuke_me_please)) {610 if (!get_isodir_info(g_isodir_device, g_isodir_format, nuke_me_please)) { 613 611 return (1); 614 612 } … … 678 676 /** malloc **/ 679 677 char *tmp = NULL; 680 char *tmp1 = NULL;681 678 char *command = NULL; 682 679 char *mountdir = NULL; … … 2258 2255 /* @} - end restoreUtilityGroup */ 2259 2256 2260 void wait_until_software_raids_are_prepped( char *mdstat_file,int wait_for_percentage)2257 void wait_until_software_raids_are_prepped(int wait_for_percentage) 2261 2258 { 2262 2259 struct raidlist_itself *raidlist; -
branches/3.3/mondo/src/mondorestore/mondorestore.c
r3885 r3892 32 32 #include "newt-specific-EXT.h" 33 33 34 extern void wait_until_software_raids_are_prepped(char *, int);35 34 extern void twenty_seconds_til_yikes(void); 36 35 // in mondo-prep.c … … 377 376 case -1: 378 377 fatal_error("Fork failure"); 378 break; 379 379 case 0: 380 380 log_msg(3, "CHILD - fip - calling feed_outfrom_ntfsprog(%s, %s)", biggiestruct.filename, ntfsprog_fifo); … … 1041 1041 * @param orig_bf_fname The original filename of the biggiefile. 1042 1042 * @param biggiefile_number The number of the biggiefile (starting from 0). 1043 * @param orig_checksum Unused.1044 * @param biggiefile_size Unused.1045 1043 * @param filelist The node structure containing the list of files to be restored. 1046 1044 * If @p orig_bf_fname is not in the list, it will be ignored. 1047 1045 * @return 0 for success (or skip), nonzero for failure. 1048 * @bug orig_checksum and biggiefile_size are unused (except to check that they are non-NULL). 1049 */ 1050 int restore_a_biggiefile_from_stream(char *orig_bf_fname, long biggiefile_number, char *orig_checksum, //UNUSED 1051 long long biggiefile_size, //UNUSED 1046 */ 1047 int restore_a_biggiefile_from_stream(char *orig_bf_fname, long biggiefile_number, 1052 1048 struct s_node *filelist, 1053 1049 int use_ntfsprog, … … 1085 1081 assert(bkpinfo != NULL); 1086 1082 assert(orig_bf_fname != NULL); 1087 assert(orig_checksum != NULL);1088 1083 1089 1084 pathname_of_last_file_restored[0] = '\0'; … … 1144 1139 case -1: 1145 1140 fatal_error("Fork failure"); 1141 break; 1146 1142 case 0: 1147 1143 log_msg(3, "CHILD - fip - calling feed_outfrom_ntfsprog(%s, %s)", outfile_fname, ntfsprog_fifo); … … 1372 1368 res = restore_a_biggiefile_from_stream(biggie_fname, 1373 1369 current_bigfile_number, 1374 biggie_cksum,1375 biggie_size,1376 1370 filelist, ctrl_chr, 1377 1371 pathname_of_last_biggie_restored); … … 2730 2724 } 2731 2725 2732 if (argc == 3&& strcmp(argv[1], "--mdstat") == 0) {2733 wait_until_software_raids_are_prepped( argv[2],100);2726 if (argc == 2 && strcmp(argv[1], "--mdstat") == 0) { 2727 wait_until_software_raids_are_prepped(100); 2734 2728 finish(0); 2735 2729 } … … 2952 2946 } 2953 2947 2954 /*2955 log_to_screen("If you are REALLY in a hurry, hit Ctrl-Alt-Del now.");2956 log_to_screen("Otherwise, please wait until the RAID disks are done.");2957 wait_until_software_raids_are_prepped("/proc/mdstat", 100);2958 log_to_screen("Thank you.");2959 */2960 2948 unlink("/tmp/mondo-run-prog.tmp"); 2961 2949 set_signals(FALSE);
Note:
See TracChangeset
for help on using the changeset viewer.
