Сохранение и восстановление операционной системы FreeBSD.
Алексей Иванов ivanov@ftu.ru
Перед каждым из нас рано или поздно встает вопрос, как сохранить настройки любимого сервера (рабочей станции) и в случае падения оного все переустановить максимально быстро.
Когда мне в руки попал сервер под управлением FreeBSD, я, привыкший к линуксу, не знал с какой стороны к нему подойти.
Вот для таких, как я, и для всех остальных эта статья.
Сохранение FreeBSD:
Для начала определимся, что у нас есть и как с этим бороться. FreeBSD, в отличие от Линукса, хранит все свои конфигурационные файлы в строго определенных местах: /etc – системные настройки, /usr/local/etc – настройки сервисов и программ, установленных пользователем.
Конфигурация текущего ядра сидит в /sys/i386/conf/. По умолчанию там всегда есть файлы LINT и GENERIC – это, соответственно, описание всех возможных опций ядра (LINT) и конфигурационный файл ядра, собранного разработчиками FreeBSD (GENERIC). Там же хранятся конфигурационные файлы, созданные Вами, или до Вас (предыдущими админами (). Узнать какой файл является текущим очень просто: uname –a
bash-2.04# uname -a
FreeBSD gw.rissa.ru 4.1-RELEASE FreeBSD 4.1-RELEASE #0: Sun Oct 20 18:32:29 MSD 2002 root@gateway.rissa.ru:/usr/src/sys/compile/GW i386
bash-2.04#
Как видите, здесь рассказано: какая система у вас установлена, когда, кем и с помощью какого файла, скомпилировано ядро.
Путь, указанный в выводе команды, ведет к директории, в которой подготовлены конфиги ядра, эта директория появляется в процессе компилирования ядра, а сам файл настроек лежит в /sys/i386/conf. В данном случае он называется GW.
Настройки пользовательских интерфейсов, оконных менеджеров, текстовых редакторов и т.д., как и в Линуксе, хранятся в домашних каталогах.
Еще один каталог, который нам будет нужен это /usr/ports/distfiles, там сложены дистрибутивы (исходники) всех программных продуктов, которые установлены с помощью системы портов.
Итак, мы подходим к самому интересному: сохранение всех настроек на отдельном носителе.
Если у вас в системе установлен CD-RW (а ввиду его низкой стоимости, и практической необходимости, он должен быть установлен!), то сохранение настроек, а также всевозможных файлов и файликов, становится делом простым и приятным.
Для начала, определимся с временным каталогом, куда мы скопируем все, что нам будет необходимо. Я предложил бы каталог /var/backup (у меня в системе в /var смонтирована самая большая партиция). Если вы не знаете что у вас где смонтировано, а также сколько места у вас на дисках занято или свободно, вам поможет команда df –H.
Теперь создадим каталоги (для удобства ():
mkdir /var/backup/etc
mkdir /var/backup/kernel
mkdir /var/backup/distfiles
mkdir /var/backup/local.etc/
mkdir /var/backup/home/
mkdir /var/backup/root/
И скопируем все необходимое:
cp /etc/* /var/backup/etc/
cp /sys/i386/conf/* /var/backup/kernel/
cp –R /usr/ports/distfiles/* /var/backup/distfiles/
cp –R /usr/local/etc/* /var/backup/local.etc/
cp –R /home/* /var/backup/home/ (очень часто в каталоге /home нет ничего ценного … поэтому подойдите к копированию этого каталога творчески ()
cp –R /root/* /var/backup/root/
Если ваша система сконфигурирована как www и/или ftp сервер, обязательно озаботьтесь сохранением каталогов www и ftp. Узнать где они легче всего из соответствующих конфигурационных файлов:
WWW (Apache):
-bash-2.05b# grep Root /usr/local/etc/apache/httpd.conf
ServerRoot "/usr/local"
DocumentRoot /usr/local/www/rissa
DocumentRoot /usr/local/www/story
DocumentRoot /usr/local/www/sierra
DocumentRoot /usr/local/www/opos
DocumentRoot /usr/local/www/myro
DocumentRoot /usr/local/etc/httpd/htdocs/squid-reports
DocumentRoot /usr/local/www/granitvtd
DocumentRoot /usr/local/www/fasko
DocumentRoot /usr/local/www/atdt
DocumentRoot /usr/local/www/mustang
DocumentRoot /usr/local/www/velobol
-bash-2.05b#
FTP (Proftpd):
Тут немного сложнее, но, заглянув в /usr/local/etc/proftpd.conf, вы найдете все, что вам нужно.
Теперь в каталоге /var/backup/ у вас сложено все, что будет вам необходимо, для восстановления системы.
Для записи на CDRW вы должны создать iso образ:
mkisofs –R –V “my_backup.26.03.03” –o /var/backup.iso /var/backup
Потом записать CD:
burncd -f /dev/acd0c –e –s 20 data /var/backup.iso fixate
После записи, необходимо проверить записанный диск:
mount /dev/acd0c /cdrom
cd /cdrom
ls -la
Итак, вы только что стали счастливым (и заметьте, одним из немногих, что грустно… ) обладателем резервной копии вашей системы FreeBSD. К слову, то, что мы сделали, не совсем резервная копия системы, потому, что на ее восстановление потребуется гораздо больше времени, чем положено.
Другим путем является создание «слепков» системы с помощью утилиты dd. Но об этом в другой раз.
Восстановление FreeBSD:
Ой!!! Случилось страшное!!!! Самый любимый сервер, работающий уже год, исправно хранящий весь web-сайт фирмы, каталог ftp и базы данных УМЕР!!!! НО! У нас есть заботливо созданная резервная копия, и мы готовы к восстановлению. Итак, запасаемся сигаретами, кофе, пивом, кока-колой и приступаем к решению внезапно возникшей задачи.
Шаг 1: Установка FreeBSD
Начиная восстановление FreeBSD, вы должны иметь дистрибутив системы и ваш диск с резервными данными. Для начала, проведем классическую установку FreeBSD.
Описание установки системы выходит за рамки данной статьи, но несколько моментов мы должны отследить:
1. При разделении дискового пространства на разделы, необходимо делить следующим образом:
/ -- 300 Mb
/usr -- 2 Gb
/var -- все остальное
На самом деле, такое деление дискового пространства, исключительно моя идея, в мире есть много мнений как это делать правильнее, вы можете разделить так как вам удобно, но при любом разделении необходимо учитывать следующее: рутовый каталог практически не изменяется в процессе работы системы и не требует много места, в каталоге /usr и /usr/local находятся программы и библиотеки, установленные вами из системы портов, или каким либо другим способом. Максимально возможный размер каталога /usr не превышает 3 Gb – это если установить вообще все! В каталоге /var изначально находятся логи системы, почтовые файлы пользователей, то есть файлы, постоянно изменяемые, и логично было бы туда же сложить и все наши данные, а также логично было бы выделить для /var как можно больше места. Исходя из этих соображений, я и предложил данное разбиение диска.
2. На вопрос об установке системы портов НЕОБХОДИМО ответить "Да"
Это очень важный момент. Вопрос об установке системы портов, проходит как-то незаметно, в тот момент, когда вы выбираете тип устанавливаемой системы. Единственное, что я вам могу предложить, что бы не пропустить этот вопрос – внимательно читайте все вопросы установщика и давайте обдуманные ответы (.
3. После установки, зайдите в систему пользователем root и дайте следующие команды:
rmdir -f /tmp
ln -sf /var/tmp /tmp
Очень часто нормальная работа сервера нарушается из-за того, что в каталоге /tmp (соответственно в рутовом разделе) заканчивается место, данные команды устраняют эту проблему, первая стирает каталог /tmp, вторая создает символическую ссылку /tmp на каталог /var/tmp.
Шаг 2: Скомпилировать ядро системы:
Компиляция ядра системы – это полумагический процесс, после которого «у вас все будет хорошо!» (. Сейчас подавляющее большинство пользователей Linux (помните для кого эта статья?) не видят необходимости в компиляции ядра, потому что за них обо все позаботились разработчики дистрибутивов. В мире FreeBSD немного другой подход. Дистрибутив устанавливается с помощью ядра GENERIC, это ядро специально создано для единственной цели: заставить FreeBSD работать на любом железе, из списка поддерживаемого. В GENERIC отключены такие полезнейшие вещи как firewall, PPP и другие. Таким образом, компиляция ядра в FreeBSD – это жизненно важный процесс!
Но не все так грустно (. Если вы помните, то в начале статьи мы выяснили, на каком ядре работает наша машина, и скопировали конфигурационный файл этого ядра на резервный диск. Пришло его время.
Прежде всего, необходимо скопировать этот файл в каталог /sys/i386/conf/
cp /cdrom/kernel/* /sys/i386/conf/
После мы можем скомпилировать ядро:
cd /sys/i386/conf/
config MYKERNEL
(MYKERNEL – имя конфигурационного файла ядра)
cd ../../compile/MYKERNEL
make -DNO_MODULES depend && make -DNO_MODULES && make -DNO_MODULES install
После довольно продолжительного сопения ваша система будет подготовлена к работе. В корневой (/) директории вы можете увидеть, что предыдущее ядро kernel переименовано в kernel.old, и добавлен новый файл kernel. В случае какой-то супернепредвиденной ошибки, вы можете загрузится в систему с помощью старого ядра kernel.old.
Само собой, после конфигурации ядра необходимо перегрузится.
Шаг 2: Восстановление системных настроек
Здесь все просто. Скопируйте из резервной копии каталог /etc.
сp –Rf /cdrom/etc/* /etc
В результате этого действия, вы получите уже настроенное соединение с интернетом, сконфигурированный firewall (он у вас был?), готовый файл /etc/master.passwd и т.д.
Для введения в действие этих настроек нет нужды перегружаться. Достаточно выйти в single user mode и потом зайти обратно в Multiuser.
init 1
После непродолжительного хрюканья система спросит вас про шелл по умолчанию, нажмите Enter. Когда вы увидите в качестве приглашения одинокую решетку (#), скажите exit. Система заново перечитает файл /etc/rc.conf и запустит все, что там описано.
Шаг 3: Установка необходимых пакетов
В процессе сохранения системы, вы определились с тем, что работает в вашей системе. На диске с резервными данными у вас есть дистрибутивы (исходники) всех программ, установленных в вашей системе с помощью портов.
Для восстановления программного обеспечения сервера, у вас есть два пути:
- Присоединить машину к интернету и поставить все, что нужно из портов. При этом все исходники программ будут качаться из Сети. Плюсом такого подхода является то, что вы не задумываетесь над зависимостями, не обращаете внимания на «свежесть» программных продуктов. Минус заключается в том, что вы тратите довольно много трафика и времени (время уходит на выкачивание). Я, например, чаще всего использую именно этот путь.
- Скопировать с вашего резервного диска все из директории /cdrom/distfiles (вы же смонтировали CD в /cdrom ?). Потом собрать все, что вам необходимо. Плюсы и минусы здесь строго меняются местами (. Но обратите внимание, что система портов была изначально разработана именно для использования Интернета, любые другие способы сборки программ из портов могут не дать результата.
Шаг 4: Заключительные настройки системы:
Все, мы уже на финишной прямой. Осталось совсем немного! Во первых необходимо восстановить содержимое каталога /usr/local/etc
cp –Rf /cdrom/local.etc* /usr/local/etc/
Во-вторых, вам надо восстановить все ваши данные: содержимое www-сервера, ftp-каталоги, файлы баз данных и т.д.
После всего вышеперечисленного вы можете перегрузится (чтобы еще раз убедиться, что все работает).
В конце как всегда несколько общих слов:
- Данная статья нисколько не претендует на полное руководство. Чтение книг, поиск в Сети, знакомых никто не отменял.
- Практически наверняка, где-то в тексте допущена ошибка – не судите строго. Напишите мне, я исправлю (.
- С той же вероятностью могу сказать, что у некоторых возникнут идеологические возражения против некоторых мест в статье. Мой единственный ответ – напишите лучше! Еще я хочу сказать, что я готов к любому сотрудничеству, и если завтра мне укажут на вопиющие несуразицы в этом тексте, я их исправлю.