В работе системного администратора медицинского учреждения случаются самые разные ситуации. Оборудование имеет свойство выходить из строя, а аптайм — стремиться к нулю в самый неподходящий момент. Особенно остро этот вопрос стоит, когда на сервере развёрнута медицинская информационная система (МИС), биллинг или другой критически важный сервис.
К счастью, есть отработанная методика, позволяющая восстановить работоспособность «упавшего» сервера или выполнить его плановый перенос на новое «железо» всего за 30 минут.
В этой статье мы подробно, на практическом примере, разберём процесс восстановления сервера FreeBSD с использованием утилиты fsbackup и любого LiveCD.
Цель статьи: предложить читателям рабочий алгоритм действий для быстрого восстановления или миграции сервера FreeBSD в условиях ограниченного времени.
Уровень подготовки: материал рассчитан на специалистов, уже имеющих базовые навыки администрирования FreeBSD.
01. Что нам понадобится
Для успешного выполнения всех операций подготовьте:
- Программа для архивации:
fsbackup(доступна в портах/usr/ports/sysutils/fsbackup). Подробнее о ней можно почитать на OpenNet http://www.opennet.ru/dev/fsbackup/. - LiveCD с FreeBSD: автор использует Frenzy, но подойдёт любой удобный вам вариант (например, установочный диск FreeBSD).
- Хранилище для бэкапа: локальный жёсткий диск, FTP-сервер, SMB-шара или флешка.
Программа fsbackup поддерживает:
- локальное и удалённое (FTP/SSH) хранение архивов;
- шифрование;
- создание инкрементных копий.
Комментарии в конфигурационном файле даны на русском языке, поэтому с его настройкой проблем возникнуть не должно.
02. Создаём резервную копию системы
Первым делом необходимо создать эталонный архив, который станет основой для восстановления.
Пример конфигурационного файла 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
В приведённом примере архивируется весь сервер, за исключением ряда директорий (указаны в самом конце). В вашем случае список исключений может отличаться — настройте его под свои задачи.
Сохраняем скрипт восстановления
Вместе с архивом необходимо сохранить скрипт fsrestore.sh, который находится в /usr/local/fsbackup/scripts. Он понадобится нам на втором этапе.
03. Готовим целевой сервер
Теперь нужно подготовить «площадку», на которую будет разворачиваться наша система.
- Анализируем исходную конфигурацию. На исходном (рабочем) сервере откройте
/etc/fstabи запомните список существующих разделов. - Создаём аналогичные разделы. Размеры разделов могут не совпадать — достаточно просто наличия таких же точек монтирования. Автор рекомендует разбивать диск с помощью установочного диска FreeBSD (custom install) и устанавливать загрузчик.
- Копируем архив и скрипт. Перенесите ранее созданный бэкап и скрипт
fsrestore.shна целевой сервер любым удобным способом (флешка, FTP, сетевая шара).
04. Загружаемся с LiveCD и монтируем разделы
Это ключевой этап, от которого зависит успех всей операции.
- Загрузка. Загрузитесь с LiveCD (автор использует Frenzy).
- Размонтирование. LiveCD автоматически монтирует ваши разделы, но в режиме чтения. Поэтому сначала отмонтируем их:
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Если на Windows-шаре: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(подставьте свои значения IP-адресов, имени пользователя и шары).
05. Запускаем восстановление
После того как все разделы подмонтированы, а архив стал доступен, можно переходить к восстановлению.
- Редактируем скрипт
fsrestore.sh. В нём нужно изменить всего две строчки:# Директория где находится бэкап. backup_path="/mnt/backup" # Корневая директория куда будут помещены данные восстановленные из бэкапа. restore_path="/mnt" - Запускаем скрипт. Дождитесь завершения процесса. Для ускорения работы лучше скопировать архив локально, а затем запускать восстановление — это надёжнее и быстрее.
- Проверяем результат. После завершения в папке
/mntдолжна находиться точная копия вашего сервера.
06. Вносим финальные правки
Восстановление файлов — это ещё не всё. Необходимо адаптировать систему под новое оборудование.
- Редактируем
/mnt/etc/fstab. Это самый важный пункт. Имена дисков на разных серверах могут отличаться. В примере автора на исходном сервере было зеркалоar0, а на целевом — одиночный дискad4. Соответственно, вfstabнужно заменить все вхожденияar0наad4. - Настраиваем сеть (при необходимости). Вы можете сразу отредактировать сетевые настройки в
/mnt/etc/rc.conf, но это можно сделать и после первой загрузки. - Восстанавливаем права доступа. Вместе с архивом
fsbackupсоздаёт файл с расширением.dir, в котором хранится информация о правах доступа и владельцах всех файлов и папок. Во время восстановления скрипт не расставил эти права (так как путь был/mnt/, а не/). Поэтому после перезагрузки вам нужно будет сделать файл исполняемым и запустить его:chmod +x имя_файла.dir ./имя_файла.dirЭта команда полностью восстановит оригинальные права и владельцев.
После этого можно перезагружать сервер (не забыв извлечь LiveCD) и входить в уже полностью рабочую систему.
07. Резюме
Описаная методика многократно проверена автором на практике. Она действительно позволяет быстро и относительно просто восстановить сервер FreeBSD из резервной копии или перенести его на новое оборудование. Главное — не забыть про fstab и файл с правами доступа.
Помогла статья? Присылайте ваши материалы и предложения на почту admin@adminmed.ru. Если хотите, укажите ссылки на свои социальные сети — мы с радостью добавим их под публикацией. Давайте развивать профессиональное сообщество IT-специалистов в здравоохранении вместе!


