Стратегия перехода была такая:
- Исключаем из настроенного RAID-массива один из дисков, так что у нас появляется один свободный диск и один деградировавший RAID-массив,
- Создаём деградировавший RAID-массив на освободившемся диске, выполняем разбивку, переносим на него данные,
- Выполняем загрузку системы с флешки, синхронизируем накопившиеся изменения, настраиваем загрузку системы с нового диска,
- Грузим систему с нового диска, удаляем старый RAID-массив, разбиваем его аналогично новому, включаем в новый RAID-массив в качестве второй половинки.
Приступим.
1. Извлечение одного из дисков из RAID-массива
Посмотрим на разделы одного из двух дисков:
# fdisk -l /dev/sda Disk /dev/sda: 931,5 GiB, 1000204886016 bytes, 1953525168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x9a7a0fdb Device Boot Start End Sectors Size Id Type /dev/sda1 2048 1977979 1975932 964,8M fd Linux raid autodetect /dev/sda2 1978368 41064512 39086145 18,7G fd Linux raid autodetect /dev/sda3 * 41066496 62208035 21141540 10,1G 7 HPFS/NTFS/exFAT /dev/sda4 62210048 1953525167 1891315120 901,9G 5 Extended /dev/sda5 62212096 140352192 78140097 37,3G 7 HPFS/NTFS/exFAT /dev/sda6 140355584 1953525167 1813169584 864,6G fd Linux raid autodetectРазделы sda1, sda2 и sda6 - это половинки RAID-массивов md1, md2, md6. На md1 расположен раздел подкачки, на md2 - корневой раздел Linux, на md6 - раздел home.
Разделы sda3 и sda5 являются разделами NTFS, на первый из которых когда-то был установлен Windows, а второй использовался для хранения данных для Windows. На разделах sdb3 и sdb5 были расположены посекторные резервные копии этих разделов.
Выведем из RAID-массивов диск /dev/sda:
# mdadm --manage /dev/md1 --fail /dev/sda1 # mdadm --manage /dev/md2 --fail /dev/sda2 # mdadm --manage /dev/md6 --fail /dev/sda62. Новая разбивка диска
Я решил воспользоваться консервативной схемой разбивки, когда GRUB будет находиться вне логических томов LVM, на отдельном разделе. Мне показалось, что так будет проще его починить, если что-то пойдёт не так. Новая схема разделов стала следующей:
# fdisk -l /dev/sda Disk /dev/sda: 931,5 GiB, 1000204886016 bytes, 1953525168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x382c6e6a Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 411647 409600 200M fd Linux raid autodetect /dev/sda2 411648 1953525167 1953113520 931,3G fd Linux raid autodetectНа созданных разделах я создал деградировавшие массивы RAID1, в которых пока что не хватает второй половинки:
# mdadm --create /dev/md11 -l1 -n2 missing /dev/sda1 # mdadm --create /dev/md12 -l1 -n2 missing /dev/sda2Создадим файловую систему для будущего раздела /boot, на котором будет находиться загрузчик GRUB:
# mkfs.ext4 /dev/md11Теперь установим менеджер томов, если он ещё не был установлен:
# apt-get install lvm2Создадим физический том на разделе:
# pvcreate /dev/md12Создадим группу томов stupin, в котором будет один физический том /dev/md12:
# vgcreate stupin /dev/md12Создадим логический том размером 1 гигабайт для раздела подкачки:
# lvcreate -n dom0-swap -L 1G stupinИ разметим его как раздел подкачки:
# mkswap /dev/stupin/dom0-swapСоздадим логический том размером в 20 гигабайт для корневого раздела системы:
# lvcreate -n dom0-root -L 20G stupinИ разметим на нём файловую систему ext4:
# mkfs.ext4 /dev/stupin/dom0-rootСоздадим логический том для раздела /home и разметим на нём файловую систему ext4:
# lvcreate -n dom0-home -L 800G stupin # mkfs.ext4 /dev/stupin/dom0-home3. Копирование разделов ext4
Для копирования ext4 я решил воспользоваться rsync. Создадим точки монтирования будущих разделов /mnt, /mnt/boot, /mnt/home:
# mkdir /mnt # mount /dev/stupin/dom0-root /mnt/ # mkdir /mnt/boot # mount /dev/md11 /mnt/boot/ # mkdir /mnt/home # mount /dev/stupin/dom0-home /mnt/home/И выполним первоначальное копирование данных на новые разделы:
# rsync -xavv --delete /home/ /mnt/home/ # rsync -xavv --delete / /mnt/Этот этап копирования имеет целью уменьшить количество файлов, которые нужно будет скопировать во время загрузки системы с флешки. После загрузки системы с флешки копирование будет повторено с тем чтобы скопировать изменившиеся файлы.
4. Копирование NTFS-разделов
Для копирования NTFS-разделов я решил воспользоваться утилитой dd, хотя мог бы воспользоваться и утилитой ntfsclone. Здесь я изначально копировал диски остановленной системы, поскольку она бывает мне нужна лишь иногда и обычно выключена.
Создадим логические тома LVM с размером точно равным количеству секторов на исходных разделах:
# lvcreate -L 21141540S -n winxp-c-disk stupin # lvcreate -L 78140097S -n winxp-d-disk stupinИ скопируем на них данные посекторно:
# dd if=/dev/sdb3 of=/dev/stupin/winxp-c-disk # dd if=/dev/sdb5 of=/dev/stupin/winxp-d-disk5. Загрузка с флешки
Этот момент - самый сложный и ответственный. По идее, если у вас ничего не получится, вы можете загрузить систему со старого диска, переразбить диск, который планировали использовать под LVM, и включить его обратно в зеркало. На этом неудачный опыт будет завершён и система вернётся в то состояние, в котором она находилась изначально.
Я использовал установочную флешку с Debian Jessie. Загрузившись с флешки нужно выбрать режим восстановления (rescue mode), через её меню определить RAID-массивы и логические тома, смонтировать корневой раздел и раздел /boot и перейти в командную строку в среду, где корнем является корневой раздел восстанавливаемой системы.
Попав в оболочку, для начала домонтируем будущий раздел /home:
# mount /dev/stupin/dom0-home /homeТеперь смонтируем разделы исходной системы для того, чтобы синхронизировать накопившиеся на ней изменения в будущую систему:
# mount /dev/sdb2 /mnt # mount /dev/sdb6 /mnt/homeСкопируем изменения:
# rsync -xavv --delete /mnt/home/ /home/ # rsync -xavv --delete /mnt /В прошлой статье я не останавливался подробно на моменте правильного переноса данных, поскольку считал, что статьёй воспользуются хорошо подготовленные пользователи, которые проделают ровно то же самое - синхронизируют изменения, загрузившись с флешки. В этот раз загрузка с флешки - необходимый этап, поэтому я решил чуть подробнее описать и момент переноса данных.
Теперь нужно сделать так, чтобы система загрузилась с нового диска. Сначала посмотрим идентификаторы UUID у имеющихся дисков и разделов:
# blkidВпишем в файл /etc/fstab раздел подкачки, корневой раздел, разделы /boot и /home, указав их идентификаторы из вывода команды blkid:
# vim /etc/fstabОбновим список RAID-массивов имеющихся в системе в образе initramfs:
# mdadm --examine --scan > /etc/mdadm/mdadm.conf # update-initramfs -k all -uУстановим GRUB на новый диск и обновим его конфигурацию:
# grub-install /dev/sda # update-grub6. Загрузка новой системы
После этого можно выйти из оболочки и выбрать перезагрузку. В BIOS нужно выбрать загрузку с нового диска, а старый можно вообще для наглядности отсоединить, чтобы точно быть уверенным, что загрузка произошла с нового диска.
Если в процессе загрузки не появилось меню GRUB, то нужно проверить, что GRUB установлен, а его конфигурация обновлена. Для этого нужно снова загрузиться с флешки в режиме восстановления и убедиться, что grub-install сработал.
Если система не загрузилась и остановилась на этапе выполнения меню GRUB, то возможно дело в том, что GRUB не нашёл образ ядра или образ initramfs. В таком случае в загрузочной флешке нужно убедиться, что отработало обновление файла конфигурации GRUB при помощи команды grub-update.
Если система не загрузилась и перешла в оболочку initramfs, то скорее всего ядро не нашло корневой раздел. Нужно проверить, что корневой раздел определился в системе и имеется в каталоге /dev/stupin/ (stupin - имя логической группы) или в /dev/mapper/. Если он на месте, тогда нужно проверить, что он правильно указан в файле /etc/fstab.
В образе initramfs могут пригодиться следующие команды.
Поиск имеющихся RAID-массивов и обновление конфигурации:
# mdadm --examine --scan > /etc/mdadm/mdadm.confСборка RAID-массивов вручную, после которой массивы должны появиться в каталогах /dev и /dev/md:
# mdadm --assemble /dev/md11 # mdadm --assemble /dev/md12Определение доступных групп томов и логических томов LVM:
# vgchange -ayДля редактирования файла /etc/fstab в образе initramfs имеется редактор vi.
После того, как вы убедились, что все RAID-массивы и логические тома определились системой, а в /etc/fstab указаны правильные разделы для монтирования, можно попробовать выйти из оболочки initramfs и продолжить загрузку системы.
В загрузившейся системе нужно повторить проделанные манипуляции, а затем обновить образ initramfs и файл конфигурации GRUB. После этого можно попробовать перезагрузить систему и проверить, грузится ли она автоматически, без ручного вмешательства. Когда система будет грузиться с нового раздела автоматически, можно подсоединить отсоединённый диск и продолжить. Если же вы не смогли добиться устойчивой автоматической загрузки системы, можно переключиться на загрузку со старого диска и вернуть всё обратно.
7. Добавление второй половины в новый RAID-массив
Теперь скопируем разбиение с нового диска на старый:
# sfdisk --dump /dev/sda | sfdisk /dev/sdbИ добавим разделы старого диска в зеркало:
# mdadm --manage /dev/md11 --add /dev/sdb1 # mdadm --manage /dev/md12 --add /dev/sdb2Не забудьте поставить GRUB на второй диск:
# grub-install /dev/sdb8. Переименование RAID-массивов
Есть ещё один не обязательный момент. Мне хотелось переименовать RAID-массивы так, чтобы они назывались md1 и md2, а не md11 и md12. Для этого я снова загрузился с флешки, разобрал RAID-массивы и собрал их уже под новыми именами:
# mdadm --stop /dev/md11 # mdadm --stop /dev/md12 # mdadm --assemble --update=name --name=1 /dev/md1 /dev/sda1 /dev/sdb1 # mdadm --assemble --update=name --name=2 /dev/md2 /dev/sda2 /dev/sdb2Осталось обновить конфигурацию mdadm в initramfs:
# mdadm --examine --scan > /etc/mdadm/mdadm.conf # update-initramfs -k all -u
Комментариев нет:
Отправить комментарий