Ситуация такая: на машине под управлением Gentoo Linux-2.6.15 используется программный RAID-5.
Всего 8 дисков 200/250 Гб.
Диски на 200 Гб имеют 1 раздел Linux Raid autodetect
Диски на 250 Гб имеют 2 раздела Linux Raid autodetect, один из которых 200 Гб, а другой 50 Гб.
Всего собирается 2 массива:
/dev/md0 (он состоит из 200 Гб разделов /dev/sd[a-h]1)
и
/dev/md1 (состоит из 50 Гб разделов /dev/sd[a-h]1 на 250 гиговых дисках - таких всего 6).Один из дисков (200 Гб) при перезагрузке периодически не определялся и было принято решение "переткнуть" его в другое место.
В итоге получилась следующая ситуация: имена всех дисков начиная с sdd изменились (sde стал sdd, sdf стал sde и т.д. а диск, который был sdd стал sdh).
Сначала он был отключен и массив функционировал без одного диска, затем его подключили как sdh (массив по прежнему его не видел).
Было решено сделать addhotadd /dev/md0 /dev/sdh1
система начала подключение, но менее 20 секунд спустя намертво повисла!
После перезагрузки данный массив не собирается, хотя до перезагрузки работал (без одного диска).
Параметры создания
raiddev /dev/md0
raid-level 5
nr-raid-disks 8
nr-spare-disks 0
chunk-size 32
persistent-superblock 1
parity-algorithm left-symmetric
device /dev/sda1
raid-disk 0
device /dev/sdb1
raid-disk 1
device /dev/sdc1
raid-disk 2
device /dev/sdd1
raid-disk 3
device /dev/sde1
raid-disk 4
device /dev/sdf1
raid-disk 5
device /dev/sdg1
raid-disk 6
device /dev/sdh1
raid-disk 7
raiddev /dev/md1
raid-level 5
nr-raid-disks 6
nr-spare-disks 0
chunk-size 32
persistent-superblock 1
parity-algorithm left-symmetric
device /dev/sda2
raid-disk 0
device /dev/sdb2
raid-disk 1
device /dev/sdc2
raid-disk 2
device /dev/sdf2
raid-disk 3
device /dev/sdg2
raid-disk 4
device /dev/sdh2
raid-disk 5
Вот, что он выдает в messages
Mar 18 16:16:13 deep xinetd[6200]: Started working: 0 available services
Mar 18 16:16:13 deep raid5: automatically using best checksumming function: pIII_sse
Mar 18 16:16:13 deep pIII_sse : 3068.000 MB/sec
Mar 18 16:16:13 deep raid5: using function: pIII_sse (3068.000 MB/sec)
Mar 18 16:16:13 deep md: md driver 0.90.3 MAX_MD_DEVS=256, MD_SB_DISKS=27
Mar 18 16:16:13 deep md: bitmap version 4.39
Mar 18 16:16:13 deep md: raid5 personality registered as nr 4
Mar 18 16:16:13 deep md: raidstart(pid 6284) used deprecated START_ARRAY ioctl. This will not be supported beyond July 2006
Mar 18 16:16:13 deep md: autorun ...
Mar 18 16:16:13 deep md: considering sdg1 ...
Mar 18 16:16:13 deep md: adding sdg1 ...
Mar 18 16:16:13 deep md: adding sdf1 ...
Mar 18 16:16:13 deep md: adding sde1 ...
Mar 18 16:16:13 deep md: adding sdd1 ...
Mar 18 16:16:13 deep md: adding sdc1 ...
Mar 18 16:16:13 deep md: adding sdb1 ...
Mar 18 16:16:13 deep md: adding sda1 ...
Mar 18 16:16:13 deep md: created md0
Mar 18 16:16:13 deep md: bind<sda1>
Mar 18 16:16:13 deep md: bind<sdb1>
Mar 18 16:16:13 deep md: bind<sdc1>
Mar 18 16:16:13 deep md: bind<sdd1>
Mar 18 16:16:13 deep md: bind<sde1>
Mar 18 16:16:13 deep md: bind<sdf1>
Mar 18 16:16:13 deep md: bind<sdg1>
Mar 18 16:16:13 deep md: running: <sdg1><sdf1><sde1><sdd1><sdc1><sdb1><sda1>
Mar 18 16:16:13 deep md: md0: raid array is not clean -- starting background reconstruction
Mar 18 16:16:13 deep raid5: device sdg1 operational as raid disk 7
Mar 18 16:16:13 deep raid5: device sdf1 operational as raid disk 6
Mar 18 16:16:13 deep raid5: device sde1 operational as raid disk 5
Mar 18 16:16:13 deep raid5: device sdd1 operational as raid disk 4
Mar 18 16:16:13 deep raid5: device sdc1 operational as raid disk 2
Mar 18 16:16:13 deep raid5: device sdb1 operational as raid disk 1
Mar 18 16:16:13 deep raid5: device sda1 operational as raid disk 0
Mar 18 16:16:13 deep raid5: cannot start dirty degraded array for md0
Mar 18 16:16:13 deep RAID5 conf printout:
Mar 18 16:16:13 deep --- rd:8 wd:7 fd:1
Mar 18 16:16:13 deep disk 0, o:1, dev:sda1
Mar 18 16:16:13 deep disk 1, o:1, dev:sdb1
Mar 18 16:16:13 deep disk 2, o:1, dev:sdc1
Mar 18 16:16:13 deep disk 4, o:1, dev:sdd1
Mar 18 16:16:13 deep disk 5, o:1, dev:sde1
Mar 18 16:16:13 deep disk 6, o:1, dev:sdf1
Mar 18 16:16:13 deep disk 7, o:1, dev:sdg1
Mar 18 16:16:13 deep raid5: failed to run raid set md0
Mar 18 16:16:13 deep md: pers->run() failed ...
Mar 18 16:16:13 deep md: do_md_run() returned -5
Mar 18 16:16:13 deep md: md0 stopped.
Mar 18 16:16:13 deep md: unbind<sdg1>
Mar 18 16:16:13 deep md: export_rdev(sdg1)
Mar 18 16:16:13 deep md: unbind<sdf1>
Mar 18 16:16:13 deep md: export_rdev(sdf1)
Mar 18 16:16:13 deep md: unbind<sde1>
Mar 18 16:16:13 deep md: export_rdev(sde1)
Mar 18 16:16:13 deep md: unbind<sdd1>
Mar 18 16:16:13 deep md: export_rdev(sdd1)
Mar 18 16:16:13 deep md: unbind<sdc1>
Mar 18 16:16:13 deep md: export_rdev(sdc1)
Mar 18 16:16:13 deep md: unbind<sdb1>
Mar 18 16:16:13 deep md: export_rdev(sdb1)
Mar 18 16:16:13 deep md: unbind<sda1>
Mar 18 16:16:13 deep md: export_rdev(sda1)
Mar 18 16:16:13 deep md: ... autorun DONE.
То есть do_md_run выходит с "-5"
lsraid -d /dev/sda1
[dev 9, 0] /dev/md/0 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 offline
[dev 8, 1] /dev/sda1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev 8, 17] /dev/sdb1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev 8, 33] /dev/sdc1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev ?, ?] (unknown) 00000000.00000000.00000000.00000000 missing
[dev 8, 49] /dev/sdd1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev 8, 65] /dev/sde1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev 8, 81] /dev/sdf1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev 8, 97] /dev/sdg1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
То же самое выводит
lsraid -d /dev/sd[b-g]1
Диск /dev/sdh1, который не подключился при из-за зависания при raidhotadd
выдает
lsraid -d /dev/sdh1
[dev 9, 0] /dev/md/0 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 offline
[dev 8, 1] /dev/sda1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev 8, 17] /dev/sdb1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev 8, 33] /dev/sdc1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev ?, ?] (unknown) 00000000.00000000.00000000.00000000 missing
[dev 8, 49] /dev/sdd1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev 8, 65] /dev/sde1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev 8, 81] /dev/sdf1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev 8, 97] /dev/sdg1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 good
[dev 8, 113] /dev/sdh1 FD11EE68.BA0F6CCE.98D4A909.D9782BA0 unbound
Несмотря на то, что в массиве 7 дисков из 8 рабочие, запускаться он упорно не желает, в то время как 2й массив (из 6-ти 50 гиговых дисков определяет только 5 дисков из 6 и запускается без проблем без одного диска)
cat /proc/mdstat
Personalities : [raid5]
md1 : active raid5 sdg2[5] sdf2[4] sdc2[2] sdb2[1] sda2[0]
224668480 blocks level 5, 32k chunk, algorithm 2 [6/5] [UUU_UU]
unused devices: <none>
В итоге: после смены порядка дисков, оба массива перестали определять по одному диску (то есть стали незащищенными), но оставались рабочими. При попытке выполнить raidhotadd для того диска, который не отображался в /proc/mdstat система повисла и не видит более тот массив, к которому я пытался подключить этот диск, в то время как второй массив, расположенный на тех же дисках виден без проблем.
при попытке запустить массив при помощи mdadm выводится
mdadm --assemble --force /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1
mdadm: failed to RUN_ARRAY /dev/md0: Input/output error
в то время как 2й массив запускается таким же образом
mdadm --assemble --force /dev/md1 /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdf2 /dev/sdg2
mdadm: /dev/md1 has been started with 5 drives (out of 6)
В чем проблема незапуска массива и как с этим бороться?