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