[sisyphus] "partitionable" mdraid & raidstop fix

Mike Lykov combr-desktop на yandex.ru
Пт Май 24 10:31:13 MSK 2013


Здравствуйте.

Попробовал создать конфигурацию, которая с недавних пор поддерживается ядром и mdraid - так называемый загрузочный partitionable mdraid (по русски это будет "разбиваемый"? как-то неднозначно ;)

использовал virtualbox & altlive-console-p7-x86_64.iso   (14-May-2013 04:04)

сначала пробовал raid10 из 4 дисков - sda sdb sdc sdd, но  extlinux его вроде совсем не умеет, а grub2 вроде как делает вид что умеет, но grub-install /dev/md0 не дает записи в mbr (и соотв, грузиться не начинает - missing operating system). Думаю, что это потому что raid не знает о специальном значении mbr и при попытке его записать пишет эти данные "где-то в массиве" ?
как поставить "только mbr" от grub2 на отдельные диски, чтобы он не пытался писать на них что-то еще (как можно сделать с mbr.bin, идущим в составе extlinux)?

потом попробовал raid1 из дисков sda sdb, тут все прошло дальше - extlinux работает, raid создается, fdisk (или udev?) сам определяет что это mdraid и присваивает новым разделам имена /dev/md0p1, /dev/md0p2 ..

live-install все ставит, кроме загрузчика (extlinux)  - не обошлось без патча
--- ./live-install.orig 2013-05-24 10:08:42.827295631 +0400
+++ ./live-install      2013-05-24 10:08:22.069241333 +0400
@@ -109,5 +109,5 @@

 if echo $BOOT_DEVICE |grep -q /dev/md; then
-       mdadm --detail $BOOT_DEVICE |grep active.*/dev/ |awk '{print substr($7, 1, length($7)-1)}' | \
+       mdadm --detail $BOOT_DEVICE |grep active.*/dev/ |awk '{print $7}' | \
                while read REAL_BOOT_DEVICE; do
                        install_loader $REAL_BOOT_DEVICE

в варианте без патча пытается ставить на /dev/sd /dev/sd, с таким вариантом ставит mbr.bin нормально на /dev/sda /dev/sdb. 
не хватало, кстати, пакета make-initrd-mdadm в той сборке, но это и рядом упоминали что и в других забыли ;)
В общем, в конце-концов это грузится и работает нормально, как с девольным ядром сборки 3.8.12-std-def-alt1, так и с ядром 2.6.32-ovz-el-alt88 (работу по нахождению корня на /dev/md0p1 выполняет initrd, создаваемый make-initrd 0.8.4 по умолчанию -нормально, при наличии соотв. пакета).
Но при установке  2.6.32-ovz-el-alt88, кстати, пытается ставиться grub2... а грузится все равно в результате extlinux - опять куда-то он чего-то не дописывает.

Но теперь осталась последняя вещь, которую надо поправить в пакете startup-0.9.8.38-alt1 : при попытке остановить такой mdraid с корнем на /dev/mdop1 не срабатывает условие в rc.d/scripts/raidstop, которое исключает корневой раздел из остановки, и все время выдается, что попытка остановить еще использующийся raid:
[ "/dev/md0" != "/dev/md0p1" ] || continue

поэтому сюда (в т.ч. и в пакет в сизифе?)  тоже требуется патч, мой вариант:

--- /etc/rc.d/scripts/raidstop.orig     2013-05-24 09:51:47.857672726 +0400
+++ /etc/rc.d/scripts/raidstop  2013-05-24 09:52:09.048291225 +0400
@@ -21,5 +21,5 @@

 for mddev in ${mdlist}; do
-       [ "$mddev" != "$rootdev" ] || continue
+       expr match $rootdev $mddev > /dev/null && continue
        action "Turning off RAID for $mddev:" $raidstop "/dev/$mddev"
 done

И последнее - скажите, как ведет себя загрузочный mdraid обычно? у меня наблюдается такая картина: 
1. сначала все грузится и работает на 2 дисках.
2. останавливаю виртмашину, убираю 1 диск (симуляция нарушения работы, без остановки машины не дает).
3. загрузка останавливается в initramfs, нет корня, mdraid из одного диска в состоянии inactive. можно сделать (в консоли initramfs) mdraid --run /dev/md0, и он станет active, но при след. перезагрузке опять все то же.
4. если загрузиться с livecd, который в процессе сделает mdraid assemble (успешно с одним диском), и не логинясь с livecd перезагрузиться опять с диска - то он загрузится с одним диском нормально (acrive degraded). можно заменить выпавший диск другим.

что чинит сборка mdraid в процессе загрузки livecd и можно то же как-то сделать без livecd, например из консоли initramfs ? это "у всех так", и требуется грузиться с установочного/rescue диска в таком случае?
Или можно как-то сделать, чтобы при пропадании 1 диска сервер просто грузился (в degraded), ведь по сути raid1 на то и нужен? ;)

-- 
Mike


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