Резервное копирование файлов при помощи rsync и rsyncd

Администрирование > Разное

Пусть есть 2 файловых сервера на Unix. Нам нужно наладить резервное копирование файлов с одного на другой. Можно каждый раз запаковывать файлы на одном и передавать архив по FTP на другой сервер, но это не наш путь. Мы воспользуемся утилитой rsync (и демоном rsyncd).

rsync - програма, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика, используя кодировку данных при необходимости. Важным отличием rsync от многих других программ/протоколов является то, что зеркалирование осуществляется одним потоком в каждом направлении (а не по одному или несколько потоков на каждый файл). rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию.

rsyncd - демон, реализующий протокол rsync. По умолчанию использует TCP порт 873.

Мы будем копировать данные с  сервера files.example.com (IP 192.168.1.1) на сервер  backup.example.com (IP 192.168.1.2). Резервироваться будут папка /home и папка /var первого сервера в соответственно папки /backup/home и /backup/var второго сервера. Переодичность - раз в сутки в 23-00.

На сервере files.example.com (IP 192.168.1.1) настраиваем rsync в режиме демона:

1. Устанавливаем пакеты rsync и xinetd:
apt-get install rsync xinetd

2. Создаем необходимый конфиг для xinetd:
cat > /etc/xinetd.d/rsync

service rsync
{
     disable = no
     socket_type     = stream
     wait            = no
     user            = root
     server          = /usr/bin/rsync
     server_args     = --daemon
     log_on_failure  += USERID
}

3. Перезапускаем xinetd:
/etc/init.d/xinetd restart

4. Создаем конфиг для rsyncd:
cat > /etc/rsyncd.conf

#включаем логирование (потом можно выключить)
log file = /var/log/rsyncd.log
transfer logging = true

#название шары:
[home]
#путь к папке на сервере которую будем бекапить:
path = /home
#пользователь из подкоторого будем бекапить:
uid = root
#включаем режим только чтение:
read only = yes
#разрешить просмотр файлов:
list = yes
comment =  User homes directory
#список IP-адресов, с которых разрешен доступ к шаре (через пробел):
hosts allow = 192.168.1.2
#список пользователей rsyncd, которым разрешен доступ к шаре (через пробел)
auth users = backupuser1
#путь к файлу с именами пользователей и паролями:
secrets file = /etc/rsyncd.scrt

[var]
path = /var
uid = root
read only = yes
list = yes
comment =  var directory
hosts allow = 192.168.1.2
auth users = backupuser1
secrets file = /etc/rsyncd.scrt

5. Создаем файл с именами пользователями и паролями. Даем ему нужные права::
touch /etc/rsyncd.scrt
chmod 600 /etc/rsyncd.scrt cat > /etc/rsyncd.scrt
backupuser1:password1

Теперь перейдем к серверу backup.example.com (IP 192.168.1.2). Напишем скрипт, который будет по расписанию забирать с первого сервера файлы:

1. Создаем необходимые папки:
mkdir /backup
mkdir /backup/home
mkdir /backup/var

2. Напишем скрипт копирования при помощи rsync:
cat > /backup/backupscript

#!bin/sh
rsync --update --recursive --delete -a -A --perms --times --copy-links \
--password-file=/etc/rsync.scrt backupuser1@192.168.1.1::home /backup/home > /dev/null 2>&1
rsync --update --recursive --delete -a -A --perms --times --copy-links \
--password-file=/etc/rsync.scrt backupuser1@192.168.1.1::var /backup/var > /dev/null 2>&1

Описание ключей:


-v, --verbose
-u, --update
-r, --recursive
-o, --owner
-g, --group
-h, --human-readable
-t, --times
-p, --perms
-l, --copy-links
--delete
--delete-after

--password-file
-a
-D
-z
--exclude path
отображение отладочной информации
пропускать обновление файлов, которые новее исходных
рекурсивный обход каталогов
сохранить владельца (только под root)
сохранить группу
вывод цифр в читаемом виде (Кб, Мб, Гб)
сохранить дату изменения
сохранить права доступа
копировать симлинки как симлинки
удалить из каталога назначения файлы отсутствующие в исходном каталоге
удалить после синхронизации из каталога назначения файлы,
отсутствующие в исходном каталоге
путь, где находится файл с паролем
архивный режим. синоним для ключей -rlptgoD
копировать файлы устройств
упаковывать поток с помощью gzip
исключить из синхронизации файлы и пути соответствующие маске

3. Дадим ему права на выполнение:
chmod +x /backup/backupscript

4. Пропишем его в cron. Пусть резервное копирование запускается каждый день в 23-01:
cat > /etc/cron.d/backupscrpt 01 23 * * * root /backup/backupscript

5. Перезапустим cron для применения изменений:
/etc/init.d/cron restart

6. Создадим файл паролей и дадим ему нужные права:
touch /etc/rsync.scrt
chmod 600 /etc/rsync.scrt cat > /etc/rsync.scrt
password1  

Все. Теперь на backup-сервере вы будете иметь полную копию каталогов /home и /var основного сервера.

Комментарии
]]> ipv6 ready Kiev LUGLinux4MeНостальгияЛичный сайт skeletora ]]>