Резервное копирование при помощи rsync

Недавно возникла задача делать резервное копирование почтовой базы.

Обычными средствами типа cp и dd получается некрасиво. По этому выбор пал на rsync.

Тем более что с его помощью можно копировать только новые и измененные файлы, то есть делать инкрементальный бекап.

Начальные условия

Есть два сервера:

  1. bcup-server — сервер, на котором будут храниться резервные копии почтовой базы

  2. mail-server — почтовый сервер, с которого будут копироваться файлы.

 

Решение

На bcup-server создаем скрипт /root/bcup.sh со следующим содержимым:

#!/bin/bash
rsync -rc -t -e ssh --rsync-path=/usr/bin/rsync --temp-dir=/tmp user@mail-server:/var/mail /mnt/share/mail

На сервере mail-server создаем пользователя user у которого есть права на чтение файлов почтовой базы.

Теперь на сервере bcup-server нужно настроить доступ на mail-server для пользователя user без пароля с авторизацией по ключу.

 

Для автоматицации резервного копирования на сервере bcup-server добавляем в /etc/crontab строку:

8 1 * * * root /root/bcup.sh

Резервное копирование теперь настроено и будет выполняться наждые сутки в 1:08.

 

Теперь поясню использованные параметры rsync:

-e ssh — использовать SSH протокол в качестве транспорта

-t — сохранять время модификации;

-r — рекурсивно

-c — для принятия решения о том пересылать файл или нет используется контрольная сумма

–rsync-path=/usr/bin/rsync — путь до rsync на машине-источнике

–temp-dir=/tmp - каталог для временных файлов во время пересылки

user@mail-server:/var/mail — пользователь@хост:Путь-к-каталогу-источнику

/mnt/share/mail — путь к каталогу, где будут храниться резервные копии.

При указании путей есть небольшая тонкость. Если в конце пути источника поставить слеш, то скопируется содержимое указанного каталога, если же слеш опустить — то в резервном хранилище появится каталог источник вмечте со всем содержимым.