Установка на софтварный рейд

Прошу добавить нормальную установку на софтовые рейды (md - mdadm).

По пунктам:

  1. Автоопределение и сборка существующих рейдов в системе. Необходимо:
    а) Поддержка в ядре (желательно статикой, т.к. становится доступным пункт автоматической сборки рейдов). Плюс убираются ошибки когда очистка ядра от лишних модулей сносит из 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