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