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

Подробнее о Rsync

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

Возможности утилиты

Рассмотрим примеры использования Rsync для копирования файлов и каталогов на удаленное облачное хранилище 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: это ресурс назначения (в нашем примере это облачное хранилище, но это может быть и удаленный сервер) boxxxx - имя пользователя, после знака @ - имя ресурса или IP-адрес удаленного сервера;

/remote_folder/ - это папка на удаленном ресурсе. В нашем примере - в облачном хранилище Introserv Cloud 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 можно использовать отдельно друг от друга

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

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

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/