Синхронізація з 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
, або «archive», поєднує кілька стандартних параметрів. Що включає -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
Тестування¶
Сценарії гарантують, що ви можете тестувати без занепокоєння.
Важливо
У цьому випадку припускається, що ваш домашній каталог не існує на цільовому комп’ютері. Якщо він існує, ви можете створити його резервну копію перед виконанням сценарію!
Запустіть скрипт:
/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
Це підтягнеться і виглядатиме приблизно так:
# Відредагуйте цей файл, щоб представити завдання, які виконуватиме cron.
#
# Кожне завдання для запуску має бути визначено в одному рядку
# вказуючи різними полями, коли завдання буде запущено
# і яку команду виконати для завдання
#
# Щоб визначити час, ви можете надати конкретні значення
# хвилина (м), година (год), день місяця (дом), місяць (пн),
# і день тижня (dow) або використовуйте «*» у цих полях (для «будь-якого»).
#
# Зверніть увагу, що завдання будуть запускатися на основі системи cron
# поняття daemon про час і часові пояси.
#
# Вихідні дані завдань crontab (включаючи помилки) надсилаються
# електронним листом користувачу, якому належить файл crontab (якщо не перенаправлено).
#
# 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
Інформація
Приклад crontab
показує порожній, але прокоментований файл. Коментар не з’являється на кожному комп’ютері та може бути порожнім файлом. На активному комп’ютері ви можете бачити інші записи.
crontab
має 24-годинний формат. Вам знадобиться ваш запис у нижній частині цього файлу:
00 23 * * * /usr/local/sbin/rsync_dirs
Це говорить про виконання цієї команди о 00 хвилин і 23 години щодня, кожного місяця та кожного дня тижня. Збережіть свій запис crontab
за допомогою:
Shift+:+w+q+!
Додаткові прапори¶
-n : Виконати без проблем, щоб побачити, які файли будуть передані
-v : вивести список усіх файлів, які передаються
-vvv : надати інформацію про налагодження під час передачі файлів
-z : щоб увімкнути стиснення під час передачі
Висновки¶
Хоча rsync
не такий гнучкий чи надійний, як інші інструменти, він забезпечує синхронізацію файлів, що завжди корисно.
Author: Steven Spencer
Contributors: Ezequiel Bruni, tianci li, Ganna Zhyrnova