Восстановление или перенос сервера Freebsd

Хочу рассказать, как относительно быстро восстановить работоспособность умершего freebsd сервера, либо перенести полностью сервер с одной машины на другую. Для этого нам понадобится программа для архивации fsbackup и live-cd с freebsd. Сразу предупреждаю, что это не how to, нужен некоторый уровень знания и понимания ОС freebsd.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Первым делом сделаем сам архив. Для архивирования любых данных я использую простую и удобную программу fsbackup. Подробнее о ней можно узнать тут http://www.opennet.ru/dev/fsbackup/ В конфиге комментарии на русском языке, так что с настройкой проблем быть не должно. Архив можно хранить локально, на удаленном ftp, либо заливать через ssh на другой сервер. Поддерживается шифрование, создание инкрементных бэкапов. Программа живет в портах /usr/ports/sysutils/fsbackup Для бэкапа системы я использую следующий конфиг:

$cfg_backup_name = "srv12_domain_local";
$cfg_cache_dir = "/usr/local/fsbackup/cache";
$prog_md5sum = "md5sum -b";
$prog_tar          = "/usr/bin/tar";
$prog_ssh         = "/usr/bin/ssh";
$prog_rm          = "/bin/rm";
$prog_gzip        = "/usr/bin/gzip";
$prog_pgp        = "gpg";
$cfg_checksum = "timesize";
$cfg_backup_style = "backup";
$cfg_increment_level = 7;
$cfg_save_old_backup = 1;
$cfg_type = "remote_ftp";
$cfg_remote_ftp_mode = 0;
$cfg_remote_password = "password";
$cfg_local_path = "/mnt/backup/srv12/system";
$cfg_time_limit = 0;
$cfg_size_limit = 0;
$cfg_maximum_archive_size = 0;
$cfg_root_path = "/";
$cfg_verbose = 2;
$cfg_stopdir_prune=0;
1;
__DATA__
#Архивируем весь сервер с корня
/
#Указываем папки исключения, которые бэкапить не нужно
!/dev
!/mail
!/mnt
!/usr/ports
!/var/db/portsnap
!/usr/local/fsbackup/cache
!/web/squidcache
!/web/mysql
!/usr/src
!/usr/local/www/data-dist/netams

Я архивирую весь сервер, за исключением некоторых папок, которые указаны отдельно.

Архив мы получили, теперь нужно подготовить сервер, на который будет осуществляться перенос. Для этого на исходном сервере необходимо открыть /etc/fstab запомнить существующие разделы и затем создать такие же разделы на другом сервере.

/dev/ar0s1b             none            swap    sw                      0       0
/dev/ar0s1a             /               ufs     rw                      1       1
/dev/ar0s1f             /mail           ufs     rw                      2       2
/dev/ar0s1d             /tmp            ufs     rw                      2       2
/dev/ar0s1e             /usr            ufs     rw                      2       2
/dev/ar0s1g             /var            ufs     rw                      2       2
/dev/ar0s1h             /web            ufs     rw,suiddir,noatime      2       2
/dev/acd0               /cdrom          cd9660  ro,noauto               0       0

Размер разделов может не совпадать, достаточно просто наличие таких же разделов. Я разбиваю диск с помощью установочного диска freebsd и custom install на нем: разбиваю непосредственно диск и ставлю загрузчик freebsd. После того, как создали разделы, копируем наш бэкап куда-нибудь, чтобы потом можно было его забрать на второй сервер, загрузившись с live-cd. Можно скопировать на ftp, можно на флешку, можно просто в виндовую шару положить и потом ее подмонтировать. Вместе с архивом нужно скопировать скрипт fsrestore.sh, который лежит в /usr/local/fsbackup/scripts. Этот скрипт будет выполнять непосредственно восстановление системы.

Теперь берем live-cd, я использую Frenzy, и грузимся с него. В принципе, пользоваться можно чем угодно, любым live-cd с freebsd, но мне нравится именно Frenzy. После загрузки имеем полноценную систему, которая автоматически подмонтировала созданные нами ранее разделы. Подмонтированы они в режиме чтения, так что сначала отмонтируем их.

umount /dev/ad4s1a

и так далее со всеми разделами.

Затем в папке /mnt создадим папки с именами разделов нашей системы, которую мы переносим. В моем случае это папки /mnt/tmp, /mnt/usr, /mnt/var, /mnt/web, /mnt/mail.

Далее монтируем разделы в только что созданные папки, при этом раздел / монтируем в /mnt

mount /dev/ad4s1a /mnt
mount /dev/ad4s1f /mnt/mail
mount /dev/ad4s1d /mnt/tmp
mount /dev/ad4s1e /mnt/usr
mount /dev/ad4s1g /mnt/var
mount /dev/ad4s1h /mnt/web

Теперь нужно подмонтировать флешку с архивом:

mount_ntfs /dev/da0s1 /mnt/backup

Не забываем заменить /dev/da0s1 на то устройство, каким является флешка у вас.

Можно вместо флешки подмонтировать виндовую шару. Перед монтированием шары необходимо не забыть настроить сеть либо через sysinstall, либо сразу c помощью ifconfig:

ifconfig eth0 192.168.0.15 netmask 255.255.255.0
 ifconfig eth0 up

Монтируем шару:

mount_smbfs -I 192.168.0.2 -E koi8-r:cp866 //user@comp/shara /mnt/backup

user – имя пользователя шары, comp – имя компьютера в сети shara – имя шары

Итак, у нас есть бэкап, есть подмонтированные разделы будущей системы. Теперь можно начать восстановление. Для этого редактируем скрипт fsrestore.sh. В нем нужно изменить только две строчки:

# Директория где находится бэкап.
backup_path="/mnt/backup"
# Корневая директория куда будут помещены данные восстановленные из бэкапа.
restore_path="/mnt"

После этого запускаем скрипт и ждем завершения. Лучше бэкап скопировать куда-нибудь локально, и затем запускать восстановление. Так будет быстрее и надежнее. После завершения восстановления, проверяем файлы. В данный момент в папке /mnt должна находиться копия нашего сервера.

Сейчас нужно внести некоторые изменения в конфигурацию. Первым делом обязательно нужно отредактировать файл /mnt/etc/fstab так как имена дисков в разных серверах могут быть разными. На исходном сервере у меня было зеркало ar0 , перенес же я на одиночный хард ad4. Соответственно, меняем в fstab ar0 на ad4. Тут же можно поменять сетевые и прочие настройки в rc.conf но это уже не критично. Все остальное можно будет изменить загрузившись в системе. Если же не отредактировать fstab, то, скорее всего, мы не загрузимся.

После восстановления перезагружаем компьютер, вытаскиваем live-cd, логинимся в систему. Осталось выполнить последнее действие. Вместе с непосредственно архивом fsbackup создает файлик с правами доступа и владельцами на все файлы и папки в архиве.  Файл этот имеет расширение .dir Во время восстановления скрипт не отработал и не расставил нужные права, так как путь восстановления был не в / а в /mnt/, поэтому пути в файле не совпадали с путем восстановления. Так что теперь нам нужно вручную исполнить этот файл, чтобы полностью восстановить все права и владельцев. Для этого ставим ему права на исполнение и запускаем. После его исполнения мы имеем точную копию системы.

Все описанное собственноручно проверялось много раз. Очень просто и удобный способ восстановления или переноса freebsd сервера.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Дополнительные материалы по Freebsd

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Рекомендую полезные материалы по Freebsd:
  • Установка
  • Настройка
  • Обновление
  • Шлюз
  • Прокси сервер
  • Веб сервер NGINX
  • Веб сервер Apache
Описание установки Freebsd 11 на одиночный диск, либо на софтовый raid1, сделанный средствами zfs, которые поддерживает стандартный установщик.
Базовая настройка Freebsd, которую можно выполнить после установки сервера общего назначения. Представлены некоторые рекомендации по повышению удобства пользования и безопасности.
Описание и нюансы обновления системы Freebsd с помощью утилиты freebsd-update. Показано пошагово на конкретном примере обновления.
Настройка Freebsd шлюза для обеспечения выхода в интернет. Используется ipfw и ядерный нат, dnsmasq в качестве dhcp и dns сервера. Мониторинг сетевой активности с помощью iftop.
Подробная настройка на Freebsd прокси сервера squid + sams2 - панели управления для удобного администрирования.
Настройка максимально быстрого web сервера на базе Freebsd и nginx + php-fpm. Существенный прирост производительности по сравнению с классическим apache.
Настройка web сервера на Freebsd в связке с apache, nginx, php и mysql. Пошаговая установка и настройка каждого компонента.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

4 комментария

  1. Здравствуйте, Владимир.
    Сделал перенос по вашей статье. Восстанавливал с LiveCD установочного диска, так как Frenzy почему-то на Proxmox у меня не загружается. В определенный момент останавливается, процессор ВМ загружается на 100% и дальше ничего не происходит. Останавливается на надписи на экране: iscsi: version 2.2.4.2
    Изначально новая система не запускалась сама, надо было ввести путь до раздела с корневой файловой системой.
    Я это исправил, поменяв в boot/loader.conf значение vfs.root.mountfrom на "ufs:/dev/ada0p3"(путь до раздела с корневой файловой системой).
    Теперь система загружается, но почему-то запускаются не все службы.
    Например не стартуют named, mysql, httpd, samba, winbind, nmbd.
    В syslog про named, например, только запись pin(номер pid), uid 53: exited on signal 4.
    Если пробовать запустить руками эти службы, то появляется сообщения о том, что служба запускается и больше ничего. При этом служба остается не запущенной.
    Настройки на виртуальной машине в службах я подкорректировал - исправил IP-адрес, поменял пути к ресурсам samba(их я не переносил, там большой объем и файловый сервер будет на другой машине).
    Выглядит все так, как будто бы не хватает прав доступа к файлам, но файл на изменения прав доступа и владельцев я запускал. В целом он отработал нормально, но кое-где пришлось руками поменять разрешения на права доступа и владельца. Например у named. Но даже если сделать разрешения идентичными тем, что на исходном сервере, службы не запускаются.
    Еще один момент - почему-то в новой системе в файле /etc/resolv.conf было пусто, хотя в оригинале прописан nameserver 127.0.0.1. Это я исправил.
    fsck раздела я делал, загрузившись с LiveCD с установщика.
    В чем может быть причина, где еще стоит смотреть?
    И почему Frenzy может не запускаться на ВМ?

    • Я последний раз делал перенос по этой статье около 10 лет назад. А с FreeBSD не работал уже лет 5 вообще. Не помню таких нюансов. Смотрите логи сервисов, которые не запускаются. Там должны быть подсказки.

  2. Здравствуйте.
    А будет ли работать этот алгоритм для FreeBSD, установленной на ZFS?
    Мне нужно перенести систему версии 11.2 с железа на Proxmox.
    В системе установлен веб-сервер с самописным сайтом на apache, MySQL, PHP и sendmail

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar