MyTetra Share
Делитесь знаниями!
Rsync
Время создания: 31.08.2017 20:53
Раздел: Linux - Пакеты - rsync
Запись: xintrea/mytetra_db_mcold/master/base/1499670498036df993or/text.html на raw.githubusercontent.com

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

Давайте сначала рассмотрим примечательные особенности Rsync:

Возможность поддерживать синхронизацию целых деревьев каталогов

Можно сохранять символические ссылки, жесткие ссылки,  владельцев и права файла, метаданные и время создания.

Не требует особых привилегий

Передача файлов одним потоком

Поддержка RSH, SSH в качестве транспорта

Поддержка анонимного Rsync

Синтаксис Rsync

Мы не будем подробно останавливаться на установке этой утилиты в системе. Она очень популярна, поэтому вы можете установить ее с помощью своего пакетного менеджера из официальных репозиториев. В Ubuntu команда установки будет выглядеть вот так:

$ sudo apt-get install rsync

А теперь, уже по традиции подобных статей, рассмотрим синтаксис команды rsync:

$ rsync опции источник приемник

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

Опции Rsync

Теперь давайте кратко рассмотрим параметры rsync. Здесь перечислены не все опции. Для более подробной информации смотрите man rsync:

-v - Выводить подробную информацию о процессе копирования

-q - Минимум информации

-c - Проверка контрольных сумм для файлов

-a - Режим архивирования

-R - относительные пути

-b - создание резервной копии

-u - не перезаписывать более новые файлы

-l - копировать символьные ссылки

-L - копировать содержимое ссылок

-H - копировать жесткие ссылки

-p - сохранять права для файлов

-g - сохранять группу

-t - сохранять время модификации

-x - работать только в этой файловой системе

-e - использовать другой транспорт

-z - сжимать файлы перед передачей

--delete - удалять файлы которых нет в источнике

--exclude - исключить файлы по шаблону

--recursive - перебирать директории рекурсивно

--no-recursive - отключить рекурсию

--progress - выводить прогресс передачи файла

--stat - показать статистику передачи

--version - версия утилиты

Настройка сервера Rsync

Как вы понимаете, нельзя просто так взять и закинуть на первую попавшуюся машину файлы без установки на нее специального программного обеспечения. На удаленной машине должен быть установлен и настроен RSYNC, SSH, Samba или FTP сервер, с помощью которого Rsync сможет авторизоваться на машине и передавать туда файлы.

Рассмотрим минимальную настройку сервера rsync, для того чтобы могло быть выполнено rsync копирование файлов. Он позволит нам не только синхронизировать файлы на машину, но и получать и от туда.

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

$ sudo vi /etc/rsyncd.conf

[share]

path = /tmp/share/
hosts allow = 192.168.1.*
hosts deny = *
list = true
uid = root
gid = root
read only = false

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

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

$ sudo service rsyncd start

$ sudo service rsyncd enable

Примеры синхронизации Rsync

Дальше давайте рассмотрим использование rsync, примеры синхронизации.

Копирование и синхронизация файлов на локальном компьютере

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

$ rsync -zvh file /tmp/backups/

Синхронизация папок на локальной машине

Синхронизация папок rsync выполняется так же просто, как и файлов:

$ rsync -avzh /home/user/documents /tmp/backups/

Синхронизация с удаленным сервером

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

$ rsync -avz documents/ root@192.168.0.101:/home/

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

$ rsync -avz root@192.168.0.101:/home/ documents/ 

Адрес удаленного сервера записывается в таком формате:

имя_пользователя@адрес_машины:порт/папка/на/удаленной_машине

Порт указывать не обязательно, тогда rsync синхронизация папок будет выполняться на стандартном порту.

Синхронизация файлов по SSH

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

Для использования SSH вам нужно знать пароль пользователя в системе.

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

$ rsync -avzhe ssh root@192.168.0.101:/root/install.log /tmp/

А теперь передадим данные на тот же сервер:

$ rsync -avzhe ssh backup.tar root@192.168.0.101:/backups/

Просмотр прогресса при синхронизации

Для просмотра прогресса копирования файла с одной машины на другую используется опция progress:

$ rsync -avzhe ssh --progress /home/user/documents root@192.168.0.101:/root/documents

Синхронизация не всех файлов в rsync

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

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

$ rsync -avze ssh --include 'R*' --exclude '*' root@192.168.0.101:/root/documents/ /root/documents

0Удаление при синхронизации


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

Например:

$ rsync -avz --delete root@192.168.0.101:/documents/ /tmp/documents/

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

Максимальный размер файлов

Вы можете указать максимальный размер файлов, которые нужно синхронизировать. Для этого используется опция --max-size. Например, будем синхронизировать только файлы меньше 200 килобайт:

$ rsync -avzhe ssh --max-size='200k' /user/documents/ root@192.168.0.100:/root/documents

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

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

$ rsync --remove-source-files -zvh backup.tar /tmp/backups/

Таким образом, файл backup.tar будет удален после завершения копирования в папку /tmp/backups.

Режим симуляции rsync

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

$ rsync --dry-run --remove-source-files -zvh backup.tar /tmp/backups/

Ограничить скорость передачи

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

$ rsync --bwlimit=100 -avzhe ssh /user/home/documents/ root@192.168.0.101:/root/documents/

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

$ rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar

Автоматическая синхронизация папок rsync

Можно расписать автоматическую синхронизацию с помощью cron. Но в случае доступа к серверу по SSH необходимо будет создать ключ и загрузить его на сервер, чтобы аутентификация проходила без запроса пароля.

Создаем ключ:

$ ssh-keygen -t rsa

Загружаем ключ на сервер к с которым собираемся синхронизироваться:

$ ssh-copy-id -i /home/sk/.ssh/id_rsa.pub sk@192.168.1.250

Теперь можем переходить к настройке расписания cron. Будем запускать синхронизацию каждый день:

$ crontab -e

$ 00 05 * * * rsync -azvr /home/user/Downloads/ 192.168.1.101::share

 
MyTetra Share v.0.59
Яндекс индекс цитирования