Синхронизация файлов с помощью rsync по ssh Linux/FreeBSD

Для копирования файлов по сети используется много инструментов. Наиболее распространенный из них — ftp, многие используют и scp. Для синхронизации данных используется rsync.

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

Помимо указанных выше преимуществ, у rsync есть возможность передачи данных по защищенному соединению — ssh, это, несомненно, плюс к безопасности этой программы. Также, rsync сначала записывает передаваемую информацию во временный файл, чтобы исключить потерю информации в случае непредвиденных обстоятельств(отключение интернета или электричества).

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

rsync [ОПЦИИ] [ПОЛЬЗОВАТЕЛЬ@]СЕРВЕР:ИСТОЧНИК… [ПОЛУЧАТЕЛЬ]
Pull (копирование файлов с удаленной системы на локальную)
rsync [ОПЦИИ] ИСТОЧНИК 1 [ИСТОЧНИК N] [ПОЛЬЗОВАТЕЛЬ@]СЕРВЕР:ПОЛУЧАТЕЛЬ
Push (копирование файлов с локальной машины на удаленную)

В официальной документации по rsync «Push» — это копирование файлов с локальной машины на удалённую, а «Pull» — с удалённой на локальную.
Обязательным параметром является «ИСТОЧНИК», их может быть несколько.

Основные ключи:

-a,  режим архивирования, включает ключи -rlptgoD;
-r,  каталоги копируются рекурсивно;
-l,  копировать символические ссылки «как есть», то есть rsync не будет следовать по ним, обращаясь к файлам;
-p,  сохранение прав доступа к файлам;
-t,  сохранение времени модификации файлов;
-g, -o, сохранение владельца и группы файла;
-D,  сохранение файлов устройств и специальных файлов;
-u,  режим обновления, пропускаются файлы на получателе, имеющие более позднюю дату модификации, чем в источнике;
-v,  выводит имена копируемых файлов;
-q,  не выводит сообщения об ошибках;
-z,  включение режим сжатия;
-P,  отображение прогресса при копировании;
-с,  проверка файлов по контрольной сумме, а по размеру и дате модификации. Дополнительная нагрузка на процессор, сильно увеличивает время синхронизации;
—ignore-errors,  продолжение копирования и удаления даже после появления ошибок;
—max-delete,  максимальное число удаляемых за один раз файлов и каталогов;
—files-from=FILE,  задается список файлов и директорий для копирования в файле;
-e ssh,  использование при копировании ssh;
—bwlimit=KBPS,  ограничение скорости копирования.


Примеры:

# rsync -zavP /backup/file1/ /backup/file2/ user@192.168.0.1:/backup
Скопируется на сервер 192.168.0.1 содержимое папок /backup/file1/ /backup/file2/ в папку backup

# rsync -zavP /backup/file1 /backup/file2 user@192.168.0.1:/backup
В этом примере уже скопируются сами папки

Как ограничить скорость передачи файлов? Нужно поставить опцию —bwlimit :

# rsync -zavP —bwlimit=100 /backup/file1/ user@192.168.0.1:/backup

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

# rsync -сzavP /backup/file1/ user@192.168.0.1:/backup

Как скопировать файлы с удаленной машины на локальную?

# rsync -zavP user@192.168.0.1:/backup /backup/file1/

Как исключить файл или директорию при копировании?

# rsync -azVP —exclude /temp/ /home/data/ user@192.168.0.1:/backup
Исключаем директорию /temp

Как использовать нестандартный порт ssh при копировании rsync?

# rsync -zavP ‘-e ssh -p 12345’ /var/lib/ root@192.168.0.1:/backup

6 Replies to “Синхронизация файлов с помощью rsync по ssh Linux/FreeBSD”

  1. «# rsync -zavP /backup/file1/ /backup/file2/ user@192.168.0.1:/backup
    Скопируется на сервер 192.168.0.1 содержимое папок /backup/file1/ /backup/file2/ в папку backup»
    и
    «# rsync -zavP /backup/file1/ /backup/file2/ user@192.168.0.1:/backup
    В этом примере уже скопируются сами папки»
    Не вижу отличий в команде. Возможно во второй команде завершающий слэш в источнике лишний?

Добавить комментарий для MishLen Отменить ответ

Ваш адрес email не будет опубликован.