пятница, 31 мая 2013 г.

Установка Gentoo Linux на полусофт RAID + грабли GRUB

Ранее я уже описывал как поставить Gentoo на RAID1, однако тут сам же и не смог поставить по собственной инструкции. Прямо скажем - обидно! Зато есть повод написать продолжение.



Итак, ситуация - новый сервер, на борту софтовый рэйд контроллер от Intel, нужно поставить Gentoo.
Загружаемся с установочного диска и видим, что танцев с бубном вокруг поиска и настройки RAID1 не требуется, поскольку всё нашлось и определилось само и вполне себе активно синхронизируется.
livecd:~# dmraid -s
*** Group superset isw_cjcbeeejbf
--> Subset
name : isw_cjcbeeejbf_DATA
size : 3906994432
stride : 128
type : mirror
status : ok
subsets: 0
devs : 2
spares : 0
*** Group superset isw_bfidbafgjb
--> Subset
name : isw_bfidbafgjb_SYSTEM
size : 1953493248
stride : 128
type : mirror
status : ok
subsets: 0
devs : 2
spares : 0


livecd:~# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] [linear] [multipath]
md124 : active raid1 sda[1] sdb[0]
976746496 blocks super external:/md126/0 [2/2] [UU]
[=============>.......] resync = 69.4% (678710528/976746628) finish=43.3min speed=114622K/sec

md125 : active raid1 sdc[1] sdd[0] 1953497088 blocks super external:/md127/0 [2/2] [UU]

md126 : inactive sdb[1](S) sda[0](S)
4514 blocks super external:imsm

md127 : inactive sdd[1](S) sdc[0](S)
4514 blocks super external:imsm

unused devices:
Диски определились как /dev/md12x (в моём случае md124 и md125)
Создаем /etc/mdadm.conf
livecd:~# mdadm --detail --scan > /etc/mdadm.conf
Содержимое будет иметь вид:
ARRAY /dev/md/imsm0 metadata=imsm UUID=0f93ec7a:d97890f1:49c2bff5:f0c782b6
ARRAY /dev/md/imsm1 metadata=imsm UUID=4bfb8b87:5a5587a9:b21a6517:040ca794
ARRAY /dev/md/DATA_0 container=/dev/md/imsm0 member=0 UUID=66874fe5:2bc1e705:bef7be5b:d482986b
ARRAY /dev/md/SYSTEM_0 container=/dev/md/imsm1 member=0 UUID=df6c9fdf:d3b69a0f:aad840df:7de9c078 
ВНИМАНИЕ перед переходом в новую среду (chroot), этот файл ОБЯЗАТЕЛЬНО СКОПИРОВАТЬ в /mnt/gentoo/etc/mdadm.conf !!!
Дожидаемся окончания синхронизации и создаем нужные для установки разделы:
 livecd:~# fdisk /dev/md124
Дальше действуем по инструкции, но с некоторыми отличиями:
Ядро я собираю с помощью genkernel, чтобы включить поддержку mdadm и dmraid в ядре, предварительно необходимо установить LVM2
(chroot)livecd~# emerge lvm2
Собираем ядро:
 (chroot)livecd~# genkernel --dmraid --mdadm all
Устанавливаем mdadm и dmraid
 (chroot)livecd~# emerge -av dmraid mdadm
 В /etc/fstab имеет смысл прописать не путь к устройствам (вида /dev/md124p1), а их UUID. Узнаем UUID'ы
(chroot)livecd~# blkid
/dev/md124p1: UUID="17ef3691-32ae-47f0-9fff-7ccc4cb06d5a" TYPE="ext2"
/dev/md124p2: UUID="71af8bea-4488-4768-8a9d-c54d9c8c14ce" TYPE="swap"
/dev/md124p3: UUID="ce7bf387-f359-45c5-b43b-ad51abbfcd39" TYPE="ext4"
 прописываем в /etc/fstab
UUID=17ef3691-32ae-47f0-9fff-7ccc4cb06d5a /boot ext2 noauto,noatime 1 2
UUID=ce7bf387-f359-45c5-b43b-ad51abbfcd39 / ext4 noatime 0 1
UUID=a9b2e7c5-9ffd-4981-a205-efda4967ab6a /home ext4 noatime 0 1
Устанавливаем и настраиваем GRUB.
В grub.conf в качестве real_root прописываем UUID раздела и добавляем ключи domdadm и dodmraid
default 0
timeout 10
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Gentoo Linux x86_64-3.8.13
root (hd0,0)
kernel /boot/kernel-genkernel-x86_64-3.8.13-gentoo root=/dev/ram0 real_root=UUID=ce7bf387-f359-45c5-b43b-ad51abbfcd39 domdadm dodmraid
initrd /boot/initramfs-genkernel-x86_64-3.8.13-gentoo
Правим /boot/grub/device.map, вместо sda,sdb и т.д. указываем md124, md125...
(hd0)   /dev/md124
(hd1)   /dev/md125
Прописываем GRUB:
  (chroot)livecd~# grub-install --no-floppy /dev/md124
И получаем тут хрен по глупой морде в виде ошибки 22. Но не расстраиваемся, поскольку люди мы бывалые. Открываем инструкцию написаную ранее 
(chroot)livecd~# grub --device-map=/dev/null
grub> device (hd0) /dev/md124
grub> geometry (hd0) C H S
grub> root (hd0,0)
  Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
и ...
очередной хрен по глупой морде вида:
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 22 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+22 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... failed

Error 22: No such partition
 А вот это уже настораживает, начинаем пробовать разные варианты устройств (типа /dev/md/SYSTEM_0 и т.д.) реакции ноль, сплошная ошибка 22.
В ходе усиленных поисков решение нашлось простое, но требующее хомячьей запасливости.
Нам потребуется дисковод и отформатированная дискета. У меня нашелся USB дисковод для ноутбука и пара дискет(как я это добро не выкинул уж и не знаю)
Приступим:
Форматируем дискету
(chroot)livecd~# mkfs.msdos /dev/fd0
Поскольку дисковод у меня USB, он определился как /dev/sde, поэтому, в моем случае -
(chroot)livecd~# mkfs.msdos /dev/sde
Закидываем на дискету GRUB
(chroot)livecd~#  cd /boot/grub
(chroot)livecd~#  dd if=stage1 of=/dev/fd0 bs=512 count=1
(chroot)livecd~#  dd if=stage2 of=/dev/fd0 bs=512 seek=1
после чего перезагружаем систему с полученной дискетки. После загрузки сразу попадаем в консоль GRUB. Выполняем там следующие действия:
grub> device (hd0) /dev/md124
grub> root (hd0,0)
grub> setup (hd0)
Теперь все встало без ошибок. Вытаскиваем дискету, жмем Ctrl+Alt+Del.
Все, система загружается как надо. 

Комментариев нет:

Отправить комментарий