Прошу добавить нормальную установку на софтовые рейды (md - mdadm).
По пунктам:
Автоопределение и сборка существующих рейдов в системе. Необходимо:
а) Поддержка в ядре (желательно статикой, т.к. становится доступным пункт автоматической сборки рейдов). Плюс убираются ошибки когда очистка ядра от лишних модулей сносит из Initrd модули raid1 и т.д. (Да, у меня так получилось при установке).
б) Сборка существующих рейдов скриптом. Автосборка при загрузке ядра происходит только в случае если загрузочное устройство MD-девайс (root=/dev/md0 ядру при загрузке), /etc/init.d/./mdraid соберет только рейди которые прописаны в /etc/mdadm.conf
Соотв нужно выполнить mdadm --examine --scan >> /etc/mdadm.conf и /etc/init.d/./mdraid start
2) Корректная установка загрузчика при установке на /dev/mdX. Нужно определить из чего состоит рейд (груб даст загрузиться только с миррора aka raid1 и jbod), и прописать в эти разделы (mbr этих дисков) груба. Стандартная установка приводит к Error 17 (неверно указан диск). Если надо скрипт могу набросать на баше или перле. В питоне не силен. Лечится (для md0 состоящего из /dev/sda1 /dev/sdb1):
mount -o bind /dev /mnt/md0
chroot /mnt/md0 /bin/bash
nano /etc/mtab:
/dev/sdA1 / ext3 rw,noatime 0 0
grub-install --root-directory=/boot /dev/sdA
nano /etc/mtab:
/dev/sdB1 / ext3 rw,noatime 0 0
grub-install --root-directory=/boot /dev/sdB
Еще в /boot/grub/grub.conf фигурирует вместо root (hd0,0) просто root () и все пути в таком виде, т.е. не определено какое это устройство. Имхо коррекция небольшая, а сколько радости.
После выпуска CL 9.9 займемся поддержкой и добавлением новых фич в calculate.
Если не сложно, напишите скрипт на баше. Т.к. мы не работаем с софтовым рейдом, разобраться в нюансах и перенести алгоритм будет намного проще и быстрее.
Вот скриптик - проходит тестовые испытания, хотя поломаться тут вроде негде. Условия - raid1 состоит из разделов (не винт целиком), два винта. Груба поставить в MBR.
#!/bin/bash
# В $1 нужно передать md устройство , например md0
mddev=`cat /proc/mdstat | grep $1`
status=`echo $mddev| awk '{print $3}'`
type=`echo $mddev| awk '{print $4}'`
dev1=`echo $mddev| awk '{print substr ($5,1,3)}'`
dev2=`echo $mddev| awk '{print substr ($6,1,3)}'`
devr1=`echo $mddev| awk '{print substr ($5,4,1)-1}'` # Номер раздела, начиная с нуля
devr2=`echo $mddev| awk '{print substr ($6,4,1)-1}'`
#echo $status,$type,$dev1,$dev2,$devr1,$devr2
# Груб нормально станет только на миррор - raid1
if [ $type = "raid1" ]; then
#echo Raid1
echo "device (hd0) /dev/$dev1 " > grubb
echo "root (hd0,$devr1) " >> grubb
echo "setup (hd0) " >> grubb
echo "device (hd0) /dev/$dev2 " >> grubb
echo "root (hd0,$devr2) ">> grubb
echo "setup (hd0) " >> grubb
#cat grubb
grub --batch <grubb
else
echo Bad raid type
fi
Еще в /boot/grub/grub.conf пути типа (hd0) выглядят как () например root () Ессно груб такого не понимает. Нужно поменять на root (hd0)
Вот собственно и все.
Создать рейд:
echo y > yes
mdadm --create /dev/md0 --level=1 -n 2 --assume-clean /dev/sda1 /dev/sdb1 < yes