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