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/testsending 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. Синхронизация файлов с локальной машины на удаленную
Здесь необходимо указать имя пользователя, ip-aдрес сервера и путь.
В данном примере мы указали ключ -r вместо -a, т.к. у пользователя user нет прав на создание
файлов от имени рута (а синхронизируем мы именно такие файлы).
4. Синхронизация с удаленной машиной имеющий нестандартный порт ssh
Для этого понадобиться ключ -е с указание номера порта, например -e='ssh -p 4439'
5. Не перезаписывать измененные данные в месте назначения (destination)
Для этого используем опцию -u. В примере файл "readme" изменен на удаленной стороне:
6. Синхронизация только дерева каталогов (без файлов) Используем опцию - d для синхронизации дерева каталогов, без синхронизации файлов находящихся
внутри каталогов (файлы с корневой директории все равно синхронизируются)
7. Вывод процесса синхронизации на экран или файл Очень полезно знать прогресс выполнения, то есть сколько файлов скопировалось или в каком месте
процесс сейчас находится Для этого импользуется опция --progress
8. Удаление файлов в точке назначения. Если файл не присутствует на источнике, но присутствует на конечной машине (куда мы копируем),
можно удалять такие файлы в процессе синхронизации. Для этого используется опция —delete
9. Не создавать новые файлы на конечном сервере Если хотим обновлять (синхронизировать) только сущестующие файлы, не копируя вновь созданные,
то для этого понадобится опция --existing Для примера, создаем на источнике файл newfile.txt и производим синхронизацию:
> - показывает что файл был передан (синхронизирован). f - показывает что это файл. d - директория s - показывает изменение размера. t - показывает изменение штампа времени. o - изменение владельца g - изменение группы.
11. Включение/исключение файлов/директорий с использованием шаблонов Rsync позволяет задавать шаблоны для отбора нужных файлов и директорий. Скопируем все файлы начинающиеся с буквы "n"
--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 - Время ожидания при передаче/приеме данных