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