• База знань
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Стаття також доступна російською (перейти до перегляду).

Вступ

Задача забезпечення дзеркалювання даних або резервне копіювання клієнтських Linux-систем на головний сервер є вельми важливою на даний час. Для її вирішення застосовується ряд відомих утиліт або протоколів, серед котрих найбільш вдалою є програма Rsync. На відміну від багатьох своїх аналогів, вона здатна забезпечити автоматизовану передачу / прийом даних рекурсивним методом по захищеному каналу із використанням влаштованих методів стиснення. Розглянемо її можливості на практичних прикладах.

Програмні засоби синхронізації даних

Розробка ефективних програмних засобів копіювання даних зазвичай викликає чимало складнощів і, тому, є задачею нетривіальною. Це, зокрема, пов'язано із необхідністю використання сторонніх протоколів для транспортування даних, котрі у своїй більшості також не є досконалими.

Серед найбільш відомих утиліт такого класу можна виділити Rcp (remote copy), Scp (secure copy) та Rsync (remote synchronization).

Перша з них для транспортування даних використовує протокол прикладного рівня RLOGIN, який не здатний забезпечити достатній рівень захисту даних і, тому, є неприйнятний для використання у теперішніх умовах.

Утиліта Scp фактично є захищеним аналогом Rcp, оскільки використовує для передачі захищений протокол Ssh, однак має ряд потенційних помилок, виникаючих при підключенні по Ssh та багато обмежень. Зокрема, це неможливість використання графічного інтерфейсу без підключення сторонніх модулів та функцій, а також багато інших недосконалостей.

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

Можливості Rsync

Можна виділити наступні можливості утиліти:

  • Можливість запуску в багатьох режимах, у тому числі і демона;
  • Здатність копіювати групи, дозволи, пристрої та посилання;
  • Підтримка exclude опцій;
  • Не вимагає використання рівня суперкористувача;
  • Підтримка тестового режиму запуску;
  • Потокова передача даних;
  • Підтримка режиму CVS;
  • Можливість під'єднання до різних типів віддалених оболонок.

Практичне використання Rsync у межах локального сервера

Програма входить до базового програмного забезпечення більшості дистрибутивів Linux-подібних операційних систем і, тому, не потребує встановлення. Але, у разі чого, її завжди можна встановити із відкритого репозиторію стандартними засобами.

Для тестування можливостей програми будемо використовувати локальний сервер під управлінням Ubuntu 22.04.

Для того, щоб дізнатися номер версії програмного засобу, введемо у терміналі наступну команду:

$ rsync -v

Отже, встановлена версія Rsync 3.2.7. Окрім цього, вказана команда дозволяє отримати інформацію стосовно можливостей засобу та список доступних параметрів управляючої команди rsync.

Нами буде створено два каталоги, один з яких буде джерелом даних, а інший буде місцем призначення, тобто, його вміст буде синхронізуватися із «джерелом» за допомогою rsync. Також буде продемонстровано різні варіанти запуску програми із використанням різних параметрів, що дозволяє оптимізувати процес передачі даних та зробити його більш гнучким.

Спочатку створимо первісний каталог із даними:

$ mkdir lessondir

Згенеруємо в ньому п'ять файлів, після чого переглянемо його вміст:

$ touch lessondir/testfile{1..5}
$ ls lessondir

Як бачимо, файли із ім'ям testfile1, ..., testfile5 успішно створено.

Тепер створимо каталог призначення – приймач даних. Для цього наберемо в терміналі:

$ mkdir lessondir2

Переглянемо поточний каталог, щоб переконатися, що все на місці:

$ ls -l

Для синхронізації вмісту первісного каталогу із каталогом призначення рекурсивним методом (параметр -r) у межах однієї системи, можна використати наступну команду:

$ rsync -r lessondir/ lessondir2

Переконаємося в тому, що вміст каталогів синхронізовано:

$ ls lessondir2

Тепер запустимо команду rsync із іншим параметром, котрий, зокрема, дає змогу фіксувати час внесених у дані змін і, відповідно, оптимізувати об'єми даних, що передаються:

$ rsync -a lessondir/ lessondir2

Слід зазначити, що символ «/» у кінці назви «джерела» даних, є вказівником на копіювання тільки даних, а не самої директорії. У випадку такої необхідності, достатньо прибрати вказаний символ із команди, після чого директорія скопіюється разом із даними.

Перевіримо це:

$ rsync -a lessondir lessondir2
 
$ ls lessondir2

Ми бачимо, що директорія з'явилася. Перевіримо її вміст:

$ ls lessondir2/lessondir

Отже, все збігається – відбулося повне копіювання даних разом із каталогом, тобто, по суті, реалізація формату вкладених каталогів.

Додаткові можливості

Використання тестового режиму запуску

Програмний засіб надає можливість включення тестового режиму для перевірки роботи команди, що дає змогу уникнути зайвих помилок. Це реалізується завдяки використанню параметру -n у командній строчці. Разом із ним доцільно використання параметру -v, котрий деталізує вивід і, відповідно, також може бути корисним. Перевіримо це на практиці, об'єднавши вказані параметри із попереднім:

$ rsync -anv lessondir/ lessondir2

Ми бачимо, що у виводі команди тестовий режим позначений як DRY RUN. Цю назву також можна використовувати у якості параметра, так само, як і -n, оскільки результат буде той же. Окрім того, вивід команди показує, що жодного файлу не може бути скопійовано по тій причині, що не було внесено в них жодних змін після проведення останньої синхронізації. Як вже зазначалося, це стає можливим завдяки використанню у команді параметру -a, що дає змогу уникнути дублювання інформації, що передається.

Внесемо зміни до одного із файлів та повторимо запуск команди з тими ж параметрами. Для цього запустимо редактор nano:

nano lessondir/testfile5

Внесемо до файлу наступну строчку: Як клонувати HDD диск у ОС Windows 10.

Збережемо внесені зміни та вийдемо з редактору.

Тепер запустимо команду ще раз:

$ rsync -anv lessondir/ lessondir2

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

Стискання даних, що передаються

Зменшити об'єми даних при передачі також можна завдяки використанню параметру -z, котрий конфігурує програму на стиснення інформації за допомогою інтегрованих у неї засобів. Перед запуском команди ми внесли зміни до усіх файлів. Наберемо в терміналі:

$ rsync -azP lessondir/ lessondir2

Нами також був використаний параметр -P, котрий забезпечує індикацію процесу виконання команди та поновлює її виконання у випадку незапланованого переривання під час передачі даних.

Тепер запустимо ту ж команду ще раз без внесення у дані попередніх змін:

$ rsync -azP lessondir/ lessondir2

Ми бачимо, що ніякі дані не були передані, оскільки змін не було внесено. Це в черговий раз підтвердило врахування програмою часу модифікації даних при їх передачі.

Створення резервної копії даних

Програму можна використати для автоматичного створення резервних копій даних. У цьому допоможе параметр –backup. Разом з ним необхідно вказувати директорію збереження копії із відповідним параметром. Продемонструємо це:

$ rsync -a --backup --backup-dir=reservecopy lessondir/ lessondir2

Тут reservecopy – директорія збереження резервної копії.

Переглянемо вміст вказаної директорії після виконання копіювання даних:

$ ls lessondir2/reservecopy

Можна переконатися, що резервна копія була успішно створена.

Видалення «зайвих» файлів та каталогів із директорії призначення

Треба зазначити, що програма за замовчуванням лише синхронізує файли з даними, не виконуючи при цьому операцій очищення каталогу призначення від тих файлів, котрі були вже видалені із каталогу – джерела інформації. Щоб вона виконувала вказані операції необхідно у командній строчці вказати відповідний аргумент – параметр -delete. Переконаємося в тому, що це працює.

Видалимо два файли із директорії – джерела за допомогою наступних команд:

$ rm lessondir/testfile4
$ rm lessondir/testfile5

Запустимо на виконання команду із відповідним параметром, після чого переконаємося в тому, що «зайві» файли були видалені із директорії призначення:

$ rsync --delete -a lessondir/ lessondir2
 
$ ls lessondir2

Отже, тепер синхронізація каталогів є повною, оскільки були видалені не тільки «зайві» файли, а також каталог із резервною копією із назвою reservecopy, котрий був раніш створений.

Синхронізація із віддаленим каталогом

До цих пір ми розглядали задачі по синхронізації даних у межах однієї системи, а тепер спробуємо налагодити такий самий зв'язок із віддаленим каталогом. Одразу вкажемо, що принципової різниці тут немає. Головне, щоб був вірно налагоджений зв'язок між машинами за протоколом ssh. Найкращий варіант – це авторизація за допомогою відкритого ключа, оскільки це підвищить рівень захисту та звільнить від неприємної процедури щоразу вводити пароль. Для її налаштування достатньо помістити відкритий ключ локальної машини до файлу authorized_keys віддаленого комп'ютера.

Запустимо команду синхронізації локального та віддаленого каталогів. Для цього наберемо в терміналі:

$ rsync -a lessondir alexandr75001@176.9.11.135:copylessondir

Тут ми вказали адреси джерела даних та приймача. Адреса приймача включає ім'я користувача віддаленої системи, IP-адресу сервера та шлях до місцезнаходження копії даних. Також звертаємо увагу, що символ «/» після назви директорії – приймаа тут відсутній. Як вже зазначалося вище, це є обов'язковою умовою копіювання даних разом із директорією зберігання.

Переглянемо директорію copylessondir, щоб переконатися, що копія даних вже там:

$ ls copylessondir

Тепер переглянемо самі скопійовані дані:

$ ls copylessondir/lessondir

Ми бачимо, що передані дані повністю збігаються із джерелом.

Тепер виконаємо зворотну операцію – синхронізуємо вміст директорії copylessondir віддаленої машини із каталогом локального сервера.

Створимо вказану директорію на локальному сервері:

$ mkdir lessondir3

Запустимо відповідну команду на виконання:

$ rsync -a alexandr75001@176.9.11.135:copylessondir/lessondir lessondir3

Переглянемо результат:

$ ls lessondir3
  
$ ls lessondir3/lessondir

Можна переконатися, що всі дані синхронізувалися із тими, що зберігаються у директорії copylessondir віддаленої машини.

Усі параметри запуску команди rsync, котрі були розглянуті нами раніше, також можна використовувати при роботі із віддаленими системами і, тому, немає сенсу повторювати тут приклади їх використання.

Якщо вам потрібен сервер для зберігання резервних копій, дата-центр FREEhost.UA пропонує в оренду спеціальну конфігурацію сервер для зберігання бекапів. Власники VPS та виділених серверів можуть скористатися додатковою послугою хмарний диск.

Підписуйтесь на наш телеграм-канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.

Дивіться наш канал Youtube на https://www.youtube.com/freehostua.

Ми у чомусь помилилися, чи щось пропустили?

Напишіть про це у коментарях, ми з задоволенням відповімо та обговорюємо Ваші зауваження та пропозиції.

Дата: 28.09.2023
Автор: Олександр Ровник
Голосування

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:

comments powered by Disqus
navigate
go
exit
Дякуємо, що обираєте FREEhost.UA