Копіювання та резервне копіювання файлів і папок за допомогою утиліти 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-адреса віддаленого сервера;

/віддалена_папка/ - це папка на віддаленому ресурсі. У нашому прикладі - у хмарному сховищі Introserv.

Копіювання одного файлу в папку на віддаленому сховищі

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

Вам буде запропоновано ввести пароль для підключення до сховища:

Копіювання та резервне копіювання файлів і папок за допомогою утиліти Rsync

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

Копіювання та резервне копіювання файлів і папок за допомогою утиліти Rsync

Копіювання папки в папку на віддаленому сховищі

Зверніть увагу на скісні риски в рядках папки-джерела та папки-приймача. Відсутність скісної риски у вихідній папці вказує на те, що ми хочемо рекурсивно перенести локальну папку Desktop з усім її вмістом до папки remote_folder

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

Ви побачите, що папку і всі файли в ній буде перенесено:

Копіювання та резервне копіювання файлів і папок за допомогою утиліти Rsync

Копіювання вмісту локальної теки до теки на віддаленому сховищі

Зверніть увагу на косу риску в кінці вихідної папки. Її наявність вказує на те, що утиліта повинна скопіювати вміст локальної папки в папку на віддаленому сховищі

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

Ви побачите хід і швидкість копіювання:

Копіювання та резервне копіювання файлів і папок за допомогою утиліти Rsync

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

За допомогою Rsync можна ініціювати копіювання папки з віддаленого сховища. Команда має такий вигляд:

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

Ви побачите хід і швидкість копіювання віддаленої теки до теки на локальному сервері:

Копіювання та резервне копіювання файлів і папок за допомогою утиліти Rsync

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

Тут також варто звернути увагу на косу риску в кінці шляху до папки-джерела. Його наявність вказує на те, що потрібно скопіювати тільки вміст папки

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

Копіювання та резервне копіювання файлів і папок за допомогою утиліти Rsync

Копіювання вмісту теки з вилученням і/або включенням файлів

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

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

Ви побачите, що буде передано лише один файл, вказаний опцією --include. Зверніть увагу, що опції include і exclude можна використовувати окремо одна від одної

Копіювання та резервне копіювання файлів і папок за допомогою утиліти Rsync

Копіювати лише файли, які відрізняються від файлів у папці призначення

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

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

Ви побачите, що до віддаленого сховища було скопійовано лише 3 файли, за винятком файлу test.odt, який вже знаходиться на віддаленому сховищі:

Копіювання та резервне копіювання файлів і папок за допомогою утиліти Rsync

Використання Rsync по SSH з нестандартним SSH-портом

Для передачі файлів з/на сервер зі зміненим SSH-портом використовуйте опцію -e 'ssh -p номер_порту '

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

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