Как использовать Rsync для синхронизации локальных и удаленных файлов и каталогов

Rsync — это программное обеспечение с открытым исходным кодом, которое можно использовать для синхронизации файлов и папок с локального компьютера на удаленный и наоборот.

Примечательной особенностью Rsync является возможность передавать зашифрованные файлы с помощью SSH и SSL. Кроме того, передача файлов выполняется в одном потоке, в отличие от других аналогичных программ, которые создают отдельный поток для каждой передачи файлов. Это увеличивает скорость и устраняет дополнительные задержки, которые становятся проблемой при передаче большого количества небольших файлов.

Rsync — очень гибкий инструмент сетевой синхронизации. Из-за его повсеместного распространения в Linux и Unix-подобных системах и популярности в качестве инструмента для создания системных сценариев, он по умолчанию включен в большинство дистрибутивов Linux.

Для Microsoft Windows существует cwRsync — это бесплатный дистрибутив утилиты Rsync, оптимизированный для быстрой и простой установки в Microsoft Windows. Вы можете скачать cwRsync здесь, однако мы рекомендуем проверить наличие последней версии здесь. После того, как вы скачали этот установочный файл, запустите его. Вам следует выбрать значения по умолчанию, которые предлагает вам установщик, включая путь установки по умолчанию: C:\Program Files\cwRsync
НАСТОЯТЕЛЬНО рекомендуем установить программу в папку по умолчанию.

 

Особенности Rsync:

  • Возможность поддерживать синхронизацию всего дерева каталогов;
  • Можно сохранять символические ссылки, жесткие ссылки,  владельцев и права файла, метаданные и время создания;
  • Не требует особых привилегий;
  • Передача файлов одним потоком;
  • Поддержка RSH, SSH в качестве транспорта;
  • Поддержка анонимного Rsync.

По умолчанию Rsync использует транспорт SSH. Если вы хотите использовать транспорт Rsync, вам необходимо выполнить минимальную настройку сервера Rsync. Это позволит вам не только синхронизировать файлы с удаленным сервером, но и получать их с него.

Сначала создайте файл конфигурации со следующим содержимым:

vi /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
[share]
path = /tmp/share/
hosts allow = 123.123.133.133
hosts deny = *
list = true
uid = root
gid = root
read only = false

Здесь мы устанавливаем путь к нашей папке для синхронизации, разрешаем доступ к серверу только с IP-адреса (123.123.133.133) и запрещаем все остальные подключения. Параметры uid и gid указывают пользователя и группу, из которой будет запускаться демон. Лучше не использовать root, а указать пользователя nobody и дать ему права на папку, в которой будут синхронизироваться каталоги Rsync.

Настройка Rsync-сервера завершена, осталось сохранить файл, запустить Rsync-сервер и добавить его в автозагрузку:

systemctl start rsync

systemctl enable rsync
Синтаксис Rsync

Базовый синтаксис Rsync очень прост и работает аналогично ssh, scp и cp.

rsync опции источник назначение

Источник и место назначения могут быть удаленным или локальным каталогом. Например, ssh, rsync, сервер samba или локальный каталог. Опции определяют дополнительные параметры для Rsync.

Опции Rsync

Теперь давайте кратко рассмотрим опции Rsync. Здесь перечислены не все варианты. Подробнее со всеми опциями можно ознакомится на странице мануала Rsync:

-v – Выводить подробную информацию о процессе копирования;
-q – Минимум информации;
-c – Проверка контрольных сумм для файлов;
-a – Режим архивирования, когда сохраняются все атрибуты оригинальных файлов;
-R – Относительные пути;
-b – Создание резервной копии;
-u – Не перезаписывать более новые файлы;
-l – Копировать символьные ссылки;
-h –Выводить числа в удобочитаемом формате;
-L – Копировать содержимое ссылок;
-H – Копировать жесткие ссылки;
-W –Копировать файлы целиком;
-p – Сохранять права для файлов;
-g – Сохранять группу;
-t – Сохранять время модификации;
-x – Работать только в этой файловой системе;
-e – Использовать другой транспорт, например, ssh;
-z – Сжимать файлы перед передачей;
—delete – Удалять файлы которых нет в источнике;
—exclude – Исключить файлы по шаблону;
—include – Включить файлы по шаблону;
—recursive – Перебирать директории рекурсивно;
—no-recursive – Отключить рекурсию;
—progress – Выводить прогресс передачи файла;
—stat – Показать статистику передачи;
—version – Версия утилиты.

Копировать и синхронизировать файлы локально

Rsync позволяет синхронизировать файлы и папки на одном компьютере. Давайте сначала рассмотрим использование Rsync для локальной синхронизации файла:

rsync -zvh anyfile /mnt/backup_dir/

Указав параметр —progress, вы можете увидеть, сколько процентов уже скопировано и сколько еще осталось:

rsync -zvh --progress anyfile /mnt/backup_dir/
Синхронизация папок на локальном компьютере

Синхронизировать папки с помощью Rsync так же просто, как синхронизировать файлы:

rsync -zvh /home/user/documents /mnt/backup_dir/

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

rsync -azvh /home/user/documents /mnt/backup_dir/
Синхронизация с удаленным сервером

Синхронизировать файлы с удаленным сервером не намного сложнее. Скопируем папку с локальными документами на удаленный сервер:

rsync -avz /home/user/documents/ [email protected]:/home/

По умолчанию Rsync пытается использовать транспорт SSH. Если вы хотите использовать ранее созданный сервер Rsync, вам необходимо указать его явно:

rsync -avz /home/user/documents/ rsync://123.123.133.133:/home/

Точно так же вы можете синхронизировать файлы с помощью Rsync с удаленного сервера:

rsync -avz [email protected]:/home/ /home/user/documents/
Синхронизация файлов по ssh

Параметр -e используется для установки протокола подключения. При использовании SSH все передаваемые данные шифруются и передаются по защищенному каналу, так что никто не может их перехватить. Чтобы использовать SSH, вам необходимо знать пароль пользователя в системе.

Синхронизация файлов с удаленного сервера по ssh будет выглядеть так:

rsync -avzhe ssh [email protected]:/home/ /home/user/documents/

Если вы используете другой порт для ssh, вы можете указать его этим методом:

rsync -avzhe "ssh -p 22" [email protected]:/home/ /home/user/documents/
Синхронизация некоторых файлов в Rsync

Параметры —include и —exclude позволяют указать, какие файлы синхронизировать, а какие исключить. Опции работают не только с файлами, но и с каталогами.

Например, скопируем все файлы, начинающиеся с буквы S:

rsync -avze ssh --include 'S*' --exclude '*' /home/user/documents/ [email protected]:/home/
Удаление при синхронизации

Во время синхронизации вы можете удалять файлы, которых нет на компьютере, с которого идет синхронизация Rsync, для этого используйте параметр —delete.

Например:

rsync -avz --delete [email protected]:/home/ /home/user/documents/

Если перед выполнением этой команды вы создадите файл в папке, которой нет на удаленном сервере, то он будет удален.

Удаление исходных файлов

После завершения синхронизации с удаленным сервером можно удалить исходные файлы:

rsync --remove-source-files -zvh [email protected]:/home/anyfile.tar /home/user/documents/

Таким образом, файл anyfile.tar будет удален после завершения копирования в папку /home/user/documents/ .

Режим моделирования Rsync

Если вы новичок и еще не использовали Rsync, возможно, вам захочется посмотреть, как работает команда, фактически ничего не делая в файловой системе. Для этого есть опция —dry-run. Команда выводит в терминал только все выполненные действия, не внося никаких реальных изменений:

rsync --dry-run --remove-source-files -zvh [email protected]:/home/anyfile.tar /home/user/documents/
Ограничение скорости передачи

Вы можете ограничить использование пропускной способности сети с помощью параметра —bwlimit:

rsync --bwlimit=100 -avzhe ssh [email protected]:/home/ /home/user/documents/

Rsync синхронизирует только части файла, если вы хотите синхронизировать весь файл, используйте параметр -W:

rsync -zvhW [email protected]:/home/anyfile.tar /home/user/documents/anyfile.tar
Теги: