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

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

Любой из нас хорошенько задумывается над тем, как правильно разбить HDD при установке FreeBSD. Действительно, потом будет весьма проблематично изменить размер патриции при необходимости. Проблема заключается в том, что на жестком диске находятся, так называемые, слайсы, а уже в них инкапсулированы партиции. Это не всегда так, потому что есть еще и второй метод разметки HDD без слайсов, но в данной статье он не рассматривается. Популярные программы для работы с разделами HDD, такие как Partition Magic, Acronis могут удалить слайс, копировать/переместить его посекторно, но никак не заглянуть внутрь и изменить размер той или иной партиции.

Итак, есть система (далее, система — это установленная ОС FreeBSD, включающая в себя MBR, корневой раздел, SWAP,  ополнительные разделы /tmp, /var и т.д.) на жестком диске объемом 80 ГБ. Задача: перенести систему на другой жесткий диск объемом 250 ГБ, увеличивая размеры партиций пропорционально увеличению объема HDD. В нашем случае это 250-80=170 ГБ. Вторая часть задачи: повторять эту процедуру автоматически, с определенным интервалом (для создания резервной копии системы). В обоих случаях, нужно скопировать систему полностью, т.е. не только файлы и каталоги, а и загрузочный сектор, загрузчик для сохранения возможности загрузки системы с полученной копии.

Для выполнения задачи воспользуемся утилиткой CloneHDD. Взять ее можно здесь: http://sourceforge.net/projects/clonehdd Качаем дистрибутив последней версии и выполняем:

        tar -zxvf clonehdd-2.0.3.tar.gz -C /home/user/

Можно сделать проще — установить из портов:

        make install -C /usr/ports/sysutils/clonehdd

После установки мы видим грозное предупреждение о том, что запуская clonehdd нужно семь раз отмерить а потом уже отрезать =)) Но все не так страшно, как кажется: программа изначально рассчитана так, что данные на исходном винте никогда и ни при каких условиях не подвергнутся записи.
Это сообщение больше относится к нашему новому, чистому винту. Поэтому, если вы купили чистый винт и хотите на него переехать, то вряд ли clonehdd чем то сможет навредить.

Работа с программой предельно проста. Для осуществления задуманного нам нужно всего один раз запустить утилиту с нужными параметрами. Вот о параметрах теперь поподробнее.

-src=[device] Это исходный девайс на котором находится наша система. Чтобы узнать имя текущего винта, нужно выполнить команду «mount». Мы увидим таблицу, в первой колонке которой указаны имена примонтированных устройств. Вот, например, «/dev/ad0s1f». «/dev/» это папка, в которой находятся все устройства, «ad0» это нужное нам имя самого винта, «s1» слайс под номером 1, «f» имя партиции на слайсе. Вывод: значение этому параметру присваиваем «ad0»

-dst=[device] Это девайс назначения. Именно сюда переедет ваша система. Узнать его можно, например, командой «cat /var/run/dmesg.boot». На экране появится список сообщений ядра при загрузке. Обычно, сообщения о найденных винтах находятся в самом конце. Ни одна партиция не должна быть примонтирована с этого винта, иначе CloneHDD выдасть ошибку.

-swap=[size in MB] Размер будущего раздела SWAP.

-freespace=[Required free space on dst partition] Если клонирование производится на винт меньшего размера, на DST винте после клонирования должен остаться небольшой кусочек свободного места, для того чтобы винт небыл на 100% заполнен после клонирования. По умолчанию — это 100МБ. Этим параметром его можно изменить.

-safe [Required safe mode for `dump`] Включает режим безопасного копирования. В этом режиме сначала создается образ каждого раздела в папке .snap, а потом делается перенос. В «небезопасном» режиме, копирование производится на лету. Вся проблема в том что размер этого образа равен размеру данных на разделе. А т.к. образ будет записан на тот же раздел с которого производится копирование, на разделе долно быть минимум 50% свободного места. Вернемся к параметру -safe. Если параметр отсутствует, клонирование будет произведено в безопасном режиме если достаточно свободного места или в небезопасном режиме если этого места недостаточно. Если параметр задан, небезопасного копирования не будет, и
разделы с недостатком свободного места склонированы не будут.

-fstab=[Device name to write in fstab] После клонирования будет сгенерирован файл /etc/fstab на полученном винте. Параметр задает Имя девайса, который будет записан в этот файл. По умолчанию: девайс, заданный параметром -src.

-force [Do not ask any questions] При выполнении второй части задачи, утилита будет выполняться из cron’а и нам не нужны лишние вопросы, в ходе выполнения программы. Данный параметр отключает интерактивный режим и вопрос «Are you sure?» задаваться не будет.

Вернемся к нашей задаче. Мой исходный винт: ad0, новый винт: ad1.

        srv# clonehdd -src=ad0 -dst=ad1 -swap=1024
        Clone parameters:
        Source partition: /dev/ad0
        Dest partition: /dev/ad1
        Swap size: 1024 MB
        Safe dumping: Disabled
        Free space on DST: 100 MB
        Fstab device name: ad0
        ---
        [OK] Found devices for clone procedure
        [OK] DST partition is not in use
        ---
        Source partition
        /usr size: 64489MB, used: 10563MB
        /var size: 4958MB, used: 144MB
        / size: 1483MB, used: 82MB
        /tmp size: 1483MB, used: MB
        Total: 72415 MB, used: 10790 MB
        ---
        [OK] Device ad1 has enough free space
        Wait 10 seconds before start: 10 9 8 7 6 5 4 3 2 1
        [OK] Device /dev/ad1 made clean
        [OK] New slice created
        ---
        Destination device partitions:
        SWAP size: 1024 MB
        / size 1588 MB
        /tmp size 1588 MB
        /var size 5306 MB
        /usr size 69026 MB
        ---
        [INF] Last partition were increased for 3 blocks
        [OK] Partitions were created successfully
        ---
 
        [OK] Partition /tmp was formatted successfully
        Starting dump/restore procedure...	[OK]
 
        [OK] Partition /var was formatted successfully
        Starting dump/restore procedure...	[OK]
 
        [OK] Partition /usr was formatted successfully
        Starting dump/restore procedure...	[OK]
 
        [OK] Partition / was formatted successfully
        Starting dump/restore procedure...	[OK]
 
        [OK] file /etc/fstab generated successfully

Видим сообщения об успешном клонировании. Теперь сделаем выполнение задачи по расписанию: выполнять каждый день в 2 часа ночи клонирование рабочего винта на запасной. Добавляем в файл /etc/crontab строку

        0 2 * * * root clonehdd -src=ad0 -dst=ad1 -swap=1024 -force >/dev/null

Обратите внимание, что >/dev/null убивает не все сообщения. Только обычные сообщения будут опущены. Все сообщения об ошибках отсылаются на выход STDERR, не попадают на /dev/null и будут отправлены cron’ом по
почте системному администратору.

By sysadmin on 08.04.2009 | FreeBSD
Метки: ,