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

Что такое Rsync

Rsync — быстрый и универсальный инструмент копирования файлов и папок с файлами. Утилита может копировать данные как локально, так и на другие хосты, включая Cloud Storage от Introserv.
Опции утилиты позволяют контролировать массу аспектов копирования и зеркалирования данных.
Одной из главных особенностей является возможность сжимать данные во время отправки, что позволяет ускорить процесс копирования между серверами.
Другое преимущество — это исключение при копировании идентичных файлов. Отчего копироваться или переноситься будут только отличающиеся файлы, что несомненно сэкономит время синхронизации объемных каталогов.

Опции утилиты

Рассмотрим примеры использования Rsync для копирования файлов и каталогов на удаленное хранилище Cloud Storage от компании Introserv с помощью протокола SSH. Важно! Аналогичные команды, только с указанием целевого сервера позволят копировать каталоги и файлы на любой удаленный сервер по протоколу SSH.

Ознакомимся с некоторыми основными опциями утилиты, которые будут использоваться чаще всего. Более подробный список доступных опций доступен в man документации (команда man rsync):

-v – вывести подробную информацию о процессе
-c – проверка контрольных сумм файлов
-q – минимальная информация
-a – режим архивирования
-R – относительные пути
-y – не перезаписывать более новые файлы
-b – создание резервной копии
-l – копировать симлинки
-L – копировать содержимое ссылок
-H – копировать жесткие ссылки
-g – сохранять группу
-p – сохранять права для файлов
-t – сохранять время модификаций
-x – работать только в этой ФС
-e – использовать другой транспортный протокол (например, ssh)
-z – сжимать файлы перед передачей
--delete – удалять файлы которых нет в источнике
--exclude – исключить файлы
--recursive – перебирать директории рекурсивно
--no-recursive – отключить рекурсию
--progress – выводить прогресс передачи файлов
--stat – показать статистику передачи
--max-size – максимальный размер файла для передачи
--bwlimit — ограничение скорости для передачи файлов

Краткое пояснение синтаксиса

rsync -az --progress /home/user/test.file boxxxx@boxxxxx.introserv.cloud:/remote_folder/

-az --progress опции, которые указывают, что необходимо архивировать передаваемый файл, сжимать его перед передачей, а также выводить прогресс копирования на экран;

/home/user/test.file  это путь к файлу и собственно сам файл, который нужно перенести;

boxxxx@boxxxxx.introserv.cloud: это ресурс назначения (в нашем примере это cloud storage, но может быть и удаленный сервер) boxxxx – имя пользоватлеля, после занака @ - имя ресурса или ИП адрес удаленного сервера;

/remote_folder/ это папка на удаленном ресурсе. В нашем примере на Сloud Storage.

Копировать один файл в папку на удаленном хранилище

rsync -az --progress /home/user/Desktop/test.file boxxxxx@boxxxxx.introserv.cloud:/remote_folder/

Будет запрошен пароль подключения к хранилищу:

Вводим пароль и продолжаем, видим прогресс и скорость передачи файла:

Копировать папку в папку на удаленном хранилище

Обратите внимание на слеши в строке папки источника и папки назначения. Отсутсвие слеша в папке источнике указывает, что мы хотим передать рекурсивно локальную папку Desktop со всем ее содержимым в удаленную папку remote_folder

rsync -azr --progress /home/user/Desktop boxxxx@boxxxx.introserv.cloud:/remote_folder/

Видим передачу каталога и всех файлов внутри его:

Копировать содержимое локальной папки в папку на удаленном хранилище

Обратите внимание на слеш в конце папки источника. Его наличие указывает на то, что утилита должна скопировать содержимое локальной папки в папку на удаленном хранилище

rsync -avzr --progress /home/user/Desktop/ boxxxx@boxxxx.introserv.cloud:/remote_folder/

Видим прогресс и скорость копирования:

Копирование папки с удаленного хранилища в локальную папку сервера

С помощью Rsync можно инициировать копирование папки с удаленного хранилища. Команда выглядит следующим образом:

rsync -zra --progress boxxxxx@boxxxxx.introserv.cloud:/remote_folder /home/user/Desktop/

Видим прогресс и скорость копирования удаленной папки в папку на локальном сервере:

Копирование содержимого папки с удаленного хранилища в локальную папку сервера

Здесь также стоит обратить внимание на слеш в конце пути папки источника. Его наличие указывает, что нужно скопировать только содержимое папки

rsync -zra --progress boxxxxx@boxxxxx.introserv.cloud:/remote_folder/ /home/user/Desktop/

Копирование содержимого папки с исключением и/или включенеим фалов

Утилита позволяет явно указать какие файлы передавать, а какие следует исключить. Для этого используются опции --include и --exclude

rsync -azr --progress --include 'test.file' --exclude 'test.file2' /home/user/Desktop/ boxxxx@boxxxx.introserv.cloud:/remote_folder/

Видим, что передается только один файл, указанный опцией --include Обратим ваше внимание, что опции include и exclude могут быть использованы отдельно друг от друга

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

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

rsync -azrс --progress /home/user/Desktop/ boxxxx@boxxxx.introserv.cloud:/remote_folder/

Видим, что на удаленную папку скопировалось только 3 файла, за исключением файла test.odt, который уже есть на удаленном хранилище:

Использование Rsync по SSH с нестандартным портом SSH

Чтобы передать файлы с/на сервер с измененным портом SSH следует использовать опцию -e 'ssh -p port_number'

Команда для копирвоания файла на сервер, на котором SSH порт заменен на 44 будет выглядеть так:

rsync -azrс --progress -e 'ssh -p44' /home/user/Desktop/ user@server_ip:/remote_folder/