[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