[Comm] root raid on Master 2.2
Grigory Batalov
=?iso-8859-1?q?bga-no-spam_=CE=C1_kovgok=2Eru?=
Чт Ноя 6 10:36:54 MSK 2003
Господа, как правильно организовать software raid с загрузкой
с оного в Master 2.2 ?
Я перечитал дискуссию "root raid" в community@ и "software
raid" в kernel-devel@ и не нашёл готового рецепта (без миграции
на Сизиф). Поэтому опишу свои настройки; если появятся комментарии,
буду признателен.
Имеются:
- 5 SCSI дисков
- корзина hot-swap для них
- работающая инсталляция Master 2.2 на /dev/hda
Было решено создать RAID-5 на 4-х дисках плюс spare на пятом.
В некоторых источниках упоминается, что lilo может грузиться
с RAID-1, поэтому /boot сделан зеркальным.
$ cat /etc/raidtab
raiddev /dev/md0
raid-level 5
nr-raid-disks 4
nr-spare-disks 1
persistent-superblock 1
parity-algorithm left-symmetric
chunk-size 32
device /dev/sdb2
raid-disk 0
device /dev/sdc2
raid-disk 1
device /dev/sdd2
raid-disk 2
device /dev/sde2
raid-disk 3
device /dev/sda2
spare-disk 0
raiddev /dev/md1
raid-level 5
nr-raid-disks 4
nr-spare-disks 1
persistent-superblock 1
parity-algorithm left-symmetric
chunk-size 32
device /dev/sdb3
raid-disk 0
device /dev/sdc3
raid-disk 1
device /dev/sdd3
raid-disk 2
device /dev/sde3
raid-disk 3
device /dev/sda3
spare-disk 0
raiddev /dev/md2
raid-level 1
nr-raid-disks 4
nr-spare-disks 1
persistent-superblock 1
chunk-size 32
device /dev/sdb1
raid-disk 0
device /dev/sdc1
raid-disk 1
device /dev/sdd1
raid-disk 2
device /dev/sde1
raid-disk 3
device /dev/sda1
spare-disk 0
Для копирования таблиц разделов использовался sfdisk:
$ sudo sfdisk -d /dev/sda
Password:
# partition table of /dev/sda
unit: sectors
/dev/sda1 : start= 63, size= 2056257, Id=fd
/dev/sda2 : start= 2056320, size= 20482875, Id=fd
/dev/sda3 : start= 22539195, size= 49142835, Id=fd
/dev/sda4 : start= 0, size= 0, Id= 0
$ sudo sfdisk -d /dev/sda > table.sda
$ sudo sfdisk /dev/sdb < table.sda
...
$ sudo sfdisk /dev/sde < table.sda
Создание массивов:
$ sudo mkraid /dev/md0
$ sudo mkraid /dev/md1
$ sudo mkraid /dev/md2
md0 - корневой, md1 - /var, md2 - /boot
md* были подмонтированы в /mnt/disk и на них сброшена
работающая версия Master 2.2
Далее отредактированы /mnt/disk/etc/{fstab,lilo.conf}
$ cat /etc/fstab
/dev/md0 / reiserfs notail 1 1
/dev/md2 /boot reiserfs notail 1 2
devpts /dev/pts devpts gid=5,mode=0620 0 0
/dev/cdrom /mnt/cdrom auto user,iocharset=koi8-r,exec,ro,noauto 0 0
/dev/floppy /mnt/floppy auto user,noauto 0 0
proc /proc proc gid=19 0 0
/dev/md1 /var reiserfs notail 1 2
$ sudo cat /etc/lilo.conf
disk=/dev/md0
partition=/dev/md2
boot=/dev/md2
map=/boot/map
install=/boot/boot-bmp.b
vga=normal
default=2420-alt10-smp
lba32
prompt
timeout=50
image=/boot/vmlinuz-up
label=failsafe
root=/dev/md0
initrd=/boot/initrd-up.img
append=" failsafe"
vga=normal
read-only
other=/dev/fd0
label=floppy
unsafe
image=/boot/vmlinuz-2.4.20-alt10-up
label=2420-alt10-up
root=/dev/md0
read-only
optional
vga=normal
append=" "
initrd=/boot/initrd-2.4.20-alt10-up.img
image=/boot/vmlinuz-2.4.20-alt10-smp
label=2420-alt10-smp
root=/dev/md0
read-only
optional
vga=normal
append=" "
initrd=/boot/initrd-2.4.20-alt10-smp.img
Про disk=? и partition=? вычитано здесь:
http://www.tldp.org/HOWTO/Boot+Root+Raid+LILO-3.html#ss3.1
Не уверен, насколько это правильно или необходимо.
Затем было сказано 'lilo -r /mnt/disk'.
initrd для загрузки создавался по мотивам
http://www.atmsk.ru/index.php?option=faq&task=viewfaq&artid=163
Использовалась команда:
$ sudo mkinitrd --with raid5 --with raid1 --pause initrd-2.4.20-alt10-smp.img 2.4.20-alt10-smp
Для создания дискеты:
$ sudo mkbootdisk --mkinitrdargs '--with raid1 --with raid5 --pause' 2.4.20-alt10-smp
Во время паузы и ожидания нажатия ENTER в указанную директорию
initrd были скопированы:
/dev/md{0,1,2}
/dev/sd{a,b,c,d,e}{,1,2,3}
/etc/raidtab
/sbin/raidstart
В linuxrc дописано:
/sbin/raidstart /dev/md0 /dev/md1 /dev/md2
Raidstart в данном случае собирался статически, что позволило
обойтись без динамических библиотек и уместить initrd на дискету.
Для пересборки был взят raidtools-0.90-ipl11mdk.src.rpm.
В specfile добавлено '-static':
...
CFLAGS="$RPM_OPT_FLAGS -static" CXXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-static" ./autogen.sh
...
Бинарник получается после
$ rpmbuild -bi --target i586 raidtools.spec
в директории ~/tmp/raidtools-buildroot/sbin.
Несмотря на вышеизложенные действия (где была ошибка?),
загрузиться со SCSI не удалось. Не оказалось загрузочной
записи. Поэтому, загрузились с дискеты и сказали поочерёдно
$ sudo lilo -b /dev/sda
...
$ sudo lilo -b /dev/sde
После чего стало возможно загружаться сразу с дисков.
При сбое одного из дисков в массиве предполагается сделать:
$ sudo raidhotremove /dev/md0 /dev/sdN
$ sudo raidhotremove /dev/md1 /dev/sdN
$ sudo raidhotremove /dev/md2 /dev/sdN
<заменить диск N>
$ sudo sfdisk -d /dev/sda > table.sda
$ sudo sfdisk /dev/sdN < table.sda
$ sudo raidhotadd /dev/md0 /dev/sdN
$ sudo raidhotadd /dev/md1 /dev/sdN
$ sudo raidhotadd /dev/md2 /dev/sdN
$ sudo lilo -b /dev/sdN
Вопросы:
1. Как реагировать на сообщения типа:
md: invalid raid superblock magic on md2
md: md2 has invalid sb, not importing!
(ругается на все md*)
2. Чем чревато, что при перезагрузке не размонтируется md0
по причине busy, хотя md2 и md1 были только что успешно
размонтированы, и как с этим бороться?
3. Есть ли какая-нибудь утилитка, следящая за шиной SCSI и
рассылающая письма или мигающая лампочками при сбое диска?
--
Григорий Баталов,
группа техподдержки
ОАО "Ковдорский ГОК"
Подробная информация о списке рассылки community