Перевод работающей системы Debian на RAID 1

1. Задача

Есть система, установленная на один диск. В систему установлен пустой диск такого же размера. Необходимо настроить зеркалирование разделов диска при помощи подсистемы md. В моём случае разбивка диска была следующей: /dev/sda2 - раздел подкачки, /dev/sda3 - корневой раздел, /dev/sda4 - раздел /home/.

2. Клонирование имеющейся системы на деградированный RAID 1

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

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

Теперь выставим у каждого раздела, который будет зеркалироваться тип Linux raid autodetect (в моём случае это разделы 3 и 4) и запишем изменения на диск:

# fdisk /dev/sdb
Command (m for help): t
Partition number (2-4): 3
Hex code (type L to list codes): fd

Command (m for help): t
Partition number (2-4): 4
Hex code (type L to list codes): fd

Command (m for help): w

На новом диске создадим деградированные разделы RAID 1, то есть разделы, в которых зеркальная пара отсутствует:

# mdadm --create /dev/md3 -l1 -n2 missing /dev/sdb3
# mdadm --create /dev/md4 -l1 -n2 missing /dev/sdb4

Можно заглянуть в файл /proc/mdstat, чтобы увидеть, что разделы RAID 1 созданы и в них отсутствует зеркальная пара.

Теперь нужно разметить разделы дисков (раздел для подкачки объединять в RAID 1 я не стану, а буду использовать его как дополнение к первому):

# mkswap /dev/sdb2
# mkfs.ext4 /dev/md3
# mkfs.ext4 /dev/md4

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

# mkdir /mnt/root
# mkdir /mnt/home
# mount /dev/md3 /mnt/root
# mount /dev/md4 /mnt/home

Теперь нужно скопировать содержимое разделов с работающей системы. Для этого я воспользуюсь rsync, запущенным от пользователя root, что позволит скопировать права доступа и владельцев всех файлов и каталогов:

# rsync -avvx --delete / /mnt/root/
# rsync -avvx --delete /home/ /mnt/home/

Теперь отредактируем файл /etc/fstab на копии корневого раздела. Для этого сначала узнаем идентификаторы раздела подкачки, корневого раздела и домашнего раздела, а затем пропишем их в файл /mnt/root/etc/fstab:

# blkid /dev/sdb2
# blkid /dev/md3
# blkid /dev/md4
# vi /mnt/root/etc/fstab

Обновим таблицу разделов md на новом диске:

# mdadm --detail --scan > /mnt/root/etc/mdadm/mdadm.conf

Теперь пришло время установить на новый диск GRUB и обновить загрузочный образ initrd, чтобы в нём были модули ядра, необходимые для работы с разделами RAID. Для этого сначала смонтируем в новый корневой раздел необходимые виртуальные файловые системы:

# mount --bind /dev /mnt/root/dev
# mount --bind /sys /mnt/root/sys
# mount --bind /proc /mnt/root/proc

Сделаем корнем корневую файловую систему нового диска:

# chroot /mnt/root

Смотрим идентификаторы дисков:

# ls /dev/disk/by-id/

Прописываем идентификатор нового диска в файл /boot/grub/device.map:

# vim /boot/grub/device.map

И устанавливаем GRUB (обратите внимание на то, что загрузочный сектор записывается на сам новый диск, а установка осуществляется в корневой раздел RAID 1):

# grub-install /dev/sdb
# update-grub

Обновим загрузочный образ initrd. Для этого сначала в файл /etc/initramfs-tools/modules дописываем модуль raid1, а затем обновляем загрузочные образы:

# vi /etc/initramfs-tools/modules
# update-initramfs -u -k all

Теперь можно попробовать перезагрузить систему, выбрав в BIOS загрузку со нового диска, на котором размечены разделы RAID 1.

3. Добавление исходного диска во вновь созданный RAID 1

Если система загрузилась, осталось только изменить типы разделов на старом диске и включить его разделы массивы RAID 1:

# fdisk /dev/sda
Command (m for help): t
Partition number (2-4): 3
Hex code (type L to list codes): fd

Command (m for help): t
Partition number (2-4): 4
Hex code (type L to list codes): fd

Command (m for help): w
# mdadm --add /dev/md3 -a /dev/sda3
# mdadm --add /dev/md4 -a /dev/sda4

В файле /proc/mdstat можно наблюдать за процессом синхронизации разделов-половинок RAID 1.

Теперь переустановим GRUB на первом диске, чтобы в случае отказа второго, систему можно было загрузить с первого диска:

# grub-install /dev/sda

Не забудьте проверить, что с первого диска тоже можно загрузить систему, перезагрузив её снова и выбрав в BIOS загрузку с первого диска.

4. Использованные материалы:

  1. Перенос работающей системы на программный RAID 1
  2. Установка raid1 на работающую систему Debian Squeeze - осторожно, сиське :)

Написать автору