Копіювання та резервне копіювання файлів і папок за допомогою утиліти Rsync
Rsync це швидкий і універсальний інструмент для копіювання файлів і папок. Утиліта може копіювати дані як локально, так і на інші хости, включно з Хмарним сховищем від INTROSERV. Опції утиліти дають змогу керувати багатьма аспектами копіювання та дзеркалювання даних. Одна з корисних можливостей це стиснення даних під час передавання, яке може зменшити мережевий трафік і підвищити швидкість передавання, коли вузьким місцем є пропускна здатність мережі. Ще одна перевага полягає в тому, що Rsync не передає файли, які не потребують оновлення. За замовчуванням він порівнює розмір і час зміни файлу та передає лише ті файли, які, судячи з цих параметрів, змінилися, що безумовно економить час під час синхронізації великих каталогів.
Навіщо потрібен прапорець -a? Опція -a (архівний режим) це найпоширеніший вибір. Вона вмикає рекурсивне копіювання та зберігає основні атрибути файлів: права доступу, власника, групу, час зміни та символічні посилання. Оскільки -a вже включає рекурсію, окремо додавати -r не потрібно.
Опції утиліти
Розгляньмо приклади використання Rsync для копіювання файлів і каталогів у віддалене Хмарне сховище від INTROSERV за протоколом SSH.
Ці команди універсальні. Просто замініть адресу призначення та шлях, щоб синхронізувати файли з будь-яким віддаленим сервером по SSH.
Розгляньмо деякі основні опції утиліти, які використовуються найчастіше. Докладніший перелік доступних опцій є в документації man (команда man rsync):
-v – виведення докладної інформації про процес
-c – порівняння вмісту файлів за контрольною сумою замість розміру та часу зміни (надійніше, але повільніше)
-q – мінімум інформації
-a – архівний режим
-R – відносні шляхи
-u – пропускати файли, які новіші в місці призначення
-b – створювати резервну копію
-l – копіювати символічні посилання
-L – копіювати вміст посилань
-H – копіювати жорсткі посилання
-g – зберігати групу
-p – зберігати права доступу до файлів
-t – зберігати час зміни
-x – працювати лише в межах цієї ФС
-e – використовувати інший транспортний протокол (наприклад, ssh)
-z – стискати дані під час передавання для зменшення мережевого трафіку
--delete – видаляти файли, яких немає в джерелі
--exclude – виключати файли
--recursive – рекурсивно обходити каталоги (уже входить до -a)
--no-recursive – вимкнути рекурсію
--progress – показувати прогрес передавання файлів
-P – еквівалент --partial --progress. Показує прогрес і зберігає частково передані файли, щоб наступний запуск міг продовжити з них
--stats – показувати статистику передавання
--max-size – максимальний розмір файлу для передавання
--bwlimit – обмеження швидкості передавання файлів
Коротке пояснення синтаксису
Правило завершального слеша (/). Саме тут найчастіше помиляються: /folder (без слеша) копіює саму папку. /folder/ (зі слешем) копіює лише вміст папки.
rsync -az --progress /home/user/test.file boxxxx@storage_ip:/remote_folder/
-a – архівний режим: рекурсивне копіювання зі збереженням атрибутів файлів
-z – стискає дані під час передавання
--progress – показує прогрес передавання
/home/user/test.file – це шлях до файлу та сам файл, який потрібно передати
boxxxx@storage_ip: – це ресурс призначення (у нашому прикладі це хмарне сховище, але це може бути й віддалений сервер). boxxxx це ім'я користувача, після знака @ іде ім'я ресурсу або IP-адреса віддаленого сервера
/remote_folder/ – це папка на віддаленому ресурсі. У нашому прикладі в Хмарному сховищі INTROSERV.
Копіювання одного файлу в папку на віддаленому сховищі
rsync -az --progress /home/user/Desktop/test.file boxxxx@storage_ip:/remote_folder/
Вам буде запропоновано ввести пароль для підключення до сховища. Введіть пароль і продовжте, ви побачите прогрес і швидкість передавання файлу.
Копіювання папки в папку на віддаленому сховищі
Зверніть увагу на слеші в рядках вихідної папки та папки призначення. Відсутність слеша у вихідної папки означає, що ми хочемо перенести саму локальну папку Desktop з усім її вмістом у папку remote_folder.
rsync -az --progress /home/user/Desktop boxxxx@storage_ip:/remote_folder/
Ви побачите, як передається каталог і всі файли всередині нього.
Копіювання вмісту локальної папки в папку на віддаленому сховищі
Зверніть увагу на слеш у кінці вихідної папки. Його наявність означає, що утиліта має скопіювати вміст локальної папки в папку на віддаленому сховищі.
rsync -az --progress /home/user/Desktop/ boxxxx@storage_ip:/remote_folder/
Ви побачите прогрес і швидкість копіювання.
Копіювання папки з віддаленого сховища в папку на локальному сервері
За допомогою Rsync можна ініціювати копіювання папки з віддаленого сховища. Команда має такий вигляд:
rsync -az --progress boxxxx@storage_ip:/remote_folder /home/user/Desktop/
Ви побачите прогрес і швидкість копіювання віддаленої папки в папку на локальному сервері.
Копіювання вмісту папки з віддаленого сховища в папку на локальному сервері
Тут теж варто звернути увагу на слеш у кінці шляху до вихідної папки. Його наявність означає, що потрібно скопіювати лише вміст папки.
rsync -az --progress boxxxx@storage_ip:/remote_folder/ /home/user/Desktop/
Копіювання вмісту папки з виключенням та/або включенням файлів
Утиліта дає змогу явно вказати, які файли передавати, а які виключити. Для цього використовуються опції --include та --exclude. Правила обробляються по порядку, тому правило include має йти раніше за правило exclude, яке інакше виключило б той самий файл.
Перевірте командою вхолосту (dry run). Перед запуском команди, яка змінює або видаляє багато файлів, додайте прапорець -n або --dry-run. Rsync покаже, що саме він зробить, не переміщуючи й не видаляючи нічого насправді.
rsync -az --progress --include='test.file' --exclude='*' /home/user/Desktop/ boxxxx@storage_ip:/remote_folder/
Ця команда передає test.file і виключає все інше у вихідному каталозі. Саме правило --exclude='*' обмежує передавання єдиним включеним файлом, тому тут обидві опції потрібні разом.
Копіювання лише файлів, що відрізняються від файлів у папці призначення
За замовчуванням Rsync визначає, чи потрібно передавати файл, за його розміром і часом зміни. Використовуйте опцію -c, коли потрібно, щоб Rsync порівнював вміст файлів за контрольною сумою. Це надійніше, коли часу зміни довіряти не можна, але повільніше, тому що обом сторонам доводиться читати файли для розрахунку контрольних сум.
rsync -azc --progress /home/user/Desktop/ boxxxx@storage_ip:/remote_folder/
З опцією -c Rsync порівнює вміст файлів у джерелі та в призначенні за контрольними сумами і передає лише ті файли, вміст яких відрізняється.
Використання Rsync через SSH з нестандартним SSH-портом
Для передавання файлів із сервера або на сервер зі зміненим SSH-портом використовуйте опцію -e 'ssh -p номер_порту'.
Команда для копіювання файлу на сервер, у якого SSH-порт змінено на 44, матиме такий вигляд:
rsync -azc --progress -e 'ssh -p 44' /home/user/Desktop/ user@server_ip:/remote_folder/
Примітка щодо безпеки: Зміна стандартного SSH-порту може зменшити кількість автоматичних сканувань і небажаних спроб підключення, але це не заміна належним заходам захисту SSH, таким як автентифікація за ключами та правила фаєрвола. Завжди переконуйтеся, що фаєрвол дозволяє трафік на вибраному порту.