В данной инструкции описывается процесс переноса системы FreeBSD с одного жёсткого диска на другой. Этот способ поможет сэкономить время на настройку системы, учётных записей, установленного ПО и серверных служб и т.д.
Данный способ будет полезен в тех случаях, когда размера старого жёсткого диска не хватает, либо он по каким-нибудь причинам становится непригодным для дальнейшего использования.
Будьте предельно осторожны. Данный метод может привести к безвозвратной потере данных.
Задача следующая:
Имеется сервер, работающий на FreeBSD 13.0, с жёстким диском 16 ГБ и таблицей разделов GPT с тремя разделами: загрузочный ada0p1 — freebsd-boot, корневой ada0p2 — freebsd-ufs и swap-раздел ada0p3 — freebsd-swap. Необходимо полностью перенести всю информацию на другой жёсткий диск 40 ГБ, и подключить его вместо старого, а также увеличить размер корневого раздела.
Клонирование жёсткого диска
В первую очередь необходимо проверить, существует ли новый жёсткий диск в системе. Новый жёсткий диск в системе появится как ada1 — без разделов. Это можно посмотреть командой
# ls /dev
Если в списке появился ada1 — идём дальше.
Запускаем клонирование утилитой dd
# dd if=/dev/ada0 of=/dev/ada1
Придётся некоторое время подождать, так как процесс не быстрый.
По окончанию в консоли должно отобразиться такое:
После этого выключаем машину
# shutdown -p now
вставляем новый жёсткий диск на место старого и запускаем машину снова.
Сервер должен загрузиться с нового жёсткого диска.
Проверяем структуру разделов с помощью утилиты gpart
# gpart show ada0
В свойствах жёсткого диска в квадратных скобках можем увидеть предупреждение: [CORRUPT]. Исправим это командой
# gpart recover ada0
и снова проверяем структуру разделов
# gpart show ada0
Теперь увидим, что предупреждение исчезло. Значит всё окей.
Изменение размера жёсткого диска
Посмотрим информацию о разделе подкачки
# swapinfo
и увидим, что раздел подкачки у нас — это ada0p3
Отключаем его
# swapoff /dev/ada0p3
удаляем
# gpart delete -i 3 ada0
и смотрим структуру разделов
# gpart show ada0
На всякий случай отключим функцию безопасности GEOM
# sysctl kern.geom.debugflags=16
и запустим команду изменения размера корневого раздела на 39 ГБ
# gpart resize -i 2 -s 39G -a 4k ada0
После завершения снова проверим структуру разделов
# gpart show ada0
и видим, что раздел freebsd-ufs теперь 39 ГБ
Далее возвращаем раздел подкачки
# gpart add -t freebsd-swap -a 4k ada0
и проверим структуру разделов
Если всё нормально, подключаем раздел swap
# swapon /dev/ada0p3
После этого увеличим размер файловой системы UFS для использования нового размера раздела утилитой growfs
# growfs /dev/ada0p2
Затем перезагрузимся
# shutdown -r now
и проверим размер корневого раздела командой
# df -h
в столбце Size уже должен отображаться новый размер.
Исправление возможных ошибок UFS
Вполне вероятно, что последующие перезагрузки системы могут вызвать ошибку с таким предупреждением:
WARNING: / was not properly dismounted
и далее попросит ввести полный путь к шеллу:
Enter full pathname of shell or RETURN for /bin/sh:
Исправим это.
Введём: /rescue/tcsh
и вовзращаемся в стандартный шелл
Чтобы исправить ошибку, необходимо воспользоваться утилитой fsck
# fsck -f -y -t ufs
После проверки файловой системы появится сообщение, что она всё ещё DIRTY (то есть неисправна).
Вводим команду
# fsck
и после этого всё должно быть нормально:
Проверяем командами
# df -h
и
# gpart show ada0
Теперь точно всё в порядке.
эх, а ведь был ещё способ клонировать работающую систему с помощью dump/restore из livecd frenzy! вот только ufs, не zfs.