2006/08/17

Backup with rdiff-backup

Подискутировав и поинтересовавшись на форумах, решил продолжать использующийся механизм резервного копирования данных на backup-сервер, при котором сам backup-сервер инициирует копирование с серверов.
Лог:
1. Генерируем пару ключей на backup-сервере для пользователя root.
backup# ssh-keygen -t dsa -b 2048 -N ""
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
ea:41:ed:8d:76:32:9f:1b:f5:41:68:3d:e0:10:a0:5d root@backup

2. Копируем содержимое файла /root/.ssh/id_dsa.pub с backup-сервера в файл /root/.ssh/authorized_keys на те сервера, которые нуждаются в резервном копировании. В соответствие с форматом файла authorized_keys добавляем в него необходимые опции: from="backup". После тестирования ssh-соединения можно добавить необязательные, но предоставляющие дополнительную безопасность, опции: no-X11-forwarding, no-port-forwarding, no-pty, no-agent-forwarding.

3. На backup-сервере и всех серверах, учавствующих в резервном копировании необходимо установить утилиту rdiff-backup

  • Debian
apt-get install rdiff-backup
  • FreeBSD
cd /usr/ports/sysutils/rdiff-backup
make && make install
  • from sources (необходимо наличие библиотек и header-файлов для librsync, python)
wget http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-VER.tar.gz
tar zxf rdiff-backup-VER.tar.gz
cd rdiff-backup-VER
python setup.py install

4. В соответствие с форматом backup-скрипта(приведен ниже), составляем list-файлы, содержащие описание директорий для резервного копирования.

#!/bin/sh
# $1 - list
StartTime=`date +%H:%M:%S`;
cat $1 | while read args
do
# format of entries in list-file
# $1 - remote host
# $2 - remote dir
# $3 - local dir
# $4 - pattern (copy dirs, which contains files with that pattern. For example 'log|tar')
set $args
if [ "$1" = "#" ]
then
continue;
fi
echo "$1::$2 > $3"
rdiff-backup --create-full-path --exclude-symbolic-links --exclude-sockets --exclude-special-files --exclude-fifos --exclude-device-files --no-hard-links --include-regexp ".*($4)" --exclude $2 $1::$2 $3
done
EndTime=`date +%H:%M:%S`;
echo "$StartTime - $EndTime";

5. Автоматизируем действия с помощью cron, periodic.


2 comments:

Ivan said...

С другой стороны, есть Bacula. Она конечно менее простая в установке, но тем не менее более логичная в устройстве.

Roman Sozinov said...

to ivan:
Так и есть - смотреть тут.
Но в отличие от Bacula, для Rdiff-backup не нужно дополнительных сервисов держать (bacula-fd,sd). Раньше меня почему-то заботило (наличие лишних сервисов), теперь расслабился и полностью перешел на Bacula.