Установка Arch на Software RAID1


ArchLinux имеет очень-очень хороший Wiki с документацией на разных языках. Я бы
 даже сказал - это один из лучших Wiki вместе с Wiki Gentoo. Вот попалась мне
 задача - установить Arch на RAID1 и... возникли вопросы, которые, как мне
 показалось, в официальных доках подробно не рассмотрены.

Вообще, установка Arch проста - у нее чудесный и очень удобный инсталлятор, не
 такой навороченный как в Debian, но зато позволяющий в любой момент допилить
 что-нибудь из shell. К примеру, RAID инсталлятор не поддерживает - нужна небольшая
 магия. Короче, поехали. Вставляем CD, грузимся, но перед тем, как запустить
 инсталлятор /arch/setup  разбиваем диск на партиции. Повторюсь - моя
 задача - установить Arch на зеркальный RAID1 - чтобы всё было надежно, как в танке.

== Разбиение ==

Диски у меня большие - по 2Тб. Если были бы еще больше, то разбивать их с помощью
 fdisk/mbr - бесполезно. MBR не видит больше 2Тб. Понадобится parted/gpt. Но в моем
 случае хватает и fdisk. Разбивая на партиции - нужно понимать, что на больших дисках
 партиции нужно выравнивать по цилиндрам, иначе, судя по некоторым тестам, диск может
 "тормозить" и терять до 30% своей эффективной скорости чтения-записи. Пользуюсь
 ключиком -u, который сам устанавливает правильные границы выравнивания:

# fdisk -u /dev/sda

Разбить, кстати, можно и с помощью parted:

# parted -a optimal /dev/sda

Выравнивание можно проверить всё там же - в parted:

(parted) align-check opt 1
1 aligned
(parted) align-check opt 2
2 aligned
(parted) align-check opt 3
3 aligned

После записи с помощью sfdisk разбиение легко скопировать на другой винт, однако
с ключиком --force, поскольку на выровненные партиции sfdisk чуть-чуть ругается:

# sdfisk -d /dev/sda | sfdisk --force /dev/sdb

Я разбил свои диски так (упрощенно):

100M   /boot  (будет ext2)
~2000G  /      (будет ext4)
 4G     swap

Кстати, при записи для партицией нужно выставлять тип партиции fd,
что означает software raid autodetect.

Дальше все там же из консоли собираем RAID1:

# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
# mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2
# mdadm --create /dev/md3 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3

Тут у меня начался главный тормоз, который я потом долго "думал". Дело в том, что raid-
устройства создались в формате metadata=1.20, а grub 0.97, идущий с инсталлятором такой 
формат не поддерживает. Если продолжить инсталляцию дальше стандартным исталлятором - grub 
на последнем шаге не установится, и система вообще не загрузится. Обломно. Чтобы все было 
легко - можно было бы сделать так:

# mdadm --create /dev/md1 --level=1 --metadata=0.90 --raid-devices=2 /dev/sda1 /dev/sdb1
# mdadm --create /dev/md2 --level=1 --metadata=0.90 --raid-devices=2 /dev/sda2 /dev/sdb2
# mdadm --create /dev/md3 --level=1 --metadata=0.90 --raid-devices=2 /dev/sda3 /dev/sdb3

Но мне хотелось "ускориться" и использовать новый формат. Т.е. как-то использовать grub2,
умеющий его понимать. Подумаем по ходу пьесы.

== Инсталлятор автоматический и ручной ==

После создания raid-узлов, наконец-то нужно запустить /arch/setup и аккуратно 
выполнить все пункты до разбиения дисков. Вместо разбиения - выбрать Manual configure 
block devices, filesystems, etc... и сделать правильную разметку и файловые системы 
для устройств /dev/md1 (/boot), /dev/md2 (/), /dev/md3 (swap) После этого конфигурения 
новые файловые системы автоматически будут замонтированы в /mnt/ и /mnt/boot.

Следующим шагом является выбор и установка пакетов - выбираем и устанавливаем.
Ничего сложного. Все просто. А вот дальше...

Скажу теперь "хитрость" - чтобы не выходить из установщика - нужно нажать Ctrl+F2 и 
работать в соседней консоли. В консоли нужно сконфигурить сеть. В Arch сеть вообще нужна 
обязательно - установочный диск содержит самый-самый минимум пакетов.

# aif -p partial-configure-network
# cp /etc/resolv.conf /mnt/etc

И вот теперь делаем chroot в новую систему:

# mount -t proc proc /mnt/ptoc
# mount -t sysfs sys /mnt/sys
# mount -o bind /dev /mnt/dev
# chroot /mnt /bin/bash

И вот тут у меня произошла еще одна нештатная ситуация. В новой системе было не видно 
примонтированных дисков и из-за этого pacman не мог установить пакеты: "Not 
enougth space". Решается так:

# grep -v rootfs /proc/mounts > /etc/mtab

Теперь с пакетами и установкой пакетов всё в порядке:

# pacman -Syy
# pacman -S grub2-bios

grub2, кстати, предложит удалить grub, который как один из штатных пакетов установился 
инсталлятором. Соглашаемся. Если нужно - правим конфиг grub2:

# vi /etc/default/grub

Теперь наконец-то устанавливаем загрузочную запись:

# grub-install /dev/sda --no-floppy
# grub-install /dev/sdb --no-floppy

И автоматически генерим конфиг

# grub-mkconfig -o /boot/grub/grub.cfg

Теперь перегенерим связи ядра:

# mkinitcpio -p linux

Выходим из новой системы и в финале не забудем сделать конфиг для наших raid-устройств:

# exit
# mdadm --examine --scan >> /etc/mdadm.conf
# reboot

Замечу, что в инсталляторе Arch, который остался в первой консоли, мы так и не завершили 
последний шаг - установку grub. Вместо этого мы самостоятельно руками установили "более 
модный" grub2.

== Мелкие баги или фичи ==

После перезагрузки у меня всё ОК, но возникли мелкие помарочки, которые однако
позволили загрузиться.

1. grub2 выдал: "error: file '/boot/grub/locale/en.mo.gz' not found"

Решение:

# cp /boot/grub/locale/en@guot.mo /boot/grub/locale/en_US.mo

2. pacman -Syu не сумел обновить пакеты. сначала выдал что-то типа: "/etc/mtab error"

Решение:

# pacman -S filesystem --force

3. Потом pacman -Syu опять не обновил пакеты с багом: 

"initscripts: /etc/profile.d/locale.sh exists in filesystem"

Решение:

# mv /etc/profile.d/locale.sh /etc/profile.d/locale.sh.old

И вот таперь всё отлично! На восьмиядерном проце AMD FX система летает с такой скоростью, 
что дух захватывает, а благодаря UPS, RAID1 и бекапам на удаленные компьютеры - надежна до 
бесконечности. И не надо менять версии - ведь у нас rolling-release. И не надо компилить 
пакеты - поэтому все 8 ядер свободны и готовы к полезному труду на благо мастера.

== Примечания ==

В этой статье я не упомянул, что во время установки можно было бы и локали настроить, и 
русский язык сделать, и зеркала для обновлений указать, а в хуки ядра еще и mdadm 
прописать для загрузки. Думаю, всё это элементарно и без меня описано очень подробно.