Синхронізація з rsync
Передумови¶
Це все, що вам потрібно зрозуміти та дотримуватися цього посібника:
- Машина під керуванням Rocky Linux.
- Щоб було зручно змінювати конфігураційні файли з командного рядка
- Знання того, як користуватися редактором командного рядка (тут ми використовуємо vi, але ви можете використовувати свій улюблений редактор).
- Вам потрібен доступ root або привілеї
sudo - Пари відкритих і закритих ключів SSH.
- Можна створити сценарій bash за допомогою
viабо вашого улюбленого редактора та протестувати його. - Можливість використання
crontabдля автоматизації виконання сценарію
Вступ¶
Використання rsync через SSH не таке потужне, як lsyncd (який дозволяє відстежувати зміни в директорії або файлі та синхронізувати їх у режимі реального часу), і не таке гнучке, як rsnapshot (який пропонує можливість резервного копіювання кількох цільових об'єктів з одного комп'ютера). Однак це дозволяє оновлювати два комп’ютери за розкладом, який ви визначаєте.
Якщо вам потрібно підтримувати набір каталогів на цільовому комп’ютері в актуальному стані, і вам не потрібна синхронізація в реальному часі як функція, тоді rsync через SSH, ймовірно, найкраще рішення.
Для цієї процедури ви працюватимете як користувач root. Або увійдіть як root, або скористайтеся командою sudo -s, щоб переключитися на root-користувача у вашому терміналі.
Встановлення rsync¶
Хоча rsync, ймовірно, вже встановлено. Щоб переконатися, що rsync актуальний, виконайте такі дії на обох комп'ютерах:
dnf install rsync
Якщо пакет не встановлено, dnf попросить вас підтвердити встановлення. Якщо оновлення вже встановлено, dnf шукатиме його та запропонує вам його встановити.
Підготовка середовища¶
У цьому прикладі на цільовому комп'ютері буде використано rsync для отримання даних з джерела, а не для надсилання з джерела до цільового комп'ютера. Для цього вам потрібно налаштувати пару ключів SSH. Після створення пари ключів SSH перевірте доступ без пароля від цільового комп’ютера до вихідного.
Параметри rsync і налаштування сценарію¶
Перш ніж продовжити налаштування скрипта, вам потрібно вирішити, які параметри використовувати з rsync. Існує багато можливостей. Повний список дивіться в посібнику з rsync. Найпоширеніший спосіб використання rsync — це використання опції -a, оскільки -a, або «архівувати», поєднує кілька поширених опцій. Що включає -a?
-r, рекурсує каталоги-l, підтримує символічні посилання як символічні посилання-p, зберігає дозволи-t, зберігає час модифікації-g, зберігає групу-o, зберігає власника-D, зберігає файли пристрою
Єдині інші параметри, які вам потрібно вказати в цьому прикладі:
-e, визначає віддалену оболонку для використання--delete, який говорить, що якщо в цільовому каталозі є файл, який не існує в джерелі, позбутися його
Далі налаштуйте скрипт на цільовому комп'ютері, створивши для нього файл (знову ж таки, скористайтеся своїм улюбленим редактором, якщо ви не знайомі з vi). Щоб створити файл, використовуйте цю команду:
vi /usr/local/sbin/rsync_dirs
Додайте вміст:
#!/usr/bin/env bash
/usr/bin/rsync -ae ssh --delete root@source.domain.com:/home/your_user /home
Замініть «source.domain.com» своїм доменним іменем, іменем хоста або IP-адресою.
Зробіть його виконуваним:
chmod +x /usr/local/sbin/rsync_dirs
Тестування¶
Сценарії гарантують, що ви можете тестувати без занепокоєння.
Warning
У цьому випадку припускається, що ваш домашній каталог не існує на цільовому комп’ютері. Якщо він існує, ви можете створити його резервну копію перед виконанням сценарію!
Запустіть скрипт:
/usr/local/sbin/rsync_dirs
Якщо все гаразд, ви отримаєте синхронізовану копію домашнього каталогу на цільовому комп’ютері. Переконайтеся, що це так.
Якщо припустити, що все спрацювало, створіть новий файл на вихідному комп’ютері у вашому домашньому каталозі:
touch /home/your_user/testfile.txt
Запустіть сценарій ще раз:
/usr/local/sbin/rsync_dirs
Переконайтеся, що цільовий комп’ютер отримав новий файл. Якщо так, наступним кроком є перевірка процесу видалення. Видаліть файл, який ви щойно створили на вихідному комп’ютері:
rm -f /home/your_user/testfile.txt
Запустіть сценарій ще раз:
/usr/local/sbin/rsync_dirs
Переконайтеся, що файл більше не існує на цільовому комп’ютері.
Нарешті, створіть файл на цільовому комп’ютері, який не існує на вихідному:
touch /home/your_user/a_different_file.txt
Запустіть сценарій в останній раз:
/usr/local/sbin/rsync_dirs
Файл, який ви створили в цільовому файлі, більше не повинен існувати, оскільки він не існує в джерелі.
Якщо припустити, що все спрацювало належним чином, змініть сценарій, щоб синхронізувати всі потрібні каталоги.
Автоматизація всього¶
Можливо, ви не захочете запускати цей сценарій щоразу, коли хочете синхронізувати вручну. Використовуйте crontab, щоб робити це автоматично за розкладом. Щоб запускати цей сценарій щовечора об 23:00:
crontab -e
Це підтягнеться і виглядатиме приблизно так:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
Info
Приклад crontab показує порожній, але прокоментований файл. Коментар не з’являється на кожному комп’ютері та може бути порожнім файлом. На активному комп’ютері ви можете бачити інші записи.
crontab працює у 24-годинному форматі. Вам знадобиться ваш запис у нижній частині цього файлу:
00 23 * * * /usr/local/sbin/rsync_dirs
Це говорить про виконання цієї команди о 00 хвилин і 23 години щодня, кожного місяця та кожного дня тижня. Збережіть запис crontab за допомогою:
++shift+colon+"w"+"q"+exclam++
Додаткові прапори¶
-n : Виконати без проблем, щоб побачити, які файли будуть передані
-v : вивести список усіх файлів, які передаються
-vvv : надати інформацію про налагодження під час передачі файлів
-z : щоб увімкнути стиснення під час передачі
Висновки¶
Хоча rsync не такий гнучкий чи надійний, як інші інструменти, він забезпечує синхронізацію файлів, що завжди корисно.
Author: Steven Spencer
Contributors: Ezequiel Bruni, tianci li, Ganna Zhyrnova