Клонирование системы Clonehdd, dd, Pax | FreeBSD
=========
=CloneHdd=
=========
Понадобилось склонировать диск – старая скази начала сыпаться.
Ставим clonehdd из портов. Смотрим диски
#cd /dev
#ls
#df -h
Выясняем на каком диске стоит система, какой диск целевой. Формат такой – ad0s1a (ad0 – первый диск, s1 – первый слайс, a – раздел). Нам достаточно знать что ad0 – это в моем случае первый ide диск, источник с которого будем копировать – amrd0 (рейд со сказей).
#clonehdd -src=amrd0 -dst=ad0 -fstab -swap=2048
(-src и -dst – диск с которого клонируем и диск куда клонируем, -swap – размер раздела свопа, -fstab – записать файл fstab (c перечнем разделов старого диска, его потом надо будет поправить).
По поводу fstab можно указать сразу имя нового харда:
-fstab=ad0
Предупредит и склонирует. Подводные камни – не стоит просто копировать и править fstab со старого диска, говорят что clonehdd может поменять порядок разделов.
После клонирования может понадобиться запустить sysinstall (или fstab) и сделать новый диск загрузочным. Перед этим надо сделать:
#sysctl kern.geom.debugflags=16
Если поймали ошибку:
umount: /mnt/clone: not a file system root directory
Удаляем директорию /mnt/clone.
========
=dd=====
========
Более простым вариантом может быть просто побитовое копирование диска с помощью dd (есть во всех дистрибутивах, работает быстро (если увеличить буфер).
#dd if=/dev/amrd0 of=/dev/ad0 conv=noerror,sync bs=32k
if=/dev/amrd0 – исходный диск
of=/dev/ad0 – целевой диск
noerror — продолжать после ошибок чтения
sync — дополнять каждый входной блок до размера ibs путем добавления нулевых байт
bs – размер блока (для чтения, записи). Чтобы ускорить работу команды можно увеличить. Но это для случаев когда у нас исходный диск с которого мы переносим систему не сбойный. Если есть сбойные сектора – то лучше уменьшить (в ущерб скорости), но потерянных данных будет меньше (если попадется сбойный блок – то потеряем данных равным значению bs. Диск 62Гб с bs=32k у меня копировался минут сорок.
Для просмотра статуса работы – заходим во вторую консоль н этой же машине и вводим:
#killall -SIGINFO dd
На первой консоли увидим сколько байт скопировано, скорость и время.
После копирования загружаемся со старого диска или загрузочного, запускаем sysinstall идем в Configure, Label выбираем новый диск, первый раздел ad0s1a в нашем случае, и указываем точку монтирования (например каталог /mnt). Затем W изменений. Команда прочекает диск и подмонтирует. На подмонтированном ad0s1a (это рут нового диска) правим fstab. Все можно пробовать грузиться с нового диска. Естественно если перебрасываем железки по контроллерам (SATA0, 1 и т.д.) – то и пути изменяем (ad6, ad7 и т.д).
==========
=PAX======
==========
Для полноты картины упомянем PAX который есть в стандартной поставке, и говорят очень быстрый. Проблема там только с тем что надо руками поготовить всю структуру разделов до применения pax.
Через sysinstall на новом диске создаем слайс и разделы (надо предварительно записать структуру старого диска и создать аналогичную). Рут / должен быть первым разделом (ad0s1a например), слайс – загружаемым. Создаем на старом диске точки монтирования. Монтируем созданные разделы. И запускаем перенос файлов
#cd / && pax -p eme -X -rw . /mnt/root
#cd /var && pax -p eme -X -rw . /mnt/var
#cd /usr && pax -p eme -X -rw . /mnt/usr
Поскольку там есть сложности с тем что надо точно создать структуру разделов совпадающую со старым диском, и рут у вас не всегда получится сделать вида ad0s1a (бить диск надо в single mode или с диска загружаемого), я не стал использовать pax и остановился на dd.
А по сети clonehdd умеет? Ну, как-то так:
# clonehdd -src=amrd0 -fstab -swap=2048 | ssh -l user host:port ‘-dst=ad0′