воскресенье, 22 мая 2016 г.

Как "правильно" настроить программный RAID в CentOS 6

Везде пишут как настроить программный RAID в Центе. Здесь я обращу внимание на ошибки, которые я допустил, из-за чего настройка заняла много времени.
Задача возникла при смене неисправного диска в существующем RAID-1.

Разметить новый диск по аналогии со старым - не проблема. Однако у меня оказалась GPT, поэтому fdisk не мог его разметить, пришлось устанавливать gdisk. Отличия в интерфейсе между ними не значительные.
Тут появилась первая проблема. При попытке добавить раздел в RAID возникала ошибка, сообщающая что раздел, который добавляется в RAID слишком маленький. Оказалось, что после работы gdisk информация о разделах диска не обновляется в ядре линукса. Проблема решается путем запуска программы partprobe.

Дальше эксперименты проводил на виртуалке. И никак не мог правильно поставить загрузчик, при том, что каталог /boot  у меня на отдельном разделе. Тут выяснилась вторая ошибка. Как и рекомендовано в некоторых инструкциях, под раздел boot был создан отдельный RAID, в котором создан primary-раздел. Не надо было создавать отдельный RAID. Нужно взять обычный раздел Linux (с кодом 83) и добавить его в RAID. В итоге он вроде как и обычный раздел, виден загрузчику, а вроде как и RAID и синхронизируется со вторым диском.

Третья ошибка - настройка grub. Нужно иметь ввиду, что загрузка со второго диска будет происходить при отсутствии первого, при этом диск станет первым. То есть конфигурация grub'а идентична для обих дисков и про второй диск в ней нет упоминания.

default=0
timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS 6 (2.6.32-504.el6.x86_64) (RAID)         root (hd0,0)         kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/md1p1 rd_NO_LUKS rd_NO_LVM rd_MD=/dev/md0,/dev/md1 LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM quiet         initrd /initramfs-2.6.32-504.el6.x86_64.img
(Не забыть перед установкой grub обновить загрузчик командой mkinitrd.)
А вот при установке grub'а нужно постараться. Так как предполагается, что при  аварии второй диск станет первым, grub нужно устанавливать как на первый диск, дав вначале команду device (hd0) /dev/sdb:

grub> device (hd0) /dev/sdb
device (hd0) /dev/sdb
grub> find /grub/stage1
find /grub/stage1
 (hd0,0)
 (hd1,0)
grub> root (hd0,0)
root (hd0,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup (hd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd0)"... failed (this is not fatal)
 Running "embed /grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal)
 Running "install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf "... succeeded
Done.