25 апреля 2012

Установка Gentoo: mdadm, GPT и grub2

Набросал небольшой хауту, может кому пригодится.

Имеем 2 SATA-винта по 500GB, материнскую плату на ICH5 чипсете (со встроенным matrix-raid от Intel, под который ессно нет дров). Надо, на всём этом, сделать программный RAID1, чтобы в случае падения одного винта система продолжала работать.


Почему выбрана система разметки GPT? Во-первых, это модно =) Ну правда, я люблю использовать самые последние наработки, даже если на освоение их у меня уйдёт больше времени. Во-вторых, GPT держит винты больше 2TB (опять же, хз зачем это в данной ситуации). В-третьих, да просто по приколу =)

Grub2 нужен потому как только он умеет грузиться с GPT (вариант патченного 0.9х как-то не захотелось). В этой статье не описано как его ставить, но поверьте, процесс 1:1 как с обычным MBR - тупо ставится на весь диск + повторить для второго диска (рейд не понимает boot-запись).

Собсна, сам howto/tipsnote
--------------------------------------------------------

-1. Скачать SystemRescueCD и записать его на CD-R, или, что более современно - на USB Flash.

0. Загрузить ядро с опцией nodmraid, т.к. dmraid может захватить диски, обнаружив на них какой-нть рейд, установленный до этого. Можно и не отключать его, а очистить его таблицу - "dmsetup table" - покажет что он "назахватывал", "dmsetup remove <id>" - для каждой записи, чтобы удалить найденный раздел и дальше нормально размечать. Ещё неплохо сделать кэширование всего CD-R/USB в память, чтобы спокойно вытащить его после загрузки.

0.1 При выборе ядра при загрузке - учитываем разрядность - x86 или x86_64. От этого зависит сможем ли мы зачрутиться в дальнейшем в систему отличающейся разрядности =)

1. Разметить первый диск (/dev/sda) утилитой gdisk (мы же хотим GPT-разметку заместо тупой старой MBR):
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            4095   1024.0 KiB  EF02  BIOS boot partition
   2            4096          266239   128.0 MiB   FD00  /boot
   3          266240         8654847   4.0 GiB     FD00  swap
   4         8654848        29626367   10.0 GiB    FD00  /
   5        29626368        71569407   20.0 GiB    FD00  /mnt/squid
   6        71569408       281284607   100.0 GiB   FD00  /mnt/mail
   7       281284608       976773134   331.6 GiB   FD00  /mnt/store
Небольшое пояснение, зачем нужен первый раздел типа EF02 в 1Мб - для Grub2, ну типа чтобы было совсем по-порядку =) Подробнее здесь.

2. Скопировать таблицу разделов с первого на второй, сгенерировать GUID для второго:
sgdisk -G -R=/dev/sdb /dev/sda

Эту шаманскую команду я искал долго =)

3. modprobe raid1

4. Создаём RAID1 для разделов 2-7 обоих дисков (зеркалируем каждый раздел на оба диска)
for i in {2..7}; do mdadm --create /dev/md$i --level=1 --raid-devices=2 /dev/sda$i /dev/sdb$i; done

Собсна, это главная команда всего этого howto =)

4.1. Можно любоваться процессом синхронизации:
watch -n .1 cat /proc/mdstat

А можно ставить дальше. Однако до установки Grub2 и перезагрузки процесс синхронизации должен быть закончен.

5. Создаём файловые системы:
mkfs.ext2 -L'/boot' /dev/md2
mkswap -L'swap' /dev/md3
mkfs.ext4 -L'/' -b 4096 -E stride=8,stripe-width=8 /dev/md4
mkfs.ext4 -L'/mnt/squid' -b 4096 -E stride=8,stripe-width=8 /dev/md5
mkfs.ext4 -L'/mnt/mail' -b 4096 -E stride=8,stripe-width=8 /dev/md6
mkfs.ext4 -L'/mnt/store' -b 4096 -E stride=8,stripe-width=8 /dev/md7

"-b 4096 -E stride=8,stripe-width=8" немного тюнят файловую систему для использования в рейдах. Можно рассчитать например тут.

6. Подключаем их:
swapon /dev/md3
mount /dev/md4 /mnt/gentoo
mkdir /mnt/gentoo/boot
mkdir -p /mnt/gentoo/mnt/squid
mkdir -p /mnt/gentoo/mnt/mail
mkdir -p /mnt/gentoo/mnt/store
mount /dev/md2 /mnt/gentoo/boot
mount /dev/md5 /mnt/gentoo/mnt/squid
mount /dev/md6 /mnt/gentoo/mnt/mail
mount /dev/md7 /mnt/gentoo/mnt/store

7. Скачиваем stage3 и portage (ссылки могут быть другими, можно воспользоваться elinks чтобы скачать нужные файлы из других мест). Распаковываем их:
cd /mnt/gentoo
wget http://mirror.yandex.ru/gentoo-distfiles/snapshots/portage-latest.tar.bz2
wget http://mirror.yandex.ru/gentoo-distfiles/releases/amd64/current-stage3/stage3-amd64-20120329.tar.bz2
tar xvjpf stage3-amd64-20120329.tar.bz2
tar xvjf portage-latest.tar.bz2 -C /mnt/gentoo/usr

8. Сохраняем конфигурацию рейда:
mdadm --detail --scan >> /etc/mdadm.conf
mkdir /mnt/gentoo/etc
cp /etc/mdadm.conf /mnt/gentoo/etc/mdadm.conf

9. Скопируем resolv.conf, чтобы мы могли скачивать в новой генте (чруте):
cp /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

10. Монтируем дополнительно 2 псевдо-системы для нормального функционирования чрута:
mount --rbind /dev /mnt/gentoo/dev
mount --rbind /proc /mnt/gentoo/proc

11. Приводим /mnt/gentoo/etc/make.conf примерно до такого вида:
# опции компилятора, практически стандартные, кроме -march=native (вместо -march=i686), что обязывает компилятор юзать все возможности проца. Если стоит задача сделать железонезависимую установку, то лучше не использовать, т.к. при восстановлении на новом железе (возможно) придётся перекомпилить весь мир.
CFLAGS="-O2 -pipe -march=native"
# количество процессов при сборке пакета, рекомендуется ставить = кол-во процов + 1
MAKEOPTS="-j3"
USE="mmx sse sse2 unicode slang udev idn"
GENTOO_MIRRORS=http://mirror.yandex.ru/gentoo-distfiles/
SYNC="rsync://rsync.ru.gentoo.org/gentoo-portage"
LINGUAS="ru en"

12. Чрутимся =)
chroot /mnt/gentoo /bin/bash
env-update
source /etc/profile

13. Пока всё =)

1 комментарий:

  1. Хоть и через много лет, но статья помогла разобраться, спасибо!
    От себя добавлю что надо подредактировать genkernel.conf (тем кто им собирает) MDADM="yes", так же добавить в /etc/default/grub
    строку GRUB_CMDLINE_LINUX_DEFAULT="domdadm"
    Ну и про опции ядра не забыть.

    ОтветитьУдалить