Резервное копирование серверов и рабочих станций при помощи BackupPC

Все системные администраторы делятся на две категории — те кто не делает резервное копирование и те, кто уже делает.

Необходимость резервного копирования понятна практически всем администраторам. Но, к сожалению, весьма часто случается так, что не получается объяснить необходимость закупки коммерческого программного обеспечения для этих целей.

Конечно существует большое количество коммерческих решений для создания резервных копий чего угодно: как отдельных файлов, так и конкретно почтовых баз, структуры AD или даже всего сервера сразу. Так же есть немало и свободных и бесплатных решений для этого. Например Bacula, Amanda, dar, BackUpPC и другие.

Наиболее мощным и универсальным решением является, конечно, Bacula. Но она же и наиболее сложная в настройках. Для большинства ситуаций будет достаточно использовать BackUpPC

BackupPC — это свободное ПО (распространяется под GNU General Public License) для резервного копирования данных с управлением через веб-интерфейс. Кроссплатформенный программный сервер может работать на любом сервере под управлением GNU/Linux, Solaris или UNIX. Нет необходимости в клиентской части, так как сервер сам по себе является клиентом для нескольких протоколов, которые поддерживаются родными службами клиентской ОС.

Например, BackupPC является SMB‐клиентом, что может использоваться для резервного копирования совместно используемых данных в сетевых папках на компьютерах с Microsoft Windows. Подобный сервер BackupPC может быть установлен за межсетевым экраном, выполняющим функции сетевой трансляции адресов (NAT), когда Windows‐компьютер имеет публичный IP адрес. Так как это не рекомендуется из за большого количества SMB трафика, то более удобным является использование веб-серверов, поддерживающих SSH и возможность работы с tar и rsync, что позволяет серверу BackupPC находиться в подсети отделённой от веб‐серверов демилитаризованной зоной.

 

Установка системы резервного копирования BackUpPC

 

Так как управление BackupPC производится через веб-интерфейс, то вначале необходимо установить веб-сервер:

# apt-get install apache2

   

Далее установим сам сервер резервного копирования и пакет smbclient для работы с windows-компьютерами:

# apt-get install backuppc smbclient

   

После окончания установки его веб-интервейс будет доступен по адресу http://ip-addr/backuppc

Для входа в систему будем использовать логин backuppc и пароль password.

   

Для того, что бы установить пароль для этого пользователя следует ввести команду:

# htpasswd /etc/backuppc/htpasswd backuppc

   

Добавить нового пользователя (к примеру admin) и задать ему пароль можно командой:

# htpasswd /etc/backuppc/htpasswd admin

   

После первого логина в систему мы увидим окно, в котором прописана только одна клиентская машина для резервного копирования — localhost

 

 

Файлы и пути, используемые в BackupPC

Основной файл настроек данной системы резервного копирования — /etc/backuppc/config.pl

В этом же каталоге находится файл hosts, в котором прописаны все клиентские компьютеры с которых будет производится резервное копирование.

Так же в этом каталоге должны находиться файлы с расширением pl, которые называются по имени клиентских компьютеров. Именно в них и будут храниться все индивидуальные настройки резервного копирования.

В каталоге /var/lib/backuppc/pc будут храниться резервные копии всех серверов. По этому необходимо или предусмотреть достаточное количество дискового пространства по этому пути, или переопределить его в файле /etc/backuppc/config.pl

Еще один важный путь — /usr/share/backuppc/lib/BackupPC/Lang

Именно там хранятся все файлы локализации интерфейса. Перевод есть на английский, чешский, испанский и некоторые другие языки. К сожалению ни украинский, ни русский переводы туда не входят.

 

Исправление ошибок после установки программы

В связи с тем, что в Linux многие программы связаны между собой, после очередного обновления модулей perl при запуске BacupPC появляются ошибки:

Use of qw(...) as parentheses is deprecated at /usr/share/backuppc/lib/BackupPC/Storage/Text.pm line 302. 
Use of qw(...) as parentheses is deprecated at /usr/share/backuppc/lib/BackupPC/Lib.pm line 1425.

Для их исправления нужно поправить содержимое двух файлов.

Открываем файл /usr/share/backuppc/lib/BackupPC/Storage/Text.pm

и меняем строчку

foreach my $param qw(BackupFilesOnly BackupFilesExclude) {

на

foreach my $param (qw(BackupFilesOnly BackupFilesExclude)) {

  

И второй файл. Открываем /usr/share/backuppc/lib/BackupPC/Lib.pm

и меняем строчку

foreach my $param qw(BackupFilesOnly BackupFilesExclude) {

на

foreach my $param (qw(BackupFilesOnly BackupFilesExclude)) {

  

После этого перезапуск сервиса backuppc будет проходить без ошибок.

  

   

Конфигурирование клиентского Linux-хоста

Добавим в конец файла /etc/backuppc/hosts строчку:

linuxsrv1 0 backuppc

  

Первое поле, это понятное нам имя хоста, второе — включение (1) или отключение (0) расписания резервного копирования, и третье — пользователь, который имеет доступ к управлению данным хостом.

Далее создадим файл конфигурации этого сервера:

#nano /etc/backuppc/linuxsrv1.pl

  

И заполним его следующим образом:

$Conf{BackupsDisable} = '1';

$Conf{ClientNameAlias} = '192.168.0.27';

$Conf{BackupFilesOnly} = {

'*' => [

'/etc'

]

};

$Conf{XferMethod} = 'rsync';

$Conf{RsyncClientPath} = '/usr/bin/rsync';

$Conf{RsyncClientCmd} = '$sshPath -q -x -l bcuser $host sudo $rsyncPath $argList+';

$Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l bcuser $host sudo $rsyncPath $argList+';

$Conf{RsyncShareName} = [

'/'

];

$Conf{RsyncCsumCacheVerifyProb} = '0.01';

$Conf{XferLogLevel} = '9';

$Conf{ClientCharsetLegacy} = 'utf8';

$Conf{BackupFilesExclude} = {

'/' => [

'/etc/ssh'

]

};

  

В этом файле мы указываем адрес клиентского сервера

$Conf{ClientNameAlias} = '192.168.0.27';

  

Путь копирования

$Conf{BackupFilesOnly} = { '*' => [ '/etc' ]};

  

Путь исключений

$Conf{BackupFilesExclude} = { '/' => [ '/etc/ssh' ]};

  

И тип соединения

$Conf{XferMethod} = 'rsync';

  

Далее нужно сделать возможность нашему серверу резервного копирования авторизоваться на удаленной системе по протоколу ssh не по паролю, а ко ключу.

Создаем ключ для пользователя backuppc, с правами которого и работает наш сервер резервного копирования

# sudo -u backuppc ssh-keygen -t rsa

Запрошеный пароль на ключ оставляем пустым.

  

Далее на клиентском сервере создаем пользователя bcuser и в настройках sudo (#visudo ) прописываем:

bcuser ALL=(ALL) NOPASSWD:/usr/bin/rsync

  

То есть этому пользователю мы даем возможность без пароля запускать rsync с повышенными правами.

Теперь возвращаемся на наш сервер резервного копирования. Ключ для авторизации по ssh мы уже создали и теперь нужно передать его на клиентский сервер.

# sudo -u backuppc ssh-copy-id -i /var/lib/backuppc/.ssh/id_rsa.pub Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.

  

где 192.168.0.27 — IP-адрес клиентского Linux-сервера

Пробуем соединиться с авторизацией по ключу:

# sudo -u backuppc ssh Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.

  

Если соединение прошло успешно, значит на этом настройка завершена.

Перезапустим наш сервер резервного копирования:

#service backuppc restart

  

Открыв его веб-интерфейс и перейдя на закладку «Host Summary» в списке клиентских серверов мы увиди наш только что описаный сервер linuxsrv1

 


Зайдем внутрь этого хоста и нажмем кнопку «Start Full Backup»

 


Через некоторое (в нашем случае около 15-20 секунд) время, перейдя на закладку «Browse backups» Мы сможем увидеть все дерево резервной копии с подчиненного сервера.

 

 

 

Если внимательно посмотреть на список вложенных каталогов, то мы увидим, что каталога /etc/ssh там нет, что говорит о том, что списки исключения работают корректно.

  

  

Конфигурирование клиентского Windows-хоста

Резервное копирование Windows-машин производится по протоколу SMB.

Для добавления новохо клиентского хоста в систему добавим в конец файла /etc/backuppc/hosts строчку:

winxp 0 backuppc

 

И создадим файл /etc/backuppc/winxp.pl с таким содержимым:

$Conf{ClientNameAlias} = '192.168.0.12';

$Conf{BackupFilesOnly} = {

'C$' => ['/Documents and Settings/User/Мои документы'],

};

$Conf{XferMethod} = 'smb';

$Conf{SmbShareName} = [ 'C$' ];

$Conf{SmbShareUserName} = 'STUDY\\admin';

# Password should be configured on client

$Conf{SmbSharePasswd} = 'admin';

$Conf{PingMaxMsec} = '900';

$Conf{SmbClientFullCmd} = '$smbClientPath \\\\$host\\$shareName $I_option -U $userName -E -d 1 -c tarmode\\ full -Tc$$

$Conf{SmbClientIncrCmd} = '$smbClientPath \\\\$host\\$shareName $I_option -U $userName -E -d 1 -c tarmode\\ full -TcN$

$Conf{SmbClientRestoreCmd} = '$smbClientPath \\\\$host\\$shareName $I_option -U $userName -E -d 1 -c tarmode\\ full -$

$Conf{ClientCharset} = 'cp1252';

  

Принцип создания файла такой же самый, как и для Linux-сервера.

  

  

Создание расписания автоматического копирования.

Настройка расписания резервного копировния производится в свойствах конкретного хоста на закладке «Shedule»


Тут имеются следующие поля настроек:

Полная резервная копия:

FullPeriod — минимальное время в днях между полными бекапами

FullKeepCnt — сколько полных бекапов необходимо хранить

FullKeepCntMin — минимальное количество хранимых полных бекапов

FullAgeMax — максимальный возраст хранимого полного бекапа

   

Инкрементальная резервная копия:

IncrPeriod — минимальное время в днях между инкрементальными бекапами

IncrKeepCnt — сколько инкрементальных бекапов необходимо хранить

IncrKeepCntMin — минимальное количество хранимых инкрементальных бекапов

IncrAgeMax — максимальный возраст хранимого инкрементального бекапа

IncrLevels — уровень инкрементального бекапа

IncrFill — использовать в системе хард-линки, что бы инкрементальный бекап выглядел полным.

  

Вот, собственно, и все основные настройки. Ставьте, настраивайте, пользуйтесь.