Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> rsync

Backup с помощью rsync

Автор: fr33man.


Решил настроить backup. Первая мысль была: ночью сжимать все в один большой архив и отправлять по сети с помощью scp, например.. Но этот
вариант не устраивал меня как минимум по двум причинам:

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

Прогуглив этот вопрос нашел замечательную утилиту rsync ее и стал мучить. ))

Итак, работать все будет следующим образом: на компьютере, который мы будем бэкапить, ставим и настраиваем rsync сервер, на backup сервере настраиваем
rsync клиент. После этого синхронизиркем данные на backup сервере с данными на других серверах. Для примера, имя бэкап сервера будет: backup,
а имя машины с которой мы будем синхронизировать данные — mail:
mail# uname -rsn
FreeBSD mail.teachers 6.1-RELEASE
mail#


/root/> uname -rsn
FreeBSD backup 6.1-RELEASE-p6
/root/>

Сначала настроим rsync сервер. Идем в порты ставить:
mail# cd /usr/ports/
mail# make search name='rsync'
... skipped ...

Port:   rsync-2.6.8_2
Path:   /usr/ports/net/rsync
Info:   A network file distribution/synchronization utility
Maint:  pav@FreeBSD.org
B-deps:
R-deps:
WWW:    http://rsync.samba.org/

... skipped ...

mail# cd /usr/ports/net/rsync/
mail# make install clean
mail# rehash
mail# 

Рихтуем rsyncd.conf:
mail# cd /usr/local/etc/
mail# ls -la | grep rsync
-r--r--r--   1 root   wheel    766 Oct  5 21:21 rsyncd.conf
-r--r--r--   1 root   wheel    766 Oct  5 21:21 rsyncd.conf.sample
mail#

rsyncd.conf:

# Файл приветствия
motd file = /etc/new_motd

# Лог файл
log file = /var/log/rsyncd.log

# Писать в лог о скачивание файлов
transfer logging = true

# Описание секции ETC
[etc]
		# Путь к директории
        path = /etc/
		
		# Под каким uid'ом работать
        uid = root
		
		# Только чтение
        read only = yes
		
		# Разрешать просмотр файлов
        list = yes
		
		# Комментарий
        comment = ETC directory
		
		# Хосты, которым разрешен доступ
        hosts allow = 192.168.1.249
		
		# Разрешенные пользователи
        auth users = backup
		
		# Путь к файлу с паролями
        secrets file = /usr/local/etc/rsyncd.scrt

# Далее может идти описание других секций(по аналогии с samba и шарами)

Создаем необходимые файлы и директории

mail# cat > /etc/new_motd
HELLO FROM RSYNC

mail# touch /var/log/rsyncd.log
mail# chmod 0600 /var/log/rsyncd.log
mail# chown root:wheel /var/log/rsyncd.log
mail# cat > /usr/local/etc/rsyncd.scrt
backup:123456
mail# chown root:wheel /usr/local/etc/rsyncd.scrt
mail# chmod 0600 /usr/local/etc/rsyncd.scrt
mail# mv /usr/local/etc/rc.d/rsyncd /usr/local/etc/rc.d/rsyncd.sh
mail# echo rsyncd_enable=\"YES\" >> /etc/rc.conf
mail# /usr/local/etc/rc.d/rsyncd.sh start
Starting rsyncd.
mail# ps ax | grep rsyn
97920  ??  Ss     0:00.00 /usr/local/bin/rsync --daemon
97922  p0  S+     0:00.01 grep rsyn
mail# 

Теперь перейдем к настройке клинта, точнее настраивать там ничего не надо... Нужно просто проверить как все работает:

/root/> cd /usr/ports/net/rsync/
/usr/ports/net/rsync/> make install clean
... skipped ...
/usr/ports/net/rsync/> rehash
/usr/ports/net/rsync/>

Проверяем работу сервера:


/root/> rsync mail::
HELLO FROM RSYNC


etc             ETC directory
var             VAR directory
/root/>

Теперь пробуем авторизоваться:

/usr/ports/net/rsync/> rsync backup@mail::etc
HELLO FROM RSYNC


Password:
@ERROR: auth failed on module etc
rsync error: error starting client-server protocol (code 5)
 at main.c(1296) [receiver=2.6.8]
/usr/ports/net/rsync/> rsync backup@mail::etc
HELLO FROM RSYNC


Password:
drwxr-xr-x        2048 2006/10/05 21:27:03 .
lrwxrwxrwx          12 2006/09/15 21:24:09 aliases
-rw-r--r--       16384 2006/09/17 14:27:21 aliases.db
-rw-r--r--         209 2006/05/07 08:00:23 amd.map
-rw-r--r--        1234 2006/05/07 08:00:23 apmd.conf
-rw-r--r--         231 2006/05/07 08:00:23 auth.conf
-rw-r--r--         737 2006/05/07 08:00:23 crontab
-rw-r--r--         108 2006/05/07 08:00:23 csh.cshrc
-rw-r--r--         481 2006/05/07 08:00:23 csh.login
-rw-r--r--         110 2006/05/07 08:00:23 csh.logout
... skipped ...

/usr/ports/net/rsync/>

В первый раз я ввел неверный пароль. Все конечно хорошо, но если запускать бэкап по крону, то как вводить пароль? Для этого можно
указать password-file:
/usr/ports/net/rsync/> cat > /usr/local/etc/rsyncd.scrt
123456
/usr/ports/net/rsync/> chown root:wheel /usr/local/etc/rsyncd.scrt
/usr/ports/net/rsync/> chmod 0600 /usr/local/etc/rsyncd.scrt
/usr/ports/net/rsync/> rsync --password-file=/usr/local/etc/rsyncd.scrt \
? backup@mail::etc
HELLO FROM RSYNC


drwxr-xr-x        2048 2006/10/05 21:27:03 .
lrwxrwxrwx          12 2006/09/15 21:24:09 aliases
-rw-r--r--       16384 2006/09/17 14:27:21 aliases.db
-rw-r--r--         209 2006/05/07 08:00:23 amd.map
-rw-r--r--        1234 2006/05/07 08:00:23 apmd.conf
-rw-r--r--         231 2006/05/07 08:00:23 auth.conf
-rw-r--r--         737 2006/05/07 08:00:23 crontab
-rw-r--r--         108 2006/05/07 08:00:23 csh.cshrc
-rw-r--r--         481 2006/05/07 08:00:23 csh.login
-rw-r--r--         110 2006/05/07 08:00:23 csh.logout
... skipped ...
/usr/ports/net/rsync/>

На сервере, в логах будет примерно следующее:

mail# tail -3 /var/log/rsyncd.log
2006/10/05 21:53:21 [98220] connect from backup.teachers (192.168.1.249)
2006/10/05 21:53:21 [98220] rsync on etc from backup@backup.teachers (192.168.1.249)
2006/10/05 21:53:21 [98220] sent 1807 bytes  received 99 bytes  total size 411665
mail#

На backup сервере создадим директорию, где будут храниться забэкаппенные файлы и начинаем backup:

/root/> df -alh | grep backup
/dev/ad1s1d    144G    2.0K    133G     0%    /backup
/root/> mkdir -p /backup/mail.teachers/etc/
/root/> chmod -R 0700 /backup/mail.teachers/
/root/> ls -la /backup/mail.teachers/
total 6
drwx------  3 root  wheel  512 Oct  5 22:01 .
drwxr-xr-x  3 root  wheel  512 Oct  5 22:01 ..
drwx------  2 root  wheel  512 Oct  5 22:01 etc
/root/> rsync --update --recursive \
? --password-file=/usr/local/etc/rsyncd.scrt backup@mail::etc \
? /backup/mail.teachers/etc/
HELLO FROM RSYNC


skipping non-regular file "aliases"
skipping non-regular file "namedb"
skipping non-regular file "rmt"
skipping non-regular file "termcap"
/root/>

Ссылочки rsync качать не стал. ;). Смотрим, что у нас получилось:

/root/> ls -la /backup/mail.teachers/etc/
total 528
drwx------  18 root  wheel   2048 Oct  5 22:03 .
drwx------   3 root  wheel    512 Oct  5 22:01 ..
drwxr-xr-x   2 root  wheel    512 Oct  5 22:03 X11
-rw-r--r--   1 root  wheel  16384 Oct  5 22:03 aliases.db
-rw-r--r--   1 root  wheel    209 Oct  5 22:03 amd.map
-rw-r--r--   1 root  wheel   1234 Oct  5 22:03 apmd.conf
-rw-r--r--   1 root  wheel    231 Oct  5 22:03 auth.conf
drwxr-xr-x   2 root  wheel    512 Oct  5 22:03 bluetooth
-rw-r--r--   1 root  wheel    737 Oct  5 22:03 crontab
-rw-r--r--   1 root  wheel    108 Oct  5 22:03 csh.cshrc
-rw-r--r--   1 root  wheel    481 Oct  5 22:03 csh.login
-rw-r--r--   1 root  wheel    110 Oct  5 22:03 csh.logout
... skipped ...
/root/>

На сервере:
mail# tail -3 /var/log/rsyncd.log
2006/10/05 22:00:05 [98379] send backup.teachers 
[192.168.1.249] etc (backup) ssh/sshd_config 3042
2006/10/05 22:00:05 [98379] send backup.teachers 
[192.168.1.249] etc (backup) ssl/openssl.cnf 7869
2006/10/05 22:00:05 [98379] sent 1286010 bytes  
received 7581 bytes  total size 1264419
mail#

Как видите, у нас передалась вся директория etc и все поддиректории. Давайте добавим в файл /etc/hosts пробел и попробуем сделать бэкап:

mail# echo "" >> /etc/hosts
mail#

Теперь бэкапим:

/root/> rsync --update --verbose --recursive \ 
? --password-file=/usr/local/etc/rsyncd.scrt \
? backup@mail::etc /backup/mail.teachers/etc/
HELLO FROM RSYNC


receiving file list ... done
skipping non-regular file "aliases"
skipping non-regular file "namedb"
skipping non-regular file "rmt"
skipping non-regular file "termcap"
hosts

sent 126 bytes  received 6567 bytes  4462.00 bytes/sec
total size is 1264421  speedup is 188.92
/root/>

Как видите, у нас передался только файл hosts, потому что изменился только он.

На этом вроде все.... Если найду еще интересные подробности выложу. ))



размещено: 2006-11-08,
последнее обновление: 2006-11-08,
автор: fr33man


Сергей, 2007-08-17 в 13:24:50

А почему ты не использовал dump? Там есть инкрементные дампы, что как раз и делает то, что ты хочешь

Cat, 2007-08-20 в 16:01:08

Хорошая статья, не увидел правда описание ключей, но нащёл их, поискав в инете на одном блоге тоже статейку по rsync
думаю хорошее дополнение :-)

gmn, 2008-02-19 в 17:14:19

и права на файл с паролем должны быть 600 - иначе "auth failed".

zg, 2008-02-20 в 10:03:37

кхм... бэкап вроде как предполагает откат до некоторой точки, а тут как я понял, в папке /backup/mail.teachers/etc/ будет харниться просто актуальная версия конфигов... хотя конечно, если их тарить, то будут бэкапы :)

А что будет если файл конфига удалится или повредится?

kozlov_ao, 2008-09-25 в 12:10:51

нужно добавить параметр --delete-after. А то при удалении файлов на сервере, на бекапе они все равно остануться.. но это нужно наверное тока именно для синхронизации :)

sys_err, 2009-09-22 в 23:35:30

В статье не освещена к сожалению тема работы rsync в chroot-е.

b10s, 2010-03-30 в 11:16:10

очепятка тут "После этого синхронизиркем данные на backup сервере.."

Статья на 5 для быстрого старта) Инфа об алгоритме протокола www.openbsd.ru/docs/rsync.html

Kalabi, 2010-04-27 в 16:29:52

Был найден странный баг - при попытке сихронить Maidir папки, бывало замирало на определенных письмах. -z - компрессия на лету ( -z, --compress              compress file data during the transfer
) проблемы вроде решило :)

Роман, 2011-05-06 в 10:07:26

Отличная статья. Вот статья про альтернативный вариант резервного копирования сайта только тестирование проходило под Linux Debian, может кому-то будет интересно:
здесь

Андрей, 2011-08-24 в 21:59:52

Стоит подробнее изложить rsync ssh. Самая детальная и толковая статья для старта. Автору честь и слава.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0666 секунд
Из них PHP: 37%; SQL: 63%; Число SQL-запросов: 77 шт.
Исходный размер: 45423; Сжатая: 8583