Установка CentOS на программный RAID1
Периодически на форумах возникают вопросы о том как при установке Linux создать зеркало из
двух жестких дисков и, собственно, на него установить систему. Обычно на такие вопросы даются
или краткие неполные ответы или отправляют читать документацию, которая впрочем, достаточно
обширна и массивна. Поэтому здесь описан небольшой пошаговый HOW-TO по данному вопросу.
1. Установка системы и создание разделов
Итак, приступим.
Что мы имеем? Мы имеем компьютер с двумя одинаковыми жесткими дисками, на который требуется установить CentOS Linux 5.5.
Чего мы хотим добиться от Linux и этого компьютера?
На этапе установки ОС, средствами Linux объеденить два жестких диска в зеркальный массив RAID1;
Произвести установку "пингвина" на уже готовый раздел программного массива;
Сделать так чтобы в случае отказа одного из жестких дисков, массив позволял загрузить систему с оставшегося в массиве диска.
Поскольку последний попавшийся мне на глаза топик по этому вопросу был про CentOS, то ставить будем CentOS 5.5
(в текстовом режиме).
Итак, грузимся с компакт-диска, поехали:
На первых шагах установки параметры выбирайте по своему усмотрению,
до тех пор пока не дойдете до экрана "Partitioning type":
Убедитесь что внизу, в вопросе "Which drive(s) do you want to
use...?" отмечены оба жестких диска, если нет, то соответственно
их нужно отметить. Дальше выбираем вариант "Create custom layout" и жмем
"OK", видим два пустых диска:
Вот отсюда и начнется интересное. Жмем "NEW" и создаем раздел под
систему, тип раздела указываем "software RAID", размер раздела
можете указать по своему усмотрению (я решил все разместить на / и
сделать его загрузочным, соответственно, размер раздела у меня равен
размеру жесткого диска за вычетом 1Гб под swap):
Следом за основным разделом, в оставшемся 1Гб свободного пространства создаем еще один раздел такого же типа:
Теперь мы имеем разделы на первом жестком диске, далее по аналогии создайте точно такие же разделы на втором
винчестере (важно чтобы совпадали размеры разделов и чтоб тип у них был "software RAID"). После того как на втором диске разделы
будут созданы, можно нажимать кнопку "RAID" и приступать к созданию зеркал.
Первое зеркало создаем, соответственно из разделов sda1 и sdb1, точку монтирования указываем /, файловая система ext3:
Второе зеркало создаем соответственно из sda2 и sdb2, без точки монтирования и в файловой системе указываем что это будет
swap:
В итоге должно получиться следующее:
Далее продолжайте установку, когда инсталлятор спросит Вас куда
устанавливать загрузчик grub, то у Вас будет два варианта - /dev/sda1
или /dev/md1.
По умолчанию будет выбран второй вариант, хотя это пока без разницы,
продолжайте далее настройку как обычно..
2. Первичная настройка
Итак, Ваша система установилась и после первой загрузки Вы зашли в консоль под root и видите приглашение системы?
Замечательно! Теперь Вы можете проверить состояние наших райдов:
# cat /proc/mdstat
| Personalities: [raid1] |
| md0 : | active raid1 sdb2[1] sda2[0] |
| | 1052160 blocks [2/2] [UU] |
| |
| md1 : | active raid1 sdb1[1] sda1[0] |
| | 7333568 blocks [2/2] [UU] |
| |
| unused devices: <none> |
Здесь мы видим что с обоими райдами у нас все в порядке. Теперь давайте посмотрим что у нас в настройках grub.conf:
# cat /boot/grub/grub.conf | grep -v '#'
| default=0 |
| timeout=5 |
| splashimage=(hd0,0)/boot/grub/splash.xpm.gz |
| hiddenmenu |
| title CentOS (2.6.18-194.el5) |
| root (hd0,0) |
| kernel /boot/vmlinuz-2.6.18-194.el5 ro root=/dev/md1 |
| initrd /boot/initrd-2.6.18-194.el5.img |
| |
В этом конфиге мы видим что системе указано выполнять загрузку с
/dev/md1 (если при установке Вы указывали устанавливать загрузчик на
/dev/sdaX, то соответственно конфиг будет другой),
т.е. при старте система попытается загрузиться с зеркального
массива. Однако, строка "root (hd0,0)" означает что из зеркала будет
взят первый диск и загрузка будет произведена именно с него.
Разумеется, нас это совершенно не устраивает, т.к. если первый
жесткий диск выйдет из строя, система не загрузится.. Поэтому открываем в
текстовом редакторе (кому как нравится, а я юзаю mc->F4, ( yum
install mc)),
файл grub.conf и приводим к следующему виду:
# cat /boot/grub/grub.conf | grep -v '#'
| default=0 |
| timeout=5 |
| splashimage=(hd0,0)/boot/grub/splash.xpm.gz |
| hiddenmenu |
| fallback=1 |
| title CentOS (2.6.18-194.el5) hd0 |
| root (hd0,0) |
| kernel /boot/vmlinuz-2.6.18-194.el5 ro root=/dev/md1 |
| initrd /boot/initrd-2.6.18-194.el5.img |
| title CentOS (2.6.18-194.el5) hd1 |
| root (hd1,0) |
| kernel /boot/vmlinuz-2.6.18-194.el5 ro root=/dev/md1 |
| initrd /boot/initrd-2.6.18-194.el5.img |
| |
Как Вы уже наверное догадались, вторым пунктом добавлена настройка,
указывающая загружать систему с того же зеркала /dev/md1,
но уже со второго диска ("root (hd1,0)"). Так вот, если вдруг, не
дай бог конечно, первый диск выйдет из строя, то как раз на
этот случай вставлена опция "fallback=1" - в случае неудачной
загрузки пункта #0 (hd0) система предпримет попытку загрузиться
со следующего пункта #1 (hd1).
Теперь у нас grub знает что в случае чего он может пытаться
грузиться с обоих жестких дисков, однако сам загрузчик grub у нас
установлен в данный момент только на первый диск (hd0). Поэтому мы
должны установить загрузчик на оба жестких диска
(жирным шрифтом отмечены сами команды, остальное вывод):
# grub
grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0xfd
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)"... 15 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2 /boot/grub/grub.conf"...succeeded
Done.
grub> root (hd1,0)
Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd1)
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 (hd1)"... 15 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+15 p (hd1,0)/boot/grub/stage2 /boot/grub/grub.conf"...succeeded
Done.
grub> quit
Теперь проверим установлен ли пакет mdadm, и если да (у меня он
установился вместе с базовой системой), то посмотрим mdadm.conf:
# rpm -q mdadm; [ $? -ne 0 ] && yum install mdadm
mdadm-2.6.9-3.el5
# cat /etc/mdadm.conf
# mdadm.conf written out by anaconda
DEVICE partitions
MAILADDR root
ARRAY /dev/md1 level=raid1 num-devices=2 uuid=f4dd2513:b4fdec87:439604e2:8e576bfe
ARRAY /dev/md0 level=raid1 num-devices=2 uuid=7c07db93:1e0033d7:08928ab1:563c4697
Думаю с утилитой mdadm Вы сможете сами разобраться ;), впрочем, если Вы новичек в Linux, то советую с ней быть поосторожней.
На этом пока все. Если желаете можете проверить как система загрузится при отключенном первом диске, но, опять же,
если Вы новичек то я не советую Вам этого делать самостоятельно! А здесь этот процесс я описывать не буду, пока не буду -
чуть позже опищу..
3. Проверка
Впрочем, если Вы таки взялись попробовать то помните: после того как
Вы снова сервер выключите и подцепите диск обратно, то загрузив сервер
обязательно посмотрите состояние
массивов командой "cat /proc/mdstat"! Скорее всего массивы уже будут
в состоянии синхронизации, это означает что данные с "уцелевшего"
диска будут копироваться на вновь подцепленный диск.
Если в массивах разделы только что подцепленного диска будут
отсутствовать, то их можно передобавить в массив сделующим образом:
# cat /proc/mdstat
| Personalities: [raid1] |
| md0 : | active raid1 sdb2[1] sda2[0] |
| | 1052160 blocks [2/2] [UU] |
| |
| md1 : | active raid1 sdb1[1] |
| | 7333568 blocks [2/1] [U_] |
| |
| unused devices: <none> |
# mdadm --manage /dev/md1 --re-add /dev/sda1
mdadm: re-added /dev/sda1
# cat /proc/mdstat
| Personalities: [raid1] |
| md0 : | active raid1 sdb2[1] sda2[0] |
| | 1052160 blocks [2/2] [UU] |
| |
| md1 : | active raid1 sda1[2] sdb1[1] |
| | 7333568 blocks [2/1] [_U] |
| [=>...................] recovery = 6.6% (487424/7333568) finish=1.8min speed=60928K/sec |
| |
| unused devices: <none> |
Источник: http://sysadmins.me/topic/633/ |