В предыдущей статье мы рассмотрели в общих чертах возможности rsync, а также его настройку в режиме демона. Пока что я не буду рассматривать rsync через ssh-туннель, поскольку в моём примере шифрование не требуется по той причине, что рабочие станции находятся в пределах локальной сети по отношению к серверу, а синхронизация между серверами выполняется через защищённый VPN-туннель. Надеюсь, в будущих статьях у меня будет возможность это сделать. Итак, поехали.
В предыдущей статье мы закончили тем, что настроили сервер, а также попробовали получить список модулей, подключившись rsync-клиентом. Давайте теперь попробуем скопировать что-нибудь, чтобы убедиться что всё работает так, как нам нужно. В общем случае rsync вызывается командой:
1 |
rsync [ОПЦИИ] ИСТОЧНИК 1 [ИСТОЧНИК N] [ПОЛУЧАТЕЛЬ] |
Как видно, обязательным параметром для rsync является ИСТОЧНИК, которых может быть более одного. А вот ПОЛУЧАТЕЛЬ может и вовсе отсутствовать, в этом случае rsync все лишь выведет список файлов источника.
Источником может быть как локальная машина, так и удалённая. Тоже самое и с получателем. То есть, меняя местами ИСТОЧНИК и ПОЛУЧАТЕЛЬ вы определяете в каком направлении будет происходить синхронизация. В документации по rsync вариант, когда копируются файлы с локальной системы на удалённую, называется «push». В случае же, когда файлы копируют с удалённой системы на локальную, называется «pull». В моих примерах я использую только push. Сделано это для того, чтобы на всех машинах использовался абсолютно одинаковые способ и направление копирования, что даст возможность создать универсальный bash-скрипт, который в будущем можно будет не заморачиваясь размещать на новых хостах в сети и включать в общую схему резервного копирования. Думаю, это хорошая практика — «сделать и забыть». Конечно, делать нужно качественно и продуманно, а забыть лишь после того, как всё задокументировано. :-)
Набор опций rsync достаточно велик, и я не буду рассматривать их все. Как всегда отсылаю вас к документации. Отмечу лишь то, что выполнения функции резервного копирования нам понадобится всего две опции.
Поскольку rsync разрабатывалась как программа для синхронизации файлов, что по сути и есть резервным копированием, разработчики позаботились, чтобы пользователям не нужно было запоминать туеву хучу опций и «упаковали» всё необходимое для резервного копирования в одну короткую опцию: -a. Передав rsync эту опцию вы получите:
- рекурсивное копирование каталогов;
- копирование символических ссылок «как есть», то есть rsync не будет следовать по ним, обращаясь к файлам;
- сохранение прав доступа к файлам;
- сохранение штампов времени модификации файлов;
- сохранение владельца и группы файла;
- сохранение файлов устройств (опция будет работать только для суперпользователя);
- сохранение специальных файлов.
Также мы воспользуемся опцией -u для того, чтобы пропускать файлы на получателе, имеющие более позднюю дату модификации, чем в источнике.
И ещё, на мой взгляд, не помешает опция -v, заставляющая rsync выводить подробную информацию о копируемых файлах. Это достаточно удобно, если вы будете запускать копирование планировщиком, а вывод команды получать на e-mail, контролируя таким образом корректность работы программы в случае необходимости.
Итак, источником синхронизации у нас будут файлы локальной системы P1 из каталога /home/user/doc, а получателем будет модуль backups удалённой системы S1, на которой уже настроен и запущен rsync-демон:
1 |
rsync -auv /home/user/doc rsync://s1/backups |
После запуска вы увидите нечто подобное:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
sending incremental file list doc/ doc/cap-bottom.png doc/cap-top.png doc/common.css doc/common.js doc/help-faq.png doc/icon-info.png doc/logo.png doc/print.css doc/projection.css doc/screen.css doc/urchin.js sent 57798 bytes received 221 bytes 23207.60 bytes/sec total size is 57086 speedup is 0.98 |
Сразу же обращаю ваше внимание на тот момент, что для rsync представляет разницу наличие или отсутствие завершающего слеша при указании источника. Если вы посмотрите сейчас на содержимое каталога /var/backups/my_network сервера S1, то увидите, что все файла были скопированы в каталог doc. Однако, если бы вы, указывая источник, поставили завершающий слеш, то каталог doc не был бы создан и все файлы были бы скопированы непосредственно в каталог /var/backups/my_network. Обязательно учтите этот момент, «чтобы потом не было мучительно больно».
К этому моменту, если всё у вас получилось, настройку rsync-сервера и клиента можно считать завершённой и вы можете «rsyncать» всё, что вашей душе угодно, лишь места на сервере хватило!
попробовал сделать как у вас. Получил на клиенте:
@ERROR: access denied to mysql from db.server (13.13.13.13)
rsync error: error starting client-server protocol (code 5) at main.c (1296) [sender=2.6.8]
Получить список модулей прав хватает
Харон, а что в логах на стороне сервера? Как вариант, проверьте наличие прав доступа к каталогу модуля у пользователя, которого вы указали в параметре конфигурации модуля uid.
Помогите пожалуйста, не могу разобраться, что делаю не правильно.
Есть две виртуальные машинки с xubuntu, настроил между ними сеть (обе пингуются). На одной настроил сервер rsync. Содержание файла /etc/rsyncd.conf
[backups]
comment = for backups
path = /home/alex/backup
use chroot = true
uid = alex
gid = alex
log file = /home/alex/backup/backups.log
read only = false
write only = false
transfer logging = false
hosts allow = 192.168.1.3
hosts dany = *
Когда вбиваю команду, чтобы синхронизировать файлы rsync -auv /home/user/doc rsync://server/backups, пишет следующие
rsync: getaddrinfo: server 873: Name or service not known
rsync error: error in socket IO (code 10) at clientserver.c (122) [sender=3.0.9]
P.S host name тачки на которую кидаю инфу — server
Митя, «hosts dany» — синтаксическая ошибка в конфиге. У вас вообще rsync-сервер поднимается?
Да, поднимается. Все делал как написано в мануале по настройке сервера www.ashep.org/2010/backup...em-rsync-server/.
Я не понимаю синтаксиса команды, когда запускаешь синхронизацию. Делал по этому мануалу, не получилось.
Митя, как он может у вас подниматься с синтаксической ошибкой в конфиге? Что показывает вывод `ps aux|grep rsync` на сервере?
вот вывод:
root 813 0.0 0.0 2672 868 ? S 09:19 0:00 /usr/bin/rsync --no-detach --daemon --config /etc/rsyncd.conf
alex 3429 0.0 0.0 5616 828 pts/1 S+ 11:06 0:00 grep --color=auto rsync
я подправил синтаксическую ошибку которую ты нашёл
Митя, отлично, теперь далее. Вы сообщаете rsync-клиенту следующий URL: rsync://server/backups. 'server' у вас резолвится? Он прописан в /etc/hosts клиентской машины?
все разобрался) теперь все работает) надо этот момент было учесть в мануале ;-) , а то вот попадаются такие вот неподкованные в мат части.
Митя, тогда мне в каждом мануале придётся учитывать тонны инфы :) Матчасть — это тематика отдельных книг, но никак не коротких заметок.
В принципе да, в общем спасибо за помощь.
C QNAP на сервер freebsd копирует файлы нормально
а вот подключится с QNAP на freebsd не могу 2012/08/23 18:59:26 [27353] auth failed on module backup from unknown (46.xxx.194.xxx): password mismatch
логин передает правильно, а вот пароль упорно нет. Причем передает неправильно как с вебинтерфейса так и из ssh
freebsd на freebsd подключается нормально...
В техподдержке сказали что они не гарантируют работу rsync с другими устройствами кроме QNAP
В итоге получается нельзя настроить (((
Может кто-то может проверить репликацию так, чтобы копировало файлы с freebsd на QNAP