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

Зміст:
- Характеристики Rsync та особливості використання
- Локальне копіювання та синхронізація файлів / каталогів
- Початковий етап створення файлів та копіювання до пункту призначення
- Оновлення синхронізованої копії
- Режим моделювання
- Синхронізація з «виключеннями»
- Підтримка актуальності даних
- Створення резервних копій
- Рішення від FREEhost.UA
- Висновки
На ринку програмного забезпечення присутні чимало засобів для здійснення копіювання та синхронізації файлів, і Rsync по багатьом параметрам займає одне з перших місць. Відкритий вихідний, код, гнучкість та простота використання, шифрування, конвеєрна передача файлів із збереженням всіх метаданих та багато інших кейсів роблять його незамінним інструментом мережевої синхронізації віддалених об'єктів файлової системи. Розглянемо основні можливості програми та продемонструємо їх застосування на практичних прикладах.
Характеристики Rsync та особливості використання
Програма з'явилася на заміну своїм застарілим аналогам, зокрема, таким, як scp та rcp, і тому має з ними деякі спільні риси, зокрема, у загальному синтаксисі. Наприклад, команда копіювання на віддалений хост має наступний синтаксис:
rsync [опції] … SRC … [REMOTE_USER@]HOST:DEST
Тутопції – уточнюючі параметри команди запуску програми; SRC – будь який об’єкт файлової системи або їх група для копіювання; HOST – адреса віддаленого хоста; DEST – каталог призначення на віддаленому хості
Синтаксис команди копіювання із віддаленого хоста буде наступним:
rsync [опції] … [REMOTE_USER@]HOST:SRC [DEST]
Як бачимо, команда копіювання завжди повинна містити джерело даних та пункт призначення, і будь-який з них може бути віддаленим, але не обидва водночас.
Утиліта була створена для Unix-подібних ОС, але має безліч реалізацій і для інших платформ, зокрема, Windows(cwRsync) та macOS (Grsync). Вона включена у більшість Linux-дистрибутивів.
На відміну від більшості аналогів, Rsync для передачі файлів використовує лише один потік даних, що оптимізує об’єм трафіку в каналі та мінімізує витрати ресурсів. Особливо це відчувається у випадку великої кількості файлів малого розміру, коли для кожного з них інші програми синхронізації утворюють новий потік даних.
Для передачі даних утиліта може використовувати захищений протокол ssh або власний протокол rsync із попередньо налаштованим Rsync-сервером. Але стандартним засобом передачі є ssh.
Утиліта має даемон rsyncd, котрий при потребі завжди можна запустити за допомогою опції–daemon, вказаній у команді запуску
Виділимо основні особливості утиліти
-
Конвеєрна передача файлів;
-
Використовує будь-яку прозору віддалену оболонку, у тому числі ssh та rsh;
-
Копіює посилання, власників, групи, права доступу та інші метадані файлів;
-
Підтримка рекурсії при копіюванні та синхронізації;
-
Використовує інкрементальне копіювання для мінімізації витрат ресурсів та підвищення продуктивності;
-
Передача файлів у зашифрованому вигляді;
-
Підтримує анонімні та аутентифіковані даемони rsync;
-
Можливість вказати виключення для копіювання;
-
Не вимагає привілей суперкористувача для її застосування.
Локальне копіювання та синхронізація файлів / каталогів
На нашій локальній машині під управлінням ОС Debian 12 змоделюємо ситуацію, при котрій два каталоги з файлами будуть синхронізуватися один з одним.
У домашній директорії root-користувача буде знаходитися каталог із ім’ям Files (первісне джерело даних) та каталог із ім’ям Synfiles (пункт призначення). На їх прикладі з’ясуємо на практиці як «працює» команда rsync при використанні найбільш вживаних опцій. Але перед тим виконаємо підготовчий етап – оновимо індекс пакетів та встановимо утиліту Rsync із репозиторію.
$ apt update

$ apt-get install rsync

Вихід команди: Setting up rsync (3.27-1+debian12u2) . Утиліта успішно встановлена. Тепер можна переходити до роботи з утилітою.
Початковий етап створення файлів та копіювання до пункту призначення
Створимо файл у каталогу Files (першоджерело) та внесемо до нього довільну інформацію:
$ nano ~/files/testfile1.txt

Переглянемо статистику для всіх файлів вказаного каталогу:
$ stat -c "%s %n" ~/files/*

Вихід:
431 /root/files/testfile1.txt
Тепер ми знаємо, що розмір створеного файлу 431 байт.
Застосуємо команду синхронізації із кількома параметрами:
-v – вивід детальної інформації про хід процесу копіювання; -h – вивід чисел у зручному для сприйняття форматі; -r – рекурсивний перехід по вкладеним каталогам.
Введемо в терміналі:
$ rsync -vhr ~/files ~/synfiles

Вихід команди:
sending incremental file list files/ files/testfile1.txt sent 567 bytes received 39 bytes 1.21K bytes/sec total size is 431 speedup is 0.71
Команда скопіювала каталог Files із усім його вмістом у каталог Synfiles. Перевіримо це:
$ ls -h ~/synfiles/

Вихід: files . Каталог створено.
Перевіримо його вміст:
$ stat -c "%s %n" ~/synfiles/files/*

Вихід: 431 /root/synfiles/files/testfile1.txt
Можна переконатися, що каталог Synfiles містить синхронізовану копію каталогу Files із усіма його вмістом.
Оновлення синхронізованої копії
Вочевидь, оновлення файлів повинно відбуватися за певними правилами. Наприклад, якщо дата внесення змін у той самий файл «пункту призначення» більш нова, ніж у «джерелі», то оновлювати його не потрібно. Цього можна досягти, застосувавши опцію -u або –update у команді синхронізації. Продемонструємо це.
Внесемо зміни до файлу testfile1.txt «пункту призначення»:
$ nano ~/synfiles/files/testfile1.txt

Перевіримо його новий розмір:
$ stat -c "%s %n" ~/synfiles/files/*

Вихід: 1295 /root/synfiles/files/testfile1.txt
Розмір файлу тепер становить 1295 байт.
Синхронізуємо каталоги із використанням опції -u:
$ rsync -uvhr ~/files ~/synfiles/

Вихід команди:
sending incremental file list sent 86 bytes received 17 bytes 206.00 bytes/sec total size is 431 speedup is 4.18
Перевіримо статистику по файлам обох каталогів:
$ stat -c "%s %n" ~/files/* && stat -c "%s %n" ~/synfiles/files/*

Вихід:
431 /root/files/testfile1.txt 1295 /root/synfiles/files/testfile1.txt
Можна переконатися, що «новий» розмір файлу не змінився, тобто, його оновлення не відбулося. Однак, якщо б дата внесення змін була старішою або, навіть, рівною даті «джерела», то такі файли завжди оновлюються утилітою.
Режим моделювання
Режим моделювання застосовується у випадку невпевненості у результатах виконання операції копіювання / синхронізації даних. Він дає змогу отримати інформацію по операціям, котрі будуть виконані при запуску команди rsync. При цьому фактичних змін внесено не буде. Включити вказаний режим можна за допомогою опції --dry-run або в скороченні -n.
У цьому випадку команда синхронізації буде виглядати наступним чином:
$ rsync -uvhr --dry-run ~/files ~/synfiles/
Або
$ rsync -uvhrn ~/files ~/synfiles/
Окрім того, параметр --dry-run доцільно використовувати сумісно із опцією -i, що дає змогу отримати вичерпну інформацію по всім змінам для кожного окремого файлу, котрий буде оновлений / синхронізований. У цьому разі наша команда буде виглядати наступним чином:
$ rsync -uvhrin ~/files ~/synfiles/
Синхронізація з «виключеннями»
Нерідко трапляється ситуація, коли необхідно синхронізувати каталоги за винятком декотрих файлів «джерела». Це можна зробити за допомогою опції --exclude. Продемонструємо це.
Створимо новий файл у «джерелі» та внесемо до нього довільні дані:
$ nano ~/files/testfile2.txt

Перевіримо статистику:
$ stat -c "%s %n" ~/files/*

Вихід:
431 /root/files/testfile1.txt 863 /root/files/testfile2.txt
Синхронізуємо каталоги за виключенням нового файлу із ім’ям testfile2.txt:
$ rsync -uvhr --exclude 'testfile2.txt' ~/files ~/synfiles/

Вихід команди:
sending incremental file list sent 86 bytes received 17 bytes 206.00 bytes/sec total size is 431 speedup is 4.18
Перевіримо статистику у обох каталогах:
$ stat -c "%s %n" ~/files/* && stat -c "%s %n" ~/synfiles/files/*

Вихід:
431 /root/files/testfile1.txt 863 /root/files/testfile2.txt 1295 /root/synfiles/files/testfile1.txt
Можна переконатися, що вказаний файл у «пункті призначення» відсутній.
Тепер синхронізуємо каталоги без опції --exclude:
$ rsync -uvhr ~/files ~/synfiles/

Вихід:
sending incremental file list files/testfile2.txt sent 1.02K bytes received 36 bytes 2.11K bytes/sec total size is 1.29K speedup is 1.23
Дивимося статистику:
$ stat -c "%s %n" ~/files/* && stat -c "%s %n" ~/synfiles/files/*

Вихід:
431 /root/files/testfile1.txt 863 /root/files/testfile2.txt 1295 /root/synfiles/files/testfile1.txt 863 /root/synfiles/files/testfile2.txt
Файл із ім’ям testfile2.txt з’явився у цільовому каталогу, як і повинно бути.
Слід зазначити, що утиліта також підтримує опцію --include, тобто, «включення». Вона застосовується аналогічно першій, тільки з протилежною дією, і тому ми її розглядати не будемо.
Підтримка актуальності даних
Актуальність даних передбачає повну ідентичність вмісту каталогів на стороні «джерела» та «призначення». Досягти цього можна, зокрема, завдяки застосуванню опції --delete. Наведемо приклад.
Видалимо з первісного каталогу файл із ім’ям testfile1.txt, після чого синхронізуємо каталоги із опцією --delete:
$ rm ~/files/testfile1.txt

$ rsync -vhr --delete ~/files ~/synfiles/

Вихід команди:
sending incremental file list deleting files/testfile1.txt files/testfile2.txt sent 996 bytes received 59 bytes 2.11K bytes/sec total size is 863 speedup is 0.82
Перевіряємо статистичну інформацію:
$ stat -c "%s %n" ~/files/* && stat -c "%s %n" ~/synfiles/files/*

Вихід:
863 /root/files/testfile2.txt 863 /root/synfiles/files/testfile2.txt
Можна переконатися, що каталоги повністю синхронізувалися між собою. Застосована опція «працює» таким чином, що «вичищає» всі файли з «пункту призначення», котрі відсутні у «джерелі», підтримуючи цим актуальність наявних даних.
Створення резервних копій
Розглянемо питання створення резервних копій або бекапів каталогу, що синхронізується. Такий бекап фактично буде синхронізуватися разом із даними «джерела» та «пункту призначення». Це забезпечується тим, що опція -b (від backup) для автоматичного створення бекапу присутня в тій самій команді синхронізації, котра запускається для «джерела» та «призначення». Наведемо приклад.
Наш каталог бекапу буде мати ім’я mybackups та знаходитися у домашній директорії root-користувача. Повний шлях до нього вказується за допомогою параметру --backup-dir. Звісно тут можна вказати будь-який шлях та, навіть, розмістити бекап на іншому диску. Ми можемо створити каталог бекапу самостійно або ж це зробить за нас утиліта Rsync одразу після її запуску у разі його відсутності.
Введемо в терміналі:
$ rsync -bavh --backup-dir='/root/mybackups/' ~/files ~/synfiles/

Вихід:
files/ files/testfile2.txt sent 1.01K bytes received 39 bytes 2.10K bytes/sec total size is 863 speedup is 0.82
Спочатку переконаємося, що первісний каталог продубльовано:
$ ls mybackups/

Вихід: files
Ми бачимо, що каталог Files скопійований до каталогу mybackups.
Переглянемо статистику для нього:
$ stat -c "%s %n" mybackups/files/*

Вихід: 863 mybackups/files/testfile2.txt
Можна переконатися, що файл із ім’ям testfile2.txt повністю співпадає із файлом первісного каталогу. Це означає, що тепер паралельно процесу синхронізації даних «джерела» та «пункту призначення» буде у автоматичному режимі відбуватися резервне копіювання даних
Рішення від FREEhost.UA
Для надійного зберігання резервних копій чудово підійде сервер STG54 — оптимальне поєднання продуктивності та великого дискового простору. Ви отримаєте власний сервер із повним контролем доступу та можливістю автоматичного резервування даних за допомогою rsync. Дізнайтеся більше про сервер для бекапів у відповідному розділі.
Висновки
Ми розглянули основні характеристики Rsync та її базові можливості по оновленню / синхронізації даних. Але реальні можливості утиліти набагато ширші, ніж ми тут показали. Насамперед, це стосується питань автоматизації та безпеки, котрі ми обов’язково розглянемо у наступній нашій статті.
Підписуйтесь на наш телеграм-канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.
Дивіться наш канал Youtube на https://www.youtube.com/freehostua.
Ми у чомусь помилилися, чи щось пропустили?
Напишіть про це у коментарях, ми з задоволенням відповімо та обговоримо Ваші зауваження та пропозиції.
|
Дата: 28.10.2025 Автор: Олександр Ровник
|
|

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