Backup в Linux: rsync-клиент






В предыдущей статье мы рассмотрели в общих чертах возможности rsync, а также его настройку в режиме демона. Пока что я не буду рассматривать rsync через ssh-туннель, поскольку в моём примере шифрование не требуется по той причине, что рабочие станции находятся в пределах локальной сети по отношению к серверу, а синхронизация между серверами выполняется через защищённый VPN-туннель. Надеюсь, в будущих статьях у меня будет возможность это сделать. Итак, поехали.

В предыдущей статье мы закончили тем, что настроили сервер, а также попробовали получить список модулей, подключившись rsync-клиентом. Давайте теперь попробуем скопировать что-нибудь, чтобы убедиться что всё работает так, как нам нужно. В общем случае rsync вызывается командой:

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-демон:

rsync -auv /home/user/doc rsync://s1/backups

После запуска вы увидите нечто подобное:

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ать» всё, что вашей душе угодно, лишь места на сервере хватило!




Backup в Linux: rsync-клиент: 12 комментариев

  1. попробовал сделать как у вас. Получил на клиенте:

    @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]

    Получить список модулей прав хватает

  2. Харон, а что в логах на стороне сервера? Как вариант, проверьте наличие прав доступа к каталогу модуля у пользователя, которого вы указали в параметре конфигурации модуля uid.

  3. Помогите пожалуйста, не могу разобраться, что делаю не правильно.

    Есть две виртуальные машинки с 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

  4. Митя, «hosts dany» — синтаксическая ошибка в конфиге. У вас вообще rsync-сервер поднимается?

  5. Да, поднимается. Все делал как написано в мануале по настройке сервера www.ashep.org/2010/backup...em-rsync-server/.

    Я не понимаю синтаксиса команды, когда запускаешь синхронизацию. Делал по этому мануалу, не получилось.

  6. Митя, как он может у вас подниматься с синтаксической ошибкой в конфиге? Что показывает вывод `ps aux|grep rsync` на сервере?

  7. вот вывод:

    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

    я подправил синтаксическую ошибку которую ты нашёл

  8. Митя, отлично, теперь далее. Вы сообщаете rsync-клиенту следующий URL: rsync://server/backups. 'server' у вас резолвится? Он прописан в /etc/hosts клиентской машины?

  9. все разобрался) теперь все работает) надо этот момент было учесть в мануале ;-) , а то вот попадаются такие вот неподкованные в мат части.

  10. Митя, тогда мне в каждом мануале придётся учитывать тонны инфы :) Матчасть — это тематика отдельных книг, но никак не коротких заметок.

  11. 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

Комментарии запрещены.