Требовалось организовать резервное копирование с рабочих компьютеров и серверов компании.
Бэкап-систему было решено построить на базе ОС Linux Debian и приложения BackupPC.
BackupPC — это свободное ПО (распространяется под GNU General Public License) для резервного копирования данных с управлением через веб-интерфейс. Кроссплатформенный программный сервер может работать на любом сервере под управлением GNU/Linux, Solaris или UNIX. Нет необходимости в клиентской части, так как сервер сам по себе является клиентом для нескольких протоколов, которые поддерживаются родными службами клиентской ОС.
Установка BackupPC
Установка в Debian предельно проста, никаких затруднений она не должна вызвать.
aptitude install backuppc
Web-интерфейс
После установки получить доступ к управлению BackupPC можно получить через web-интерфейс (по умолчанию: http://192.168.0.1/backuppc). Логин — backuppc, пароль — генерируется во время установки, при желании его можно сменить:
htpasswd /etc/backuppc/htpasswd user
Настройка хранилища
По умолчанию все бэкапы будут складываться в каталог /var/backuppc/, если этот каталог вас не устраивает, то изменить его через web-интерфейс не получится, это делается в файле/etc/backuppc/config.pl ищем следующую строку:
$Conf{TopDir} = '/var/lib/backuppc';
и меняем /var/backuppc на нужный путь, я заменил на /backup:
$Conf{TopDir} = '/backup';
.
Добавление и настройка клиентов
Далее добавляем клиентский компьютер, с которого будем делать бэкап: Server — Edit host — Add.
Выбираем dhcp, если клиент использует динамический ip-адрес. В поле User вводится имя пользователя (этот пользователь должен быть в /etc/backuppc/htpasswd), который сможет просматривать бэкапы, изменять настройки этого хоста.
Переходим к редактированию конфигурации клиента. Для этого выбираем его в списке, жмем Edit config и переходим на вкладку Xref.
XrefMethod — через какой протокол будут вытягиваться данные с клиента. BackupPC поддерживает SMB и RSYNC. RSYNC я доверяю больше, поэтому использовал его в том числе и для windows машин (На клиентскую машину потребуется установить Cygwin-rsync).
Выбираем rsyncd.
ClientCharsetLegacy — кодировка на клиентской машине, для windows rsync — UTF-8, для unix rsync — оставляем по умолчанию.
RsyncShareName — имя расшаренного каталога.
RsyncdUserName, RsyncdPasswd — логин и пароль, указанные на клиентской машине.
Во вкладке Schedule задается информация о количестве полных и инкрементальных бэкапов.
FullPeriod – период создания полного бэкапа (задается в сутках), по умолчанию 6.97 (раз в неделю).
FullKeepCnt — количество полных бэкапов, которые будут храненится.
IncrPeriod — период создания инкрементального бэкапа, по умолчанию 0.97 (раз в сутки).
Секция BlackOuts
BackupsDisable —
0 — бэкапы производятся в автоматическом и ручном режиме,
1 — бэкапы могут производится только в ручном режиме,
2 — бэкапы отключены.
BlackoutPeriods — период, в который НЕ делать бэкапы. Этот параметр будет игнорироватся пока количество бэкапов хоста не будет больше, чем задано в параметре BlackoutGoodCnt.
Настройки rsyncd на windows клиенте
rsyncd.conf
use chroot = false
strict modes = false
# с какого ip можно подключаться
hosts allow = 192.168.0.1
log file = rsyncd.log
uid = 0
gid = 0
# имя расшаренного каталога
[c]
# путь
path = /cygdrive/c
read only = true
transfer logging = no
# какому пользователю можно подключаться
auth users = backup
# файл с логинами, паролями
secrets file = rsyncd.secret
rsyncd.secret
# логин:пароль
user:password
В принципе, это минимальная и достаточная настройка для работы бэкап-системы.
Удаленное хранение
Хранить бэкапы только на одном сервере и в одном помещении не очень правильно, поэтому был запущен второй сервер с системой BackupPC и установлен в другое помещение. Связь между серверами — Интернет-канал.
На втором бэкап-сервере у вас должны быть заведены те же хосты, что и на первом. Настройки полностью идентичны первому, кроме одного пункта: в секции BlackOuts параметрBackupsDisable должен быть равен 2, т. е. бэкапы отключены. Это делается для того чтобы второй сервер через Интернет-канал не вытягивал самостоятельно данные с клиентских машин и не забивал весь интернет-канал в рабочее время. Синхронизацию мы будем делать отдельным скриптом с rsync.
На первом сервере
На первом сервере потребуется установить rsync
aptitude install rsync
После установки редактируем файл /etc/rsyncd.conf
log file=/var/log/rsyncd
pid file=/var/run/rsyncd.pid
socket options = SO_KEEPALIVE
hosts allow = 192.168.0.2
secrets file = /etc/rsyncd.secret
[backup_pc]
path = /backup/pc
use chroot = yes
max connections=1
lock file = /var/lock/rsyncd
read only = yes
list = yes
auth users = user
Создаем файл /etc/rsyncd.secret
# логин:пароль
user:password
На втором сервере
Также устанавливаем rsync
aptitude install rsync
Создаем скрипт /usr/sbin/fetch_backup.sh
#!/bin/bash
echo $(date "+%Y.%m.%d %H:%M") Begin synhronization >> /var/log/synhroniz.log
rsync -uroght --delete-after --password-file=/etc/rsync.secret [email protected]::backup_pc /backup/pc
echo $(date "+%Y.%m.%d %H:%M") End synhronization >> /var/log/synhroniz.log
chown -R backuppc /backup/pc/host1
chgrp -R backuppc /backup/pc/host1
Данный скрипт пишет в файл /var/log/synhroniz.log информацию о начале и окончании синхронизации и запускает rsync.
Создаем файл с паролем /etc/rsync.secret
# пароль
password
Добавляем скрипт fetch_backup.sh в crontab:
# Synhronization with backup server (192.168.0.1)
15 2 * * * root /usr/sbin/fetch_backup.sh
Таким образом, каждую ночь в 2 часа 15 минут, у нас начинается синхронизация второго бэкап-сервера с первым. После окончания синхронизации мы можем скачать бэкап через web-интерфейс с любого сервера.