Копирование и резервное копирование файлов и папок с помощью утилиты 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: – ресурс назначения (в нашем примере это облачное хранилище, но это также может быть удалённый сервер). 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 -azrc --progress /home/user/Desktop/ boxxxx@boxxxx.introserv.cloud:/remote_folder/
Вы увидите, что в удалённую папку были скопированы только отличающиеся файлы, за исключением файлов, которые уже находятся на удалённом хранилище.
Использование Rsync по SSH с нестандартным портом SSH
Для передачи файлов с/на сервер с изменённым портом SSH используйте опцию -e 'ssh -p номер_порта'.
Команда для копирования файла на сервер, на котором порт SSH изменён на 44, будет выглядеть следующим образом:
rsync -azrc --progress -e 'ssh -p44' /home/user/Desktop/ user@server_ip:/remote_folder/