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






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

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

Как видно, обязательным параметром для 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 представляет разницу наличие или отсутствие завершающего слеша при указании источника. Если вы посмотрите сейчас на содержимое каталога /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

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