В моем случае сервер FreeBSD 9.1, виртуальная машина будет находится на хосте ESXi 6.5, впрочем это совсем не важно. Выполняем следующие шаги:
1) Подготавливаем новый сервер (виртуальную машину).
2) Запускаем установщик сервера (достаточен bootonly ISO-образ FreeBSD).
3) Установщик спрашивает в начале что будем делать: устанавливать, запустить Shell или запустить Live CD. Выбираем «запуск Shell»
4) Настраиваем сеть: ifconfig em0 10.9.96.5/24
Добавляем маршрут по-умолчанию: route add default 10.9.96.1
Проверяем, что сервер, который требуется перенести может пинговать наш новый сервер.
5) Запускаем SSH. Для этого нужны следующие шаги:
mkdir /tmp/etc
mount_unionfs /tmp/etc /etc
Правим файл настроек SSH для возможности подключения root к серверу:
ee /etc/ssh/sshd_config
Правим строку. Должно быть:
PermitRootLogin yes
SSH-готов для запуска:
/etc/rc.d/sshd onestart
6) Меняем пароль у root-пользователя во времено загруженной системы: passwd
7) Командой sysctl kern.disks
проверяем наличие дисков в системе. Находим тот, который будет выделен под систему.
Командой gpart show <имя диска>
смотрим, что на этом диске есть. Если разделов нет или они отличаются от разделов на исходном сервере, то командой gpart destroy -F <имя диска>
уничтожаем всё на диске.
8) Командой geom disk list
на целевом сервере проверяем размер сектора диска. Если установка производится на современные жесткие диски, у которых размер сектора = 4 кб, то при создании разделов необходимо использовать выравнивание.
9) Командами gpart create -s <BSD|GPT|MBR> <имя диска>
создадим одну из схем (геометрию) на диске.
10) Командой gpart add -t <freebsd-ufs|freebsd-boot|freebsd-swap> <имя диска>
создаем раздел на диске (если нужно выравнивание, то используем дополнительные ключи)
11) Форматируем корневой раздел командой newfs -U <имя раздела>
. Ключ -U включает Soft Updates
12) Делаем диск загрузочным: для этого выполняем команду gpart bootcode -b /boot/boot <имя диска>
(для схемы BSD). Для других схем команды будут: gpart bootcode -b /boot/mbr <имя диска>
и
gpart bootcode -b /boot/pmbr <имя диска>
gpart bootcode -p /boot/gptboot -i 1 <имя диска>
13) Монтируем раздел mount <имя раздела> /mnt
14) На исходной машине выполняем команду: dump -0Lf - / | ssh root@10.9.96.5 "cd /mnt ;restore -rf -"
. Если сервер пишет «Cannot create snapshot. Snapshots are not yet supported when running with journaled soft updates.», то тогда нужно загрузиться в Single Mode и выполнить команды:
tunefs -J disable /dev/ada0
tunefs -n disable /dev/ada0
tunefs -j disable /dev/ada0
После этого перезагружаемся и снова выполняем команду dump. Дожидаемся надписи «DUMP IS DONE»
Если сервер нет возможности перезагрузить в безопасный режим, то тогда из команды dump убираем ключ -L. Чтобы данные были как можно более консистенты на новом сервере, на исходном сервере перед дампом выключаем все сервисы. В моем случае это:
service apache22 stop; service nginx stop; service sendmail stop; service mysql-server stop
15) Перезагружаем конечный сервер. Если он не может подмонтировать корневую файловую систему, но еще раз загружаемся с ISO-образа, монтируем том, куда мы скопировали сервер и в нем открываем файл ee /etc/fstab
. Там меняем название раздела для корневой системы на правильное.