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

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

Первым делом сделаем сам архив. Для архивирования любых данных я использую простую и удобную программу 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, поэтому пути в файле не совпадали с путем восстановления. Так что теперь нам нужно вручную исполнить этот файл, чтобы полностью восстановить все права и владельцев. Для этого ставим ему права на исполнение и запускаем. После его исполнения мы имеем точную копию системы.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.