Создаём виртуальную машину, добавляем загрузку CD/DVD с ISO: FreeBSD-13.1. Мы ведь помним, что наш Asterisk был именно на FreeBSD 13.1.
Загружаемся. В первом меню выбираем Live CD.
Входим под пользователем root. Вводим:
kbdmap
И выбираем «Russian».
Команда kbdmap
используется для настройки и изменения раскладки клавиатуры в консоли.
mkdir /tmp/etc
mount_unionfs /tmp/etc /etc
Эти команды создают временный каталог /tmp/etc
и монтируют его поверх /etc
с помощью mount_unionfs
, чтобы изменения в /etc
сохранялись только в памяти и не записывались на диск.
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
passwd
service sshd onestart
Эти команды разрешают вход по SSH для пользователя root, устанавливают пароль для root и запускают службу SSHD вручную.
Затем
ifconfig
dhclient vtnet0
Эти команды выводят информацию о сетевых интерфейсах с помощью ifconfig
, а затем запрашивают IP-адрес для интерфейса vtnet0
через DHCP с помощью dhclient
. Вместо vtnet0
у Вас может быть другой интерфейс.
sockstat -l4
Команда sockstat -l4
во FreeBSD выводит список всех активных IPv4-сокетов в режиме прослушивания (-l
), показывая, какие процессы ожидают входящих соединений на каких портах. Ищем открытый 22 порт, если не нашли, что-то сделали не так. Именно по SSH будет заливаться ZFS-снапшот.
Со сервера с резервной копией Asterisk (aster-backup) делаем ping 192.168.0.3
. Адрес 192.168.0.3 был получен по DHCP. У Вас он будет другой.
На LiveCD выполняем команду
gpart show
Команда gpart show
во FreeBSD отображает информацию о разметке дисков — показывает, какие диски подключены и как они разбиты на разделы. Ищем имя жесткого диска, у меня da0
.
Делаем
bsdinstall zfsboot
Команда bsdinstall zfsboot
запускает установку FreeBSD с настройкой загрузочного раздела на основе ZFS.
Любуемся, как настроил bsdinstall
структуру ZFS, и уничтожаем пул zroot (что приводит к удалению всех данных на нём).
zpool list
zfs list
zpool destroy zroot
Но полезных данных на нём пока нет, и у Asterisk пул другой — zfspool
. Создадим его.
gpart show
zpool create zfspool da0p3
Эти команды сначала выводят информацию о разметке дисков. Ищем диск и раздел, где будет создаваться новый пул, у меня da0p3
, а затем создаём ZFS-пул zfspool
.
Всё готово, чтобы принять снапшот.
На aster-backup через zfs list -t snapshot
ищем последний снапшот.
У меня это rpool/backups/zfspool@zrepl_20250514_042400_000
и вводим команду
zfs send -R rpool/backups/zfspool@zrepl_20250513_045700_000 | ssh root@192.168.0.3 zfs receive -F -v zfspool
Эта команда отправляет ZFS-снимок rpool/backups/zfspool@zrepl_20250513_045700_000
по сети через SSH на удалённый хост со FreeBSD и применяет его там в датасет zfspool
с помощью zfs receive
.
Дальше пьём чашку кофе, курим, принимаем ванну и т. д. Операция у меня заняла около одного часа.
В LiveCD выполняем команду
zpool set bootfs=zfspool/ROOT/default zfspool
Эта команда устанавливает загрузочную файловую систему (bootfs) для ZFS-пула zfspool
, указав, что система должна загружаться с датасета zfspool/ROOT/default
.
poweroff
Выключаем систему. Затем из виртуальной машины отмонтируем ISO-образ. Запускаем новый клон Asterisk.
Далее проходим увлекательный квест со вводом пароля, отключением firewall и делаем прочую админскую работу, чтобы реанимировать этот клон до рабочего состояния. Но это уже отдельный мануал.
Восстановление из резервной копии сервера телефонии Asterisk завершено.
Вот так путём маленьких шагов от железа к гипервизору виртуализируем Asterisk без боли (почти) — с танцами и снапшотами.
P. S. Данная инструкция основывалась на видео «How to move FreeBSD to another machine (ZFS)»