Обзор и
установка системы резервного копирования BackupPC
Андрей Маркелов
Думаю, в настоящее время никто уже не станет спорить с утверждением, что
процесс вхождения Linux в корпоративный мир стал необратимым, а процент
установок этой операционной системы на серверах в различных организациях
постоянно возрастает.
Можно бесконечно спорить о преимуществах одних
операционных систем над другими, но когда у меня возникло желание сделать
единое хранилище для ежедневных архивов информации с более десяти серверов
своей организации, работающих под управлением нескольких различных ОС, я свой
выбор остановил на платформе Linux. До сих пор каждый сервер с помощью
уникальных для него скриптов в назначенное время сбрасывал по сети на сервер
резервного копирования или stand by-сервер какие-то свои данные, например,
пользовательские файлы с сетевых дисков, или дампы базы данных. Для этого
использовались различные протоколы: ftp, SMB или штатные средства СУБД. При
этом приходилось следить за уникальным для каждого сервера лог-файлом, и в
случае каких-либо изменений в стратегии резервного копирования править скрипты
на каждой машине.
Чтобы как-то упростить администрирование и
сократить время, затрачиваемое на поддержку и мониторинг всего этого
«зоопарка», я начал искать систему, которая бы поддерживала копирование
информации по сети, умела делать инкрементальные бэкапы, поддерживала бы
удаленное администрирование и не требовала установки клиентского программного
обеспечения. Кроме того, было важно, чтобы система умела работать по протоколу
SMB, так как часть серверов, в частности основной файл-сервер, работали под
управлением ОС Windows.
Спустя непродолжительное время такая система была
найдена. Ею оказалась открытая, распространяющаяся по лицензии GNU система
архивирования данных масштаба предприятия BackupPC. Сайт расположен по адресу http://backuppc.sourceforge.net.
Основные особенности
рассматриваемой программы:
n Язык программирования, на котором написана
система, – Perl.
n Минимизация хранимой информации за счет того,
что идентичные файлы из разных резервных копий хранятся только в одном
экземпляре.
n Настраиваемая степень сжатия данных.
n Поддержка работы по протоколам smb/ssh/rsh/nfs.
n Мощный CGI-интерфейс, позволяющий управлять
сервером по сети посредством веб-браузера.
n Поддержка архивирования информации с машин,
получающих настройки сети через DHCP, разрешая имена при помощи nmblookup.
n Гибкие настройки планирования архивации данных.
n Оповещения о выполненных действиях
администратора и пользователей посредством электронной почты.
n Поддержка клиентов, работающих под управлением Linux,
Freenix, Solaris Win95, Win98, Win2000 и WinXP. Сервер тестировался на Linux, Freenix
и Solaris.
n Очень подробная документация.
В данной статье я хочу обобщить свой опыт
установки, настройки и эксплуатации этой системы, а также поделиться решением
нескольких проблем, которые возникли в процессе установки.
Я проверял работу 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, Solaris либо другая
UNIX-подобная система. Во-вторых, необходимо предусмотреть наличие вместительного
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, но в данном случае я предпочел пойти по пути «наименьшего
сопротивления» и воспользоваться уже существующими у меня наработками.
Соответственно должен быть настроен и веб-сервер,
у которого в качестве кодировки по умолчанию должно быть указано 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-интерфейса при
стандартной установке системы, когда веб-сервер запускается из-под специально
выделенного для этих целей пользователя (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, указывающего на иконки, а именно
расположение относительно корневого каталога веб-сервера. Обратите внимание,
что путь должен начинаться со слэша. В нашем случае он будет выглядеть как /BackupPC.
Настройка BackupPC
Как и большинство программ, работающих под управлением UNIX-подобных систем,
настройка и изменение параметров сервера BackupPC производится правкой
конфигурационных файлов. К чему мы и приступим.
Интересующий нас файл config.pl
расположен в подкаталоге /conf, который был создан внутри директории,
предназначенной для хранения данных. На самом деле этот файл очень хорошо
документирован, поэтому я пройдусь лишь по основным параметрам. Config.pl
состоит из четырех групп настроечных значений, содержащих:
n основные параметры сервера;
n описание тех машин, информацию с которых нужно
архивировать;
n указания, как часто это надо делать;
n параметры CGI-интерфейса.
n $Conf{WakeupShedule} – как часто сервис должен
проверять, были ли изменения на подлежащих архивированию компьютерах, и в
случае изменений выполнять резервирование данных. По умолчанию – каждый час,
кроме полуночи.
n $Conf{MaxBackups} – максимальное число
одновременных процессов архивирования.
n $Conf{DfMaxUsagePct} – при заполнении
указанного в процентах объема диска, заданного для хранения данных,
архивирование не производится. По умолчанию 95%.
n $Conf{SmbShareName} – имя расшаренного ресурса
на Windows-машине. По умолчанию – это диск C:\, который в Win2000/XP доступен
через SMB по имени «С$».
n $Conf{SmbShareUserName} – имя пользователя на
Windows-машине, которому даны права на ресурс общего доступа .
n $Conf{SmbSharePasswd} – его пароль. В настоящее
время он приводится в открытом виде. В следующих версиях планируется хранение в
зашифрованном виде.
n $Conf{FullPeriod} – период в днях между полными
резервными копиями.
n $Conf{IncrPeriod} – период в днях между
инкрементальными резервными копиями.
n $Conf{FullKeepCnt} – максимальное число
сохраняемых полных резервных копий. $Conf{BackupFilesOnly} – список директорий,
которые необходимо архивировать. По умолчанию – не определено.
n $Conf{BackupFilesExclude} – то же самое, но для
директорий-исключений.
n $Conf{ArchivePar} – при использовании
par2cmdline процент избыточных данных в архиве. По умолчанию – 0.
n $Conf{EmailAdminUserName} – почтовый адрес
администратора, на который будут приходить сообщения об ошибках и
предупреждениях.
n $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 $Cgi->header();»
и замените ее на:
«print $Cgi->header(-charset=>”koi8-r”);»
Ну а во-вторых, в процедуре EscHTML
закомментируйте предпоследнюю строчку, стоящую перед «return»:
«$s=~s{([^[:print:]])}{sprintf(“&\#x%02X;”,
ord($1));}eg;»
Теперь все имена будут отображаться в нормальном
виде, используя кодировку KOI-8.
Кроме того, рекомендую обратить внимание на папку
/lib/BackupPC/Lang, которая находится в директории с исполнимыми файлами. Там
находятся файлы с локализованными сообщениями, выводимыми CGI-интерфейсом. В
комплект поставки русский язык не входит, но вам ничего не мешает создать свой
файл по образцу существующих, переведя сообщения с английского на русский язык.
Часть этой работы я уже проделал для своего «внутреннего» использования.
Перевод, не претендующий на полноту и высокое литературное качество, я выложил
на своем сайте. Скачать архив можно по ссылке http://www.markelov.net/program/bpcrus.tgz.
Интерфейс
Интерфейс системы достаточно прост и нагляден. Обратившись по адресу:
http://имя_сервера/cgi-bin/BackupPC_ Admin, вы попадаете в окно с общей
информацией по серверу BackupPC. В левой части окна присутствует меню с
ссылками на более подробную информацию по работе всего сервера, а также
выпадающее меню с возможностью выбора информации по конкретному архивируемому
хосту.
Зайдя в меню по конкретному хосту, можно получить
всю информацию касательно выполненных операций резервирования данных,
просмотреть списки архивных копий, а также «провалиться» в любой из них и
восстановить файлы и каталоги полностью или частично. Также имеется возможность
скопировать любой из файлов средствами браузера на ту машину, с которой вы
зашли на сервер.
Заходя в инкрементальную резервную копию, вы
видите полную картину сохраненной файловой системы, то есть полную резервную
копию плюс наложенную на нее инкрементальную копию. А для всех измененных
файлов можно просмотреть список версий и восстановить нужную из них.
Кроме того, все операции по работе с архивами
можно выполнять из командной строки, но я не вижу смысла приводить здесь
синтаксис команд, поскольку он подробно описан в документации, идущей в составе
дистрибутива.
В конце мне хотелось бы поблагодарить Павла Шера
за ряд ценных советов, которые мне пригодились при написании статьи.


