Перенос системного раздела Linux на новый диск с помощью встроенного метода (команда dd)

Обновлено и опубликовано Опубликовано:

В данной инструкции я попробую рассмотреть различные сценарии, с которыми мы можем столкнуться при клонировании диска в Linux с системным разделом. В итоге мы должны будем запустить нашу систему с другого диска.

Данная процедура потенциально опасна для данных. Любое неверное действие или нюанс, связанный с уникальной настройкой, могут привести к потере данных. Обязательно, выполняем резервное копирование всех важных файлов. Также я рекомендую потренироваться в тестовой среде.

В зависимости от системы и типа разделов, действия могут отличаться, а могут появляться особенности, которые сделают работу сложнее. Клонирование диска может быть выполнено в несколько действий, а может превратиться в кошмар. Запасаемся временем и терпением.

Процесс будет выполнен в несколько шагов:

1. Клонирование диска

Первым делом мы создаем полную копию нашего диска. Это единственный этап, который может быть выполнен без нюансов на любой из систем, так как он выполняется с помощью утилиты dd.

Смотрим состояние дисков и разделов на текущий момент:

Определяемся, с какого диска на какой мы будем выполнять копию. Это может прозвучать банально, но тут важно не перепутать источник диска, с которого клонируется информация и целевой носитель.

Выполняем команду:

dd if=/dev/sdx1 of=/dev/sdy1 bs=64K conv=noerror,sync

* Команда выполняет блочное копирование и запускается со следующими параметрами:

  • if — источник данных.
  • of — куда копировать данные.
  • bs — объем блока, который будет читаться и копироваться за раз.
  • conv — дополнительные опции. В данном примере noerror — продолжать операцию в случае ошибки чтения данных; sync — копировать все, в том числе и нулевые данные.

* Таким образом, мы клонируем диск или раздел с /dev/sdx1 в /dev/sdy1 (не путаем источник и назначение).

Команда будет выполняться некоторое время. После ее завершения можно снова посмотреть состояние дисков и разделов:

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

Следующим шагом настроим загрузчик.

2. Загрузчик grub2

Для большинства современных систем характерно использование grub2. Его мы и будем рассматривать. Но если в вашем случае используется сервер с grub первой версии, то мы можем обратиться к инструкции How to Migrate the Root Filesystem to a New Disk.

Открываем файл:

vi /etc/default/grub

Мы можем увидеть разные варианты строки, указывающей на загрузку системы.

а) В некоторых случаях это будет универсальная строка, которую не нужно менять, например:

GRUB_CMDLINE_LINUX=»crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet»

* в данной строке мы видим, что загрузчик будет искать том LVM centos/root. Так как после клонирования он не поменяется, то нам ничего не нужно редактировать.

б) В некоторых случаях строка может быть пустой:

GRUB_CMDLINE_LINUX=»»

* в данном примере также от нас не потребуется никаких действий.

в) В некоторых случаях указатель может вести на конкретные диски:

GRUB_CMDLINE_LINUX=»root=/dev/disk/by-id/<partition/disk name> resume=/dev/disk/by-id/<partition/disk name> splash=silent quiet showopts»

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

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

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

3. Файл fstab

На следующем шаге мы проверяем настройки монтирования корневой директории и раздела boot при загрузке системы. Они задаются в файле fstab.

Есть два надежных способа указать диск при монтировании — использовать его идентификатор или точку монтирования тома LVM. Рассмотрим оба варианта.

LVM

Данный способ можно использовать частично, так как раздел boot не может использовать LVM, поэтому данное монтирование будет применяться только к корневому разделу.

Если мы используем LVM, то все, что нам нужно сделать, это открыть файл fstab и проверить, что в нем, на самом деле, используется LVM при монтировании корневого раздела:

vi /etc/fstab

Мы можем увидеть что-то на подобие:


/dev/mapper/centos-root /                       xfs     defaults        0 0

Понять, используется ли LVM можно командой:

Мы должны увидеть пометку lvm:


    centos-root 253:0    0 13.4G  0 lvm  /

Как было сказано выше, в случае использования LVM, нам не придется редактировать fstab, так как точка монтирования не поменяется.

Использование идентификатора

Для получения списка дисков с их идентификаторами, вводим команду:

Мы получим что-то на подобие:

/dev/sdb1: UUID=»45053cf4-cb27-40b8-9b63-7f43fb123807″ TYPE=»xfs» 
/dev/sdb2: UUID=»Rzg9IW-5zmy-wsdv-mfIJ-HMRV-9Zup-XCcxPi» TYPE=»LVM2_member» 
/dev/sda1: UUID=»45053cf4-cb27-40b8-9b63-7f43fb123807″ TYPE=»xfs» 
/dev/sda2: UUID=»Rzg9IW-5zmy-wsdv-mfIJ-HMRV-9Zup-XCcxPi» TYPE=»LVM2_member» 
/dev/mapper/centos-root: UUID=»97ea6561-8e69-4a9d-b29b-5d6c68a5df64″ TYPE=»xfs» 
/dev/mapper/centos-swap: UUID=»db800e72-c138-4050-9949-cf03b779b709″ TYPE=»swap»

* как видим, идентификаторы дисков совпадают, так как команды dd клонирует информацию полностью. Также обратите внимание, что разделы LVM также имеют свои идентификаторы. Это очень важный момент, так как точка монтирования в случае использования LVM должна указывать на него.

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

Находим раздел, который соответствует корневому и смотрим его идентификатор. После открываем файл:

vi /etc/fstab

Наши записи могут быть, примерно, такими:

UUID=Rzg9IW-5zmy-wsdv-mfIJ-HMRV-9Zup-XCcxPi /                   xfs     defaults        0 0
UUID=45053cf4-cb27-40b8-9b63-7f43fb123807 /boot                   xfs     defaults        0 0

Но также никто нам не запретит использовать гибридный вариант, например:

/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=45053cf4-cb27-40b8-9b63-7f43fb123807 /boot                   xfs     defaults        0 0

* в данном варианте мы используем том LVM для корня и идентификатор для boot.

Буква (цифра) раздела

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

vi /etc/fstab

/dev/sda2    /                       xfs     defaults        0 0
/dev/sda1    /boot                       xfs     defaults        0 0

Данный метод ненадежный, так как при извлечении дисков или их переключении в другие порты, имена разделов могут поменяться.

4. Перезагрузка

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

а) Если необходимо извлечь старый диск, то выключаем компьютер, отключаем диск, но не убираем его далеко, так как если система не загрузится, необходимо будет его вернуть, подключив в тот же порт материнской платы.

б) Если мы сохранили оба диска, нам нужно убедиться в настройках БИОС/UEFI, что загрузка выполняется с нового диска.

Если мы настроили систему правильно, то она загрузится с нового диска.