Впервые опубликованно в журнале "Системный администратор" N9/2004
Введение
Думаю, в настоящее время никто уже не станет спорить с утверждением, что процесс вхождения Linux в корпоративный мир стал необратимым, а процент установок этой операционной системы на серверах в различных организациях постоянно возрастает.
Можно бесконечно спорить о преимуществах одних операционных систем над другими, но когда у меня возникло желание сделать единое хранилище для ежедневных архивов информации с более чем десятка серверов своей организации, работающих под управлением нескольких различных ОС, я свой выбор остановил на платформе Linux. До сих пор, каждый сервер с помощью уникальных для него скриптов в назначенное время сбрасывал по сети на сервер резервного копирования или stand by-сервер какие-то свои данные, например пользовательские файлы с сетевых дисков, или дампы базы данных. Для этого использовались различные протоколы: ftp, SMB или штатные средства СУБД. При этом приходилось следить за уникальным для каждого сервера log-файлом, и в случае каких-либо изменений в стратегии резервного копирования, править скрипты на каждой машине.
Чтобы как-то упростить администрирование, и сократить время, затрачиваемое на поддержку и мониторинг всего этого "зоопарка" я начал искать систему, которая бы поддерживала копирование информации по сети, умела делать инкрементальные бэкапы, поддерживала бы удаленное администрирование, и не требовала установки клиентского программного обеспечения. Кроме того, было важно, чтоб система умела работать по протоколу SMB, так как часть серверов, в частности основной файл-сервер работали под управлением ОС Windows.
Спустя непродолжительное время, такая система была найдена. Ею оказалась открытая, распространяющаяся по лицензии GNU система архивирования данных масштаба предприятия BackupPC. Сайт расположен по адресу http://backuppc.sourceforge.net/.
Основные особенности рассматриваемой программы:
- Язык программирования, на котором написана система - Perl;
- Минимизация хранимой информации за счет того, что идентичные файлы из разных резервных копий хранятся только в одном экземпляре;
- Настраиваемая степень сжатия данных;
- Поддержка работы по протоколам smb/ssh/rsh/nfs
- Мощный CGI-интерфейс, позволяющий управлять сервером по сети посредством web-браузера;
- Поддержка архивирования информации с машин, получающих настройки сети через DHCP разрешая имена при помощи nmblookup;
- Гибкие настройки планирования архивации данных;
- Оповещения о выполненных действиях администратора и пользователей посредством электронной почты;
- Поддержка клиентов, работающих под управлением Linux, Freenix, Solaris Win95, Win98, Win2000 и WinXP. Сервер тестировался на Linux, Freenix и Solaris;
- Очень подробная документация.
В данной статье я хочу обобщить свой опыт установки, настройки и эксплуатации этой системы, а также поделиться решением нескольких проблем, которые возникли в процессе установки.
Я проверял работу BackupPC версии 2.1.0, последней на момент написания статьи, при помощи тестовой машины под управлением Fedora Core 2, и на "боевых" серверах, работающих на Red Hat Linux 9 и White Box Enterprise Linux 3. Операционная система, стоящая на тестовом сервере фактически является альфа версией бедующего Red Hat Enterprise Linux 4, а White Box Enterprise Linux 3 перекомпиляцией из свободно доступных исходных текстов текущей, третьей версии коммерческого Linux дистрибутива от Red Hat.
Необходимость использовать не поддерживающуюся более "девятку" возникла при установке RAID-контроллера Promise SuperTRAX SX6000, для которого существовали драйвера только под эту операционную систему.
Требования к установке
Прежде чем приступить непосредственно к инсталляции и настройке самой системы резервного копирования BackupPC, необходимо определиться с требованиями к программному окружению, в котором должен работать сервер.
Во-первых, как я уже писал, это операционная система, в роли которой может выступать Linux, Solars, либо другая Unix-like система. Во-вторых, необходимо предусмотреть наличие вместительного RAID-массива, или использовать LVM. Кроме того: Perl версии 5.6.0 или выше , Samba и Apache сервер.
В этой статье я не буду касаться настройки клиента Samba, в частности, работы в составе Active Directory. Я предполагаю само собой разумеющимся, что если Вы планируете производить архивацию информации с Windows-серверов, работающих в составе домена, то и должны обеспечить к ним доступ Вашей Linux-машины. Отсутствие описания процесса конфигурирования Samba-сервера в данной статье, думаю, компенсируется многочисленными материалами на эту тему в Интернет.
Также предполагается, что Вы используете кодировку KOI-8 вместо установленной по умолчанию в большинстве современных дистрибутивов UTF-8. Red Hat в частности перешла на ее использование с версии 8.0 своего продукта. Но дело в том, что поддержка русского языка при помощи UTF-8 во многих приложениях далека от совершенства. Безусловно, лучшим решением была бы работа с UTF-8, но в данном случае я предпочел пойти по пути "наименьшего сопротивления", и воспользоваться уже существующими у меня наработками.
Соответственно должен быть настроен и web-сервер, у которого в качестве кодировки по умолчанию должно быть указанно koi8-r.
Приступая к установке BackupPC, в системе необходимо иметь следующие perl-модули: Compress::Zlib, Archive::Zip и File:RsyncP. Проверить наличие установленных модулей можно дав команду: perldoc .
Если в ответ будет получено сообщение вида: No documentation found for "Compress::Zlib", следовательно, в Вашей системе данный модуль еще не установлен. Все те дистрибутивы, в которых я устанавливал BackupPC, по умолчанию этих модулей не содержат.
Процедура установки модулей, которые можно скачать с www.cpan.org следующая:
#tar zxvf имя_архива.tar.gz - разархивируем исходники
#perl Makefile.PL - формируем makefile
#make - компилируем исходники
#make test - после выполнения этой команды мы должны получить сообщение, что все тесты пройдены успешно
#make install
Имеющие опыт общения с оболочкой cpan, могут поступить проще - и для установки модулей воспользоваться ею.
В случае RHEL3 для успешной компиляции модуля Archive::Zip пришлось дать команду export LANG=en_US, без которой он отказался "собираться".
Кроме того, мне пришлось установить отсутствующую в дистрибутивах от Red Hat утилиту par2, которая создает "избыточную информацию" для файлов с использование кодов Рида-Соломона, и позволяет восстанавливать файлы, повреждённые до определённой степени. Скачиваем с сайта http://parchive.sourceforge.net/ исходники в виде файла par2cmdline-0.4.tar.gz, и выполняем команды:
#tar zxvf par2cmdline-0.4.tar.gz
#cd par2cmdline-0.4
#./configure
#make
#make check
#make install
В принципе, установка par2cmdline не обязательна, так как по умолчанию BackupPC работает и без нее. Но все же я рекомендовал бы ее установить, особенно при отсутствии RAID-массива на сервере.
Также для корректной работы CGI-интерфейса при стандартной установке системы, когда web-сервер запускается из под специально выделенного для этих целей пользователя (httpd или apache), требуется Suid Perl. В Red Hat дистрибутивах соответствующий пакет называется perl-suidperl.
Ну и, наконец, добавим пользователя, из-под которого будет выполняться запуск системы резервного копирования:
#useradd backuppc
После окончания тестирования системы не лишним будет убрать для пользователя backuppc возможность интерактивного входа.
Установка BackupPC
Теперь можно приступить непосредственно к установке BackupPC. Развернем архив и запустим конфигурационный скрипт:
#tar zxvf BackupPC-x.x.x.tar.gz
#cd BackupPC-x.x.x
#perl configure.pl
В ходе установки Вам потребуется ответить на ряд вопросов. На первый - просьбу указать полный путь к уже установленной старой версии, можно ответить, просто нажав "Enter", поскольку выполняется первоначальная установка. После, Вам будут показаны пути к утилитам, требуемым BackupPC, которые скрипт определил самостоятельно, с просьбой подтвердить их расположение. Затем необходимо проверить правильно ли скрипт определил имя хоста и имя пользователя, которого мы создали ранее, а также директорию для установки исполнимых файлов и директорию для хранения данных.
В зависимости от быстродействия сервера Вам необходимо будет выбрать уровень компрессии резервируемых данных. Уровень можно менять от 1 до 9. По умолчанию предлагается третий уровень. По заявлениям разработчиков, при увеличении c "умолчальной" тройки до пятерки, например, загрузка процессора увеличивается на 20%, а данные занимают на 2-3% меньше места. По этим данным видно, что особого смысла увеличивать степень сжатия нет. При первоначальной установке, я бы порекомендовал оставить тройку. Позднее можно попробовать поэкспериментировать с этим значением, поменяв его в конфигурационном файле.
Следующий вопрос касается пути к cgi-bin директории Вашего веб сервера (в Red Hat подобных дистрибутивах это /var/www/cgi-bin/), и пути к директории с устанавливаемыми иконками для CGI-интерфейса (/var/www/html/BackupPC). Кроме того, будет предложено ввести часть URL, указывающего на иконки, а именно расположение относительно корневого каталога WEB-сервера. Обратите внимание, что путь должен начинаться со слэша. В нашем случае он будет выглядеть как /BackupPC.
Настройка BackupPC
Как и большинство программ, работающих под управлением Unix-подобных систем, настройка и изменение параметров сервера BackupPC производится правкой конфигурационных файлов. К чему мы и приступим.
Интересующий нас файл config.pl, расположен в подкаталоге /conf, который был создан внутри директории предназначенной для хранения данных. На самом деле этот файл очень хорошо документирован, поэтому я пройдусь лишь по основным параметрам. Config.pl состоит из четырех групп настроечных значений, содержащих:
- основные параметры сервера;
- описание тех машин, информацию с которых нужно архивировать;
- указания как часто это надо делать;
- параметры CGI-интерфейса.
$Conf{WakeupShedule} - как часто сервис должен проверять были ли изменения на подлежащих архивированию компьютерах, и в случае изменений - выполнять резервирование данных. По умолчанию - каждый час, кроме полуночи.
$Conf{MaxBackups} - максимальное число одновременных процессов архивирования.
$Conf{DfMaxUsagePct} - при заполнении указанного в процентах объема диска, заданного для хранения данных, архивирование не производится. По умолчанию 95%.
$Conf{SmbShareName} - имя расшаренного ресурса на Windows-машине. По умолчанию - это диск C:\, который в Win2000/XP доступен через SMB по имени "С$".
$Conf{SmbShareUserName} - имя пользователя на Windows-машине, которому даны права на ресурс общего доступа .
$Conf{SmbSharePasswd} - его пароль. В настоящее время он приводится в открытом виде. В следующих версиях планируется хранение в зашифрованном виде.
$Conf{FullPeriod} - период в днях между полными резервными копиями.
$Conf{IncrPeriod} - период в днях между инкрементальными резервными копиями.
$Conf{FullKeepCnt} - максимальное число сохраняемых полных резервными копиями.
$Conf{BackupFilesOnly} - список директорий которые необходимо архивировать. По умолчанию - не определено.
$Conf{BackupFilesExclude} - тоже самое, но для директорий-исключений.
$Conf{ArchivePar} - при использовании par2cmdline процент избыточных данных в архиве. По умолчанию - 0.
$Conf{EmailAdminUserName} - почтовый адрес администратора на который будут присылаться сообщения об ошибках и предупреждениях.
$Conf{CgiAdminUserGroup} и $Conf{CgiAdminUsers} - пользователи и группы, которым доступен CGI-интерфейс.
Обратите внимание, что параметры, относящиеся к конкретной машине, могут быть переопределены машинно-зависимым файлом Config.pl, который храниться в поддиректории каталога с данными /BackupPC/pc//. Действительно, на каждой машине могут быть свои конкретные папки общего доступа, списки исключений, свой локальный пользователь с паролем, для которого установлены свои разрешения.
Теперь настроим список компьютеров, данные с которых необходимо архивировать. Файл с настройками находится в том же каталоге где и основной конфигурационный файл и называется hosts. Собственно, синтаксис файла максимально прост. Каждая строчка содержит три параметра: имя машины, имя(e-mail) ее хозяина, и признак получает ли данный компьютер сетевые настройки по DHCP или нет.
Теперь осталось скопировать скрипт старта и остановки сервиса из дистрибутива /init.d/linux-backuppc в /etc/rc.d/init.d/backuppc, в случае Red Hat дистрибутива, а затем можно попробовать стартовать BackupPC командой:
#service backuppc start
Кроме того, нелишне добавить автоматический старт при загрузке сервера в консоль и в X-Window:
#chkconfig - -add backuppc
#chkconfig - -level 35 backuppc on
К сожалению, данные действия приходится делать вручную, так как разработчики не включили эти операции в установочный скрипт.
В лог-файле messages Вашего сервера должно появиться сообщение об успешном старте сервиса, а в директории с данными /BackupPC/log будет создан подробный лог самого сервиса. После успешного старта можно попробовать запустить браузер, и обратиться по адресу http://имя_сервера/cgi-bin/BackupPC_Admin. Если Вы сделали все правильно, то должны получить нечто подобное тому, что изображено на рисунках. В случае проблем с доступом к CGI-интерфейсу рекомендую обратиться к FAQ на сайте http://backuppc.sourceforge.net/. В большинстве случаев в первую очередь необходимо проверить права доступа к файлам и директориям BackupPC. Однако, если Вы следовали приведенному порядку установки таких проблем возникнуть не должно.
Русификация
Еще одной проблемой при работе с CGI-интерфейсом, решение которой, однако пришлось искать самому, может стать некорректное отображение русских имен файлов и папок. Для исправления этой ситуации придется внести небольшие изменения в файл Lib.pm, расположенный в подкаталоге /CGI директории с исполняемыми файлами программы. Данный файл содержит системные процедуры BackupPC.
Во-первых, найдите в теле процедуры Header строчку
"print ();"
и замените ее на
"print (-charset=>"koi8-r");"
Ну а во-вторых, в процедуре EscHTML закомментируйте предпоследнюю строчку, стоящую перед "return":
"=~s{([^[:print:]])}{sprintf("&\#x%02X;", ord($1));}eg;"
Теперь все имена будут отображаться в нормальном виде, используя кодировку КОИ-8.
Кроме того, рекомендую обратить внимание на папку /lib/BackupPC/Lang, которая находится в директории с исполнимыми файлами. Там находятся файлы с локализованными сообщениями, выводимыми CGI-интерфейсом. В комплект поставки русский язык не входит, но Вам ни чего не мешает создать свой файл по образцу существующих, переведя сообщения с английского на русский язык. Часть этой работы я уже проделал для своего "внутреннего" использования. Перевод не претендующий на полноту и высокое литературное качество я выложил на своем сайте. Скачать архив можно по ссылке http://www.markelov.net/program/bpcrus.tgz.
Интерфейс
Интерфейс системы достаточно прост и нагляден. Обратившись по адресу http://имя_сервера/cgi-bin/BackupPC_Admin Вы попадаете в окно с общей информацией по серверу BackupPC. В левой части окна присутствует меню с ссылками на более подробную информацию по работе всего сервера, а также выпадающее меню с возможностью выбора информации по конкретному архивируемому хосту.
Зайдя в меню по конкретному хосту, можно получить всю информацию касательно выполненных операций резервирования данных, просмотреть списки архивных копий, а также "провалиться" в любой из них и восстановить файлы и каталоги полностью или частично. Кроме того, имеется возможность скопировать любой из файлов средствами браузера на ту машину, с которой Вы зашли на сервер.
Заходя в инкрементальную резервную копию, Вы видите полную картину сохраненной файловой системы, то есть полную резервную копию плюс наложенная на него инкрементальная копия. А для всех измененных файлов можно просмотреть список версий, и восстановить нужную из них.
Кроме того, все операции по работе с архивами можно выполнять из командной строки, но я не вижу смысла приводить здесь синтаксис команд, поскольку он подробно описан в документации, идущей в составе дистрибутива.
В конце мне хотелось бы поблагодарить Павла Шера за ряд ценных советов, которые мне пригодились при написании статьи.