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

Синхронізація з 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