Перейти до змісту

Використання rsync для підтримки синхронізації двох машин

Передумови

Це все, що вам потрібно зрозуміти та дотримуватися цього посібника:

  • Машина під керуванням Rocky Linux.
  • Щоб було зручно змінювати конфігураційні файли з командного рядка.
  • Знання того, як користуватися редактором командного рядка (тут ми використовуємо vi, але ви можете використовувати свій улюблений редактор).
  • Вам знадобиться root-доступ, і в ідеалі увійдіть як root-користувач у вашому терміналі.
  • Пари відкритих і закритих ключів SSH.
  • Можна створити простий сценарій bash за допомогою vi або вашого улюбленого редактора та протестувати його.
  • Можливість використовувати crontab для автоматизації виконання сценарію.

Вступ

Використання rsync через SSH не настільки потужне, як lsyncd (що дозволяє вам спостерігати за змінами в каталозі чи файлі та зберігати він синхронізується в режимі реального часу) або такий гнучкий, як rsnapshot (який пропонує можливість резервного копіювання кількох цілей з однієї машини). Однак він надає можливість оновлювати два комп’ютери за розкладом, який ви визначаєте.

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

Для цієї процедури ви будете виконувати дії як користувач root. Або увійдіть як root, або скористайтеся командою sudo -s, щоб перейти на користувача root у вашому терміналі.

Встановлення rsync

Хоча rsync може бути вже встановлено, найкраще оновити rsync до останньої версії на вихідному та цільовому комп’ютерах. Щоб переконатися, що rsync встановлено та оновлено, виконайте на обох комп’ютерах наступне:

dnf install rsync

Якщо пакет не встановлено, dnf попросить вас підтвердити встановлення, якщо він уже встановлений, dnf шукатиме оновлення та запропонує його встановити.

Підготовка середовища

У цьому конкретному прикладі використовуватиметься rsync на цільовій машині для отримання з джерела замість надсилання з джерела до цільового. Для цього вам потрібно налаштувати пару ключів SSH. Після створення пари ключів SSH і підтвердження доступу без пароля з цільового комп’ютера до вихідного комп’ютера можна починати.

Параметри rsync і налаштування сценарію

Перш ніж ми страшенно захопимося налаштуванням сценарію, нам спочатку потрібно вирішити, які параметри ми хочемо використати з rsync. Є багато можливостей, тому перегляньте посібник для rsync. Найпоширенішим способом використання rsync є використання параметра -a, тому що -a, або archive, поєднує кілька параметрів в один і це дуже поширені варіанти. Що включає -a?

  • -r, рекурсує каталоги
  • -l, підтримує символічні посилання як символічні посилання
  • -p, зберігає дозволи
  • -t, зберігає час модифікації
  • -g, зберігає групу
  • -о, зберігає власника
  • -D, зберігає файли пристрою

Єдині інші параметри, які нам потрібно вказати в цьому прикладі:

  • -e, визначає віддалену оболонку для використання
  • --delete, який говорить, що якщо в цільовому каталозі є файл, який не існує в джерелі, позбутися його

Далі нам потрібно налаштувати сценарій, створивши для нього файл (знову ж таки, скористайтеся улюбленим редактором, якщо ви не знайомі з vi). Щоб створити файл, просто скористайтеся цією командою:

vi /usr/local/sbin/rsync_dirs

А потім зробіть його виконуваним:

chmod +x /usr/local/sbin/rsync_dirs

Тестування

Тепер створення сценаріїв робить його надзвичайно простим і безпечним, тож ви можете безстрашно тестувати його. Зверніть увагу, що URL-адреса, яка використовується нижче, це "source.domain.com". Замініть його на домен або IP-адресу вашого власного вихідного комп’ютера, обидва будуть працювати. Також пам’ятайте, що в цьому прикладі сценарій створюється на «цільовому» комп’ютері, оскільки файл витягується з вихідного комп’ютера:

#!/bin/bash
/usr/bin/rsync -ae ssh --delete root@source.domain.com:/home/your_user /home

Важливо

У цьому випадку ми припускаємо, що ваш домашній каталог не існує на цільовій машині. Якщо він існує, ви можете створити його резервну копію перед виконанням сценарію!

Тепер запустіть сценарій:

/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

Файл, який ми щойно створили в цільовому файлі, тепер має зникнути, оскільки він не існує в джерелі.

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

Автоматизація всього

Можливо, ми не захочемо вручну запускати цей сценарій кожного разу, коли ми хочемо синхронізуватися, тому наступним кроком буде робити це автоматично. Припустімо, ви хочете запускати цей сценарій щовечора об 23:00. Щоб автоматизувати це, використовуйте crontab:

crontab -e

Це призведе до запуску cron, який може виглядати приблизно так:

# Відредагуйте цей файл, щоб представити завдання, які виконуватиме cron.
#
# Кожне завдання для запуску має бути визначено в одному рядку
# вказуючи різними полями, коли завдання буде запущено
# і яку команду виконати для завдання
#
# Щоб визначити час, ви можете надати конкретні значення
# хвилина (м), година (год), день місяця (дом), місяць (пн),
# і день тижня (dow) або використовуйте «*» у цих полях (для «будь-якого»).
#
# Зверніть увагу, що завдання будуть запускатися на основі системи cron
# поняття daemon про час і часові пояси.
#
# Вихідні дані завдань crontab (включаючи помилки) надсилаються
# електронним листом користувачу, якому належить файл crontab (якщо не перенаправлено).
#
# Наприклад, ви можете створити резервну копію всіх ваших облікових записів користувачів
# о 5:00 щотижня з:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# Для отримання додаткової інформації дивіться сторінки посібника crontab(5) і cron(8)
#
Команда # m h dom mon dow
Cron налаштовано на 24-годинний формат, тому для запису внизу цього файлу нам знадобиться:

00 23 * * * /usr/local/sbin/rsync_dirs

Це говорить про виконання цієї команди о 00 хвилин, 23 години, щодня, щомісяця та щодня тижня. Збережіть запис cron за допомогою:

Shift : wq!

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

Додаткові прапори

-n : Виконати без проблем, щоб побачити, які файли будуть передані
-v : вивести список усіх файлів, які передаються
-vvv : надати інформацію про налагодження під час передачі файлів
-z : щоб увімкнути стиснення під час передачі 

Висновки

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

Author: Steven Spencer

Contributors: Ezequiel Bruni, tianci li, Ganna Zhyrnova