Утилита rsync

Rsync - утилита для Unix-систем, которая используется для синхронизации файлов и папок из одного месторасположения в другое. Rsync была создана как замена для rcp и scp.

Преимущества rsync:

  • Скорость: Первоначально rsync реплицирует все содержимое между источником и местом назначения. Далее rsync передает только изменившиеся блоки или биты в место назначения.

  • Безопасность: rsync включает в себя шифрование данных при передаче с использованием протокола SSH

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

Синтаксис:

$ rsync options source destination

Где source — источник, destination - место назначения, могут быть как локальными, так и удаленными. В случае использования с удаленными объектами указывается логин, имя сервера и путь.

1. Синхронизация двух директорий на одном сервере

Для синхронизации двух директорий на одной машине используем ключи -zvr:

z - включаем сжатие

v - детализация

r - режим рекурсии.

$ rsync -zvr /home/user/server_test/ /home/user/test

sending incremental file list

created directory /home/user/test

./

client.pl

test.pl

 

sent 565 bytes received 100 bytes 1,330.00 bytes/sec

total size is 520 speedup is 0.78

Сравнив копии увидим, что rsync изменил метки времени и группу владельца во время синхронизации

2. Сохранение временных меток в процессе синхронизации

Для этого используется опция -a, которая показывает режим архива и включает в себя:

- рекурсивный режим

- сохраняет символические ссылки

- сохраняет разрешения (permissions)

- сохраняет временные метки

- сохраняет владельца и группу

3. Синхронизация файлов с локальной машины на удаленную

$rsync -rvz /home/user/test/ Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. :/home/admin/test2/

Здесь необходимо указать имя пользователя, ip-aдрес сервера и путь.

В данном примере мы указали ключ -r вместо -a, т.к. у пользователя user нет прав на создание файлов от имени рута (а синхронизируем мы именно такие файлы).

4. Синхронизация с удаленной машиной имеющий нестандартный порт ssh

Для этого понадобиться ключ -е с указание номера порта, например -e='ssh -p 4439'

$rsync -e='ssh -p 4439' -rvz /home/user/test/ Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. :/home/admin/test2/

5. Не перезаписывать измененные данные в месте назначения (destination)

Для этого используем опцию -u. В примере файл "readme" изменен на удаленной стороне:

$rsync -avzu Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. :/home/admin/test2 /home/user/test

6. Синхронизация только дерева каталогов (без файлов)

Используем опцию - d для синхронизации дерева каталогов, без синхронизации файлов находящихся внутри каталогов (файлы с корневой директории все равно синхронизируются)

7. Вывод процесса синхронизации на экран или файл

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

Для этого импользуется опция --progress

8. Удаление файлов в точке назначения.

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

Для этого используется опция —delete

$rsync -avz --delete Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. :/home/admin/test2/ /home/user/test

9. Не создавать новые файлы на конечном сервере

Если хотим обновлять (синхронизировать) только сущестующие файлы, не копируя вновь созданные, то для этого понадобится опция --existing

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

$rsync -avz --existing Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. :/home/admin/test2/ /home/user/test

10. Просмотр разницы между источником и приемником

Для этого используется опция -i

$rsync -avzi Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. :/home/admin/test2/ /home/user/test

> - показывает что файл был передан (синхронизирован).

f - показывает что это файл.

d - директория

s - показывает изменение размера.

t - показывает изменение штампа времени.

o - изменение владельца

g - изменение группы.

11. Включение/исключение файлов/директорий с использованием шаблонов

Rsync позволяет задавать шаблоны для отбора нужных файлов и директорий.

Скопируем все файлы начинающиеся с буквы "n"

$rsync -avz --include 'n*' --exclude '*' Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. :/home/admin/test2/ /home/user/test

--include - это то, что мы включаем в синхронизацию

--exclude - это то, что мы исключаем

12. Коды ошибок

0 - Успешно

1 - Синтаксическая ошибка или ошибка использования

2 - Несовместимость протоколов

3 - Ошибки выбора входных/выходных файлов и каталогов

4 - Запрошенное действие не поддерживается: была сделана попытка работы с 64-битными файлами на платформе, которая их не поддерживает; или указан параметр, который поддерживается только клиентом и не поддерживается сервером.

5 - Ошибка при попытке начать работать по протоколу клиент-сервер

10 - Ошибка сокета ввода/вывода

11 - Ошибка ввода/вывода файла

12 - Ошибка в потоке данных rsync-протокола

13 - Ошибки при диагностике

14 - Ошибка в IPC-коде

20 - Получены сигналы или SIGUSR1, или SIGINT

21 - Вызов waitpid() возвращает ошибку

22 - Error allocating core memory buffers

23 - Незавершенная передача из-за ошибки

24 - Незавершенная передача из-за пропадания исходного файла

30 - Время ожидания при передаче/приеме данных

Обновлено 06.04.2016 21:37

unix-way