dd – клонирование диска

Диск на сервере начал сыпать ошибками и поэтому возникла необходимость переноса системы на новый диск. Пробую на виртуальной машине. Выключаем сервер и подключаем новый диск.

Смотрим диски: ada0 – старый ada1 – новый:

# ls /dev/ad*
/dev/ada0 /dev/ada0p1 /dev/ada0p2 /dev/ada0p3 /dev/ada1
# gpart show ada0
=>    40  33554352  ada0  GPT (16G)
      40      1024  1     freebsd-boot (512K)
    1064  31456256  2     freebsd-ufs (15G)
31457320   1677312  3     freebsd-swap (819M)
33134632    419760        - free - (205M)

Перенос системы решил делать утилитой dd

# dd if=/dev/ada0 of=/dev/ada1
33554432+0 records in
33554432+0 records out
17179869184 bytes transferred in 26121.526733 secs (657690 bytes/sec)

Если в процессе утилита начнет ругаться можно попробывать опцию

conv=noerror,sync [bs=размер_блока]
conv=noerror – продолжать копирование невзирая на interrupt

HDD с битыми секторами можно копировать используя dd, диск должен быть читабельным (с ошибками, но читабельным).

Ооочень долго переносило 16G данных. После окончания переноса правим fstab, нужно заменить ada0 на ada1 и пререгрузиться. Проще конечно просто вынуть старый и на его место подключить новый, но так как я делал это удаленно приходиться временно переназначить диски, а потом на месте уже заменив, вернуть записи обратно:

# ee /etc/fstab

# Device      Mountpoint    FStype  Options  Dump   Pass#
/dev/ada1p2   /             ufs     rw       1      1
/dev/ada1p3   none          swap    sw       0      0
# shutdown -r now

Если после загрузки gpart show покажет предупреждение [CORRUPT], его можно устранить

# gpart recover ada1

где ada1 – текущий загрузочный диск.