Перенос работающей Linux системы на программный RAID1

Данная статья детально описывает, как перенести Linux систему на RAID1 без переустановки, добавив схожий по характеристикам жесткий диск к тому, на котором установлена система. Все операции будут проводиться на системе с двумя IDE-HDD, операционная система CentOS 5.1.

[root@srv2 ~]# cat /etc/redhat-release

CentOS release 5 (Final)
[root@srv2 ~]# uname -r
2.6.18-53.el5

Просмотрим таблицу разделов:

[root@srv2 ~]# fdisk -l

Диск /dev/hda: 80.0 ГБ, 80026361856 байт
255 heads, 63 sectors/track, 9729 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр Начало Конец Блоки Id Система
/dev/hda1 * 1 9663 77618016 83 Linux
/dev/hda2 9664 9728 522112+ 82 Linux своп / Solaris

Диск /dev/hdb: 80.0 ГБ, 80026361856 байт
255 heads, 63 sectors/track, 9729 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр Начало Конец Блоки Id Система 

По полученным данным видно, что установлены два идентичных жестких диска объемом 80 Гб. На первом диске создано 2 раздела: корневая файловая система и SWAP-раздел. Второй жесткий диск абсолютно пуст. Диски определены системой как hda и hdb.

Первым делом нам необходимо создать таблицу разделов на втором диске, идентичной первому.

[root@srv2 ~]# sfdisk -d /dev/hda | sfdisk /dev/hdb

Опция -d делает дамп таблицы разделов.

Если Вы получите сообщение об ошибке используйте опцию —force.

Посмотрим теперь, что представляют диски, установленные в системе:

[root@srv2 ~]# fdisk -l

Диск /dev/hda: 80.0 ГБ, 80026361856 байт
255 heads, 63 sectors/track, 9729 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр Начало Конец Блоки Id Система
/dev/hda1 * 1 9663 77618016 83 Linux
/dev/hda2 9664 9728 522112+ 82 Linux своп / Solaris

Диск /dev/hdb: 80.0 ГБ, 80026361856 байт
255 heads, 63 sectors/track, 9729 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр Начало Конец Блоки Id Система 
/dev/hdb1 * 1 9663 77618016 83 Linux
/dev/hdb2 9664 9728 522112+ 82 Linux своп / Solaris

Видно, что таблица разделов на втором диске полностью соответствует таблице разделов на первом диске.

Теперь изменим тип таблицы разделов на втором диске на Linux raid autodetect:

[root@srv1 ~]# fdisk /dev/hdb

На запрос введем t. Пункт t — это изменение id системы раздела.

Выбираем номер раздела (напомню в нашем случае их 2).

Вводим шестнадцатеричный id код. Т.к. нам нужно Linux raid autodetect, то выбираем fd.

То же самое повторяем и для второго раздела:

Теперь записываем таблицу разделов на диск и выходим, выбрав опцию w.

Теперь загоним разделы нашего второго диска в массивы. Статус RAID намеренно выбран degraded.

[root@srv1 ~]# mdadm —create /dev/md0 —level=1 —raid-disks=2 missing /dev/hdb1

Если все успешно, то получаем сообщение:

mdadm: array /dev/md0 started.

При попытке повторить то же самое для второго раздела:

[root@srv2 ~]# mdadm —create /dev/md1 —level=1 —raid-disks=2 missing /dev/hdb2

Получаем сообщение об ошибке:

mdadm: error opening /dev/md1: No such file or directory

Мы воспользуемся опцией —auto:

[root@srv2 ~]# mdadm —create /dev/md1 —level=1 —raid-disks=2 missing /dev/hdb2 —auto=yes

И получим сообщение, что операция прошла успешно:

mdadm: array /dev/md1 started.

Теперь выполним команду cat /proc/mdstat и убедимся, что наш деградировавший рейд работает:

[root@srv2 ~]# cat /proc/mdstat

Personalities : [raid1]

md1 : active raid1 hdb2[1]

522048 blocks [2/1] [_U]

md0 : active raid1 hdb1[1]

77617920 blocks [2/1] [_U]

unused devices:

[root@srv2 ~]#

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

Теперь создадим файловые системы в наших массивах: ext3 в первом массиве и swap по втором:

[root@srv2 ~]# mkfs.ext3 /dev/md0

[root@srv2 ~]# mkswap /dev/md1

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

[root@srv2 ~]# mkdir /mnt/md0

[root@srv2 ~]# mount /dev/md0 /mnt/md0/

Создаем файл конфигурации mdadm — /etc/mdadm.conf:

[root@srv2 ~]# nano -w /etc/mdadm.conf

И вносим в него такую строку: DEVICE partitions

Теперь заносим информацию о RAID массивах в файл конфигурации mdadm:

[root@srv2 ~]# mdadm —detail —scan >> /etc/mdadm.conf

Теперь правим файл /etc/fstab:

[root@srv2 ~]# nano -w /etc/fstab

И приводим в соответствие с подчеркнутыми значениями:

Теперь необходимо отредактировать конфигурационный файл загрузчика GRUB:

[root@srv2 ~]# nano -w /boot/grub/grub.conf

Делаем две копии конфигурации текущего раздела.

Значения которые подлежат изменению подчеркнуты красным.

Создаем новый образ initrd командой:

[root@srv2 ~]# mkinitrd /boot/initrd-`uname -r`-raid1.img `uname -r`

Теперь переносим данные нашей системы на массив:

[root@srv1 ~]# cp -dpRx / /mnt/md0/

Теперь настроим загрузчик на второй диск, введя команду grub:

[root@srv2 ~]# grub

Работать будем с меню GRUB:

grub> root (hd0,0)

grub> setup (hd0)

grub> root (hd1,0)

grub> setup (hd1)

grub> quit

Теперь перезагружаемся и выбираем для загрузки второй ядро:

Теперь изменим тип таблицы разделов на перовом диске на Linux raid autodetect:

[root@raid1 ~]# fdisk /dev/hda

На запрос введем t. Пункт t — это изменение id системы раздела.

Выбираем номер раздела (напомню в нашем случае их 2).

Вводим шестнадцатеричный id код. Т.к. нам нужно Linux raid autodetect, то выбираем fd.

То же самое повторяем и для второго раздела:

Теперь записываем таблицу разделов на диск и выходим, выбрав опцию w.

Теперь добавляем первый раздел на первом диске в наш первый массив (извините за тавтологию):

[root@raid1 ~]# mdadm —add /dev/md0 /dev/hda1

И второй:

[root@raid1 ~]# mdadm —add /dev/md1 /dev/hda2

Сейчас начался ребилдинг массива. Процесс достаточно длительный и зависит от емкости диска. За процессом можно наблюдать:

[root@raid1 ~]# watch cat /proc/mdstat

Теперь выполним команду cat /proc/mdstat и убедимся, что наш первый диск добавлен в массив:

Следующим шагом нам необходимо изменить файл конфигурации mdadm:

[root@raid1 ~]# nano -w /etc/mdadm.conf

Нам необходимо либо удалить, либо закомментировать строки с параметрами дисков:

Сохраняем изменения и выходим.

Теперь соберем новые данные о массивах:

[root@raid1 ~]# mdadm —detail —scan >> /etc/mdadm.conf

И пересоберем образ ядра. Обратите внимание на опцию -f, она позволит перезаписать существующие данные.

[root@raid1 ~]# mkinitrd -f /boot/initrd-`uname -r`-raid1.img `uname -r`

Перезагружаемся и выбираем первое ядро при загрузке.

Если система загрузилась, то продолжаем работать

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *