Софтовый RAID1 на CentOS

Речь пойдет о переносе существующей CentOS на софтовый RAID1.

Предистория.

После очередного выхода из строя очередного винта назрела таки необходимость внедрения raid-ов. Так как на что-то вроде raid5 или raid10 винтов надо «много» (ну хотя бы 4), а обьемов существующих для моих нужд вполне достаточно решил для начала поэкспериментировать с raid1. Хотя на материнке и присутствует raid контроллер, но фраза в мануале «если вы хотите установить ОС используя raid — скопируйте драйвер на флопи диск…» напрочь отбивает охоту оный использовать.

После поиска возможных вариантов миграции на софтовый raid для linux и анализа был выбран (помоемому) самый простой способ, правда требующий физического доступа к серверу, установочного/восстановительного диска и парочки перезагрузок сервера.

Большинство «рецептов» (например http://www.howtoforge.com/software-raid1-grub-boot-fedora-8) описывает переход на raid «пораздельно» — т.е. Второй диск разбивается точно также как и первый, затем одинаковые разделы обьединяются в raid массив.

Но, как оказалось, mdadm начиная с 2.6 поддерживает обьединение в raid уже целяком всего устройства! Без необходимости предварительного разбиения, переносов и т.д.

Был обнаружен довольно короткий документ http://wiki.centos.org/HowTos/Install_On_Partitionable_RAID1 Дальнейшее изложение полностью основывается на этом документе.

Изменена последовательность действий и добавлено пару-тройку замечаний.

Процесс переноса:

Подготовка:

Нам потребуется установочный диск, т.к. переносилась CentOS5.3 — её диск и был взят.

Для размещения служебной информации mdadm требуется немножко неразмеченого места на диске, а диск при установке был задействован полностью. По старой привычке /home, /var/log и /tmp были созданы отдельными разделами причем /tmp — последний; посему сильно не заморачиваясь раздел /tmp был попросту ликвидирован (позже на raid-е создан заново).

Проверяем, что установлены mdadm версии не ниже 2.6

rpm -q mdadm
mdadm-2.6.4-1.el5

Теперь выясняем что собственно у нас куда примонтировано:
в /etc/fstab лично у меня было:

LABEL=/1 / ext3 defaults 1 1

и т.д.

Какое устройство соответствует этой метке обнаружилось в файлике /etc/blkid/blkid.tab LABEL=/1 это оказалось /dev/sda2 Это надо для дальнейшей правки /etc/fstab — разделы у нас поменяются. затем нам потребуется патч для mkinitrd качаем его (зачем он нужен желающие могут выяснить здесь) и сохраняем где-нибудь, например в /root (т.к. /root у меня расположен в корневом разделе — он будет легко доступен)

Впринципе ничто не мешает сразу пропатчить mkinitrd

cd /sbin
cp mkinitrd mkinitrd.dist
patch -p0 < /root/mkinitrd-md_d0.patch

Если пакет mkinitrd будет обновлен (например через yum update) то патчить придется заново, а если про это забыть — то при обновлении ядра новый mkinitrd создаст неправильный initrd и наш сервер попросту не загрузиться.

Соответственно правим /etc/yum.conf — добавляем строку

exclude=mkinitrd*

Основная фаза:

Выключаем сервер, добавляем второй жесткий диск, загружеамся с устновочного CD (DVD, Flash) диска в варианте Rescue (Восстановление), на вопрос примонтировать ли найднные разделы на жестком диске отвечаем «нет». Создаем raid используя mdadm:

mdadm —create —level=1 —raid-devices=2 /dev/md_d0 /dev/sda missing

Теперь необходимо изменить параметры загрузки, для чего монтируем вручную наш жесткий диск, который собственно уже является частью raid массива:

mkdir /mnt/sysimage
mount /dev/md_d0p2 /mnt/sysimage
mount -o bind /dev /mnt/sysimage/dev
mount -o bind /selinux /mnt/sysimage/selinux
mount -t proc none /mnt/sysimage/proc
mount -t sysfs none /mnt/sysimage/sys
chroot /mnt/sysimage

Замечание: «mount /dev/md_d0p2 /mnt/sysimage» т.к. у меня корень был в /dev/sda2 !!! позже при переносе на другом серваке обнаружилось, что по каким-то причинам корень [/] был в /dev/hda6, так вот — устройство /dev/md_d0p6 небыло создано при создании raid-а, т.к. железка старая и всеравно скоро будет меняться — оставили ее пока впокое.

Создаем /etc/mdadm.conf

mdadm —examine —scan > /etc/mdadm.conf

И редактируем его (/etc/mdadm.conf): необходимо заменить /dev/md0 на /dev/md_d0.

Правим /etc/fstab — меняем параметры типа LABEL=…. на
root=/dev/md_d0pN где N — соответствует /dev/sdaN на котором был этот раздел.

И создаем новый образ initrd

cd /boot
mv initrd-2.6.18-128.el5.img initrd-2.6.18-128.el5.img.bak
mkinitrd /boot/initrd-2.6.18-128.el5.img 2.6.18-128.el5

Перезагружаемся уже в нормальном режиме.

Если все прошло успешно — последний штрих, синхронизация дисков, хотя сервер уже выполняет свои функции.
Добавляем второй диск в массив

mdadm —add /dev/md_d0 /dev/sdb

Можем последить за процессом синхронизации

watch cat /proc/mdstat

Синхронизация — процесс довольно долгий и сильно тормозящий весь сервер. Что логично — винчестеры оба задействованы «на полную».

Весь процесс от остановки сервера для перезагрузки до запуска занял примерно 15 минут (не считая времени на подготовку и синхронизацию, т.к. в это время сервер хоть и тормозил, но всетаки работал).

Раздел /tmp позже был создан уже сразу на /dev/md_d0 и неиспользуемого места на массиве больше не осталось :)

При эмуляции отказа — удалили диск sda, бывший sdb обнаружился как sda и все нормально загрузилось и работало, НО когда sda (отформатированый ради чистоты эксперимента) вернули наместо — сервак не завелся!

Все оказалось банально просто — в рейде остался один диск — sda который стал sdb после возвращения sda наместо, проблема решилась просто — переткнули диски наоборот, вроде мелочь, но нервы попортить может :)

Преимущества:
1.Нет необходимости при замене жесткого диска разбивать его на разделы, и колдовать с загрузчиком.
2.Процесс восстановления состоит из одной единственной команды — добавления нового диска взамен вышедшего из строя.

Недостатки:
1. swap тоже получается на raid-е, хотя если бы делали на нормальном raid контроллере помоемому получили бы тотже эффект.
2. Надо патчить mkinitrd, вроде как патч будет включен и необходимость в этом отпадет.
3. Пока неясно как это все проделать на удаленной машине, но впринципе это возможно.

Оригинал opennet.ru/base/sys/centos_raid1.txt.html


Понравилась статья? Поделись с остальными.

Комментарии закрыты.