[sisyphus] mdadm: No arrays found in config file

Eugene Prokopiev =?iso-8859-1?q?prokopiev_=CE=C1_stc=2Edonpac=2Eru?=
Ср Июл 12 22:14:00 MSD 2006


вообще-то, на момент вызова:

>># mdadm --assemble --scan

уже было:

# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 hdc3[0] hda3[1]
       77071744 blocks [2/2] [UU]

md0 : active raid1 hdc1[0] hda1[1]
       96256 blocks [2/2] [UU]

unused devices: <none>

Но раньше это не было проблемой.

Я попытался запустить mdadm (и без патчей), собранный с отладочной 
информацией, под gdb:

# gdb mdadm

(gdb) break main
Breakpoint 1 at 0x8049a50: file mdadm.c, line 40.
(gdb) run --assemble --scan
Starting program: /home/john/mdadm --assemble --scan

Breakpoint 1, main (argc=3, argv=0xbf853f64) at mdadm.c:40
warning: Source file is more recent than executable.

40              int mode = 0;
(gdb) next
47              int chunk = 0;
(gdb) next
48              long long size = -1;
(gdb) next
49              int level = UnSet;
(gdb) next
50              int layout = UnSet;
(gdb) next
51              int raiddisks = 0;
(gdb) next
52              int max_disks = MD_SB_DISKS; /* just a default */
(gdb) next
53              int sparedisks = 0;
(gdb) next
55              char *configfile = NULL;
(gdb) next
57              char *update = NULL;
(gdb) next
58              int scan = 0;
(gdb) next
59              char devmode = 0;
(gdb) next
60              int runstop = 0;
(gdb) next
61              int readonly = 0;
(gdb) next
62              int write_behind = 0;
(gdb) next
63              int bitmap_fd = -1;
(gdb) next
64              char *bitmap_file = NULL;
(gdb) next
65              char *backup_file = NULL;
(gdb) next
66              int bitmap_chunk = UnSet;
(gdb) next
67              int SparcAdjust = 0;
(gdb) next
68              mddev_dev_t devlist = NULL;
(gdb) next
69              mddev_dev_t *devlistend = & devlist;
(gdb) next
71              int devs_found = 0;
(gdb) next
72              int verbose = 0;
(gdb) next
73              int quiet = 0;
(gdb) next
74              int brief = 0;
(gdb) next
75              int force = 0;
(gdb) next
76              int test = 0;
(gdb) next
77              int assume_clean = 0;
(gdb) next
88              int autof = 0;
(gdb) next
90              char *homehost = NULL;
(gdb) next
92              char *mailaddr = NULL;
(gdb) next
93              char *program = NULL;
(gdb) next
94              int delay = 0;
(gdb) next
95              int daemonise = 0;
(gdb) next
96              char *pidfile = NULL;
(gdb) next
97              int oneshot = 0;
(gdb) next
98              struct supertype *ss = NULL;
(gdb) next
99              int writemostly = 0;
(gdb) next
100             int re_add = 0;
(gdb) next
101             char *shortopt = short_options;
(gdb) next
102             int dosyslog = 0;
(gdb) next
103             int auto_update_home = 0;
(gdb) next
106             int print_help = 0;
(gdb) next
108             int mdfd = -1;
(gdb) next
110             srandom(time(0) ^ getpid());
(gdb) next
112             ident.uuid_set=0;
(gdb) next
113             ident.level = UnSet;
(gdb) next
114             ident.raid_disks = UnSet;
(gdb) next
115             ident.super_minor= UnSet;
(gdb) next
116             ident.devices=0;
(gdb) next
117             ident.spare_group = NULL;
(gdb)
118             ident.autof = 0;
(gdb) next
119             ident.st = NULL;
(gdb) next
120             ident.bitmap_fd = -1;
(gdb) next
121             ident.bitmap_file = NULL;
(gdb) next
122             ident.name[0] = 0;
(gdb)
124             while ((option_index = -1) ,
(gdb) next
128                     int newmode = mode;
(gdb) next
130                     switch(opt) {
(gdb) next
173                     switch(opt) {
(gdb) next
188                     case 'A': newmode = ASSEMBLE; shortopt = 
short_bitmap_auto_options; break;
(gdb) next
205                     if (mode && newmode == mode) {
(gdb) next
207                     } else if (mode && newmode != mode) {
(gdb) next
218                     } else if (!mode && newmode) {
(gdb) next
219                             mode = newmode;
(gdb) next
262                     switch(opt) {
(gdb) next
124             while ((option_index = -1) ,
(gdb) next
128                     int newmode = mode;
(gdb) next
130                     switch(opt) {
(gdb) next
173                     switch(opt) {
(gdb) next
205                     if (mode && newmode == mode) {
(gdb) next
262                     switch(opt) {
(gdb) next
272                     if (opt == 1) {
(gdb) next
303                     switch (O(mode,opt)) {
(gdb) next
613                             scan = 1;
(gdb) next
614                             continue;
(gdb) next
124             while ((option_index = -1) ,
(gdb) next
832             if (print_help) {
(gdb) next
850             if (!mode && devs_found) {
(gdb) next
856             if (!mode) {
(gdb) next
870             if (mode==MANAGE || mode == BUILD || mode == CREATE || 
mode == GROW ||
(gdb) next
892             if (raiddisks) {
(gdb) next
905             if (sparedisks) {
(gdb) next
913             if (homehost == NULL)
(gdb) next
914                     homehost = conf_get_homehost(configfile);
(gdb) next
915             if (homehost && strcmp(homehost, "<system>")==0) {
(gdb) next
922             rv = 0;
(gdb) next
923             switch(mode) {
(gdb) next
937                     if (devs_found == 1 && ident.uuid_set == 0 &&
(gdb) next
957                     } else if (!scan)
(gdb) next
961                     else if (devs_found>0) {
(gdb) next
990                             mddev_ident_t array_list = 
conf_get_ident(configfile, NULL);
(gdb) next
991                             mddev_dev_t devlist = 
conf_get_devs(configfile);
(gdb) next
992                             int cnt = 0;
(gdb) next
993                             if (devlist == NULL) {
(gdb) next
997                             if (update) {
(gdb) next
1001                            if (backup_file) {
(gdb) next
1005                            for (; array_list; array_list = 
array_list->next) {
(gdb) next
1007                                    mdfd = 
open_mddev(array_list->devname,
(gdb) next
1009                                    if (mdfd < 0) {
(gdb) next
1013                                    if (ioctl(mdfd, GET_ARRAY_INFO, 
&array)>=0)
(gdb) next
1023                                    close(mdfd);
(gdb) next
1005                            for (; array_list; array_list = 
array_list->next) {
(gdb) next
1007                                    mdfd = 
open_mddev(array_list->devname,
(gdb) next
1009                                    if (mdfd < 0) {
(gdb) next
1013                                    if (ioctl(mdfd, GET_ARRAY_INFO, 
&array)>=0)
(gdb) next
1023                                    close(mdfd);
(gdb) next
1005                            for (; array_list; array_list = 
array_list->next) {
(gdb) next
1025                            if (homehost) {
(gdb) next
1075                            } else if (cnt == 0 && rv == 0) {
(gdb) next
1076                                    fprintf(stderr, Name ": No 
arrays found in config file\n");
(gdb) next
mdadm: No arrays found in config file
1077                                    rv = 1;
(gdb)

Но понять назначение переменных cnt и rv в плохо прокомментрованном коде 
я не могу :( Поможете?

-- 
С уважением, Прокопьев Евгений



Подробная информация о списке рассылки Sisyphus