Content
- Опции утилиты
- Краткое пояснение синтаксиса
- Копировать один файл в папку на удаленном хранилище
- Копировать папку в папку на удаленном хранилище
- Копировать содержимое локальной папки в папку на удаленном хранилище
- Копирование папки с удаленного хранилища в локальную папку сервера
- Копирование содержимого папки с удаленного хранилища в локальную папку сервера
- Копирование содержимого папки с исключением и/или включенеим фалов
- Копирование только тех файлов, которые отличаются от файлов в папке назначения
- Использование Rsync по SSH с нестандартным портом SSH
Копирование и резервирование файлов и папок с помощью утилиты 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/