Рішення для дзеркального відображення - lsyncd
Передумови¶
- Машина під керуванням Rocky Linux
- Комфортний рівень зі зміною файлів конфігурації з командного рядка
- Знання того, як користуватися редактором командного рядка (тут
vi, але використовуйте свій улюблений редактор) - Вам потрібен доступ root або привілеї
sudo(використанняsudo -sз самого початку є хорошою ідеєю) - Пари відкритих і закритих ключів SSH
- Репозиторії EPEL (додаткові пакети для Enterprise Linux) від Fedora
- Вам потрібно буде ознайомитися з
inotify, інтерфейсом монітора подій - Додатково: знайомство з
tail
Вступ¶
Якщо ви шукаєте спосіб автоматичної синхронізації файлів і папок між комп’ютерами, lsyncd — чудовий варіант. Але ви повинні налаштувати все з командного рядка.
Це програма, яку варто вивчити будь-якому системному адміністратору.
Найкращий опис lsyncd міститься на сторінці довідки. Трохи перефразовуючи, lsyncd — це легке рішення для живого дзеркала, яке неважко встановити. Він не потребує нових файлових систем або блокових пристроїв і не перешкоджає продуктивності локальної файлової системи. Коротше кажучи, він відображає файли.
lsyncd спостерігає за інтерфейсом монітора подій локального дерева каталогів (inotify). Він агрегує та об’єднує події протягом кількох секунд і породжує один (чи більше) процес(ів) для синхронізації змін. За замовчуванням це rsync.
У цьому посібнику ви називатимете систему з оригінальними файлами «джерелом»; той, з яким ви синхронізуєтеся, буде «ціллю». Можна повністю віддзеркалити сервер за допомогою lsyncd, ретельно вказавши каталоги та файли, які потрібно синхронізувати.
Ви також захочете налаштувати пари публічних закритих ключів Rocky Linux SSH для віддаленої синхронізації. У наведених тут прикладах використовується SSH (порт 22).
Встановлення lsyncd¶
Інформація
Станом на цю дату (вересень 2025 року), Rocky Linux 10 з увімкненим EPEL (Додаткові пакети для Enterprise Linux) не містить пакета lsyncd. Щоб використовувати lsyncd на Rocky Linux 10, вам потрібно буде скористатися методом Встановлення lsyncd - вихідний код. Метод RPM тут збережено, оскільки EPEL, ймовірно, збере цей пакет для версії 10 у майбутньому. Ніколи не завадить перевірити, чи доступний пакет, перш ніж збирати його з вихідного коду.
Ви можете встановити lsyncd двома способами. Включено описи кожного методу. RPM, як правило, трохи відстає від вихідних пакетів, але лише трохи. Версія, встановлена методом RPM на момент написання цієї статті, — 2.2.3-5, тоді як версія вихідного коду зараз — 2.3.1. Виберіть спосіб, який вам зручніше.
Встановлення lsyncd - метод RPM¶
Єдине, що вам потрібно спочатку встановити, це сховище програмного забезпечення EPEL від Fedora. Зробіть це за допомогою:
dnf install -y epel-release
Тепер встановіть lsyncd разом із усіма відсутніми залежностями:
dnf install lsyncd
Налаштуйте службу на запуск під час завантаження, але поки не запускайте її:
systemctl enable lsyncd
Встановлення lsyncd - вихідний метод¶
Встановлення з вихідного коду не складний процес.
Встановлення залежностей¶
Вам знадобляться деякі залежності для lsyncd і для створення пакунків із джерела. Встановіть групу «Інструменти розробки»:
dnf groupinstall 'Development Tools'
Увімкніть репозиторій готового до використання конструктора коду:
dnf config-manager --enable crb
Встановіть необхідні залежності:
dnf install lua lua-libs lua-devel cmake unzip wget rsync
Завантаження lsyncd і його збірка¶
Далі вам знадобиться вихідний код:
wget https://github.com/axkibe/lsyncd/archive/master.zip
Розпакуйте файл master.zip:
unzip master.zip
Це створить каталог під назвою «lsyncd-master». Вам потрібно перейти до цього каталогу та створити каталог під назвою "build":
cd lsyncd-master
Потім:
mkdir build
Змініть каталоги, щоб отримати доступ до каталогу збірки:
cd build
Виконайте ці команди:
cmake ..
make
make install
Після завершення двійковий файл lsyncd буде встановлено та готовий до використання в /usr/local/bin
lsyncd Служба Systemd¶
За допомогою методу встановлення RPM служба systemd встановлюється автоматично, але якщо ви встановлюєте з вихідного коду, вам потрібно створити службу systemd. Хоча ви можете запустити двійковий файл без служби systemd, ви хочете переконатися, що він справді запускається під час завантаження. Якщо ні, перезавантаження сервера припинить вашу синхронізацію.
Створення служби systemd відносно просте і заощадить ваш час у довгостроковій перспективі.
Створення службового файлу lsyncd¶
Ви можете створити цей файл будь-де, навіть у кореневому каталозі вашого сервера. Після створення ви можете перемістити його в правильне місце.
vi /root/lsyncd.service`
Вміст цього файлу буде:
[Unit]
Description=Live Syncing (Mirror) Daemon
After=network.target
[Service]
Restart=always
Type=simple
Nice=19
ExecStart=/usr/local/bin/lsyncd -nodaemon -pidfile /run/lsyncd.pid /etc/lsyncd.conf
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/lsyncd.pid
[Install]
WantedBy=multi-user.target
Встановіть щойно створений файл у правильне розташування:
install -Dm0644 /root/lsyncd.service /usr/lib/systemd/system/lsyncd.service
Нарешті, перезавантажте демон systemctl, щоб systemd «бачила» новий службовий файл:
systemctl daemon-reload
Конфігурація lsyncd¶
Для будь-якого методу встановлення lsyncd вам потрібен файл конфігурації: /etc/lsyncd.conf. У наступному розділі описано, як створити та перевірити файл конфігурації.
Зразок конфігурації для тестування¶
Ось приклад спрощеного файлу конфігурації, який синхронізує /home з іншим комп’ютером. Наш цільовий комп’ютер матиме локальну IP-адресу: 192.168.1.40
settings {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd-status.log",
statusInterval = 20,
maxProcesses = 1
}
sync {
default.rsyncssh,
source="/home",
host="root@192.168.1.40",
excludeFrom="/etc/lsyncd.exclude",
targetdir="/home",
rsync = {
archive = true,
compress = false,
whole_file = false
},
ssh = {
port = 22
}
}
Трохи розбиваючи цей файл:
logfileіstatusFileбудуть створені автоматично під час запуску служби.statusInterval- це кількість секунд, яку необхідно зачекати перед записом у файл statusFile.maxProcesses— це кількість процесів, якіlsyncdдозволено створювати. Якщо ви не використовуєте це на завантаженому комп’ютері, достатньо 1 процесу.- У розділі синхронізації
default.rsyncsshговорить про використанняrsyncчерез SSH source=- це шлях до каталогу, з якого ми синхронізуємо.host=- це наш цільовий комп'ютер, з яким ми синхронізуємоexcludeFrom=повідомляєlsyncd, де знаходиться файл виключень. Він повинен існувати, але може бути порожнім.targetdir=- це цільовий каталог, до якого ми надсилаємо файли. У більшості випадків це буде відповідати джерелу, але не завжди.- Потім у нас є розділ
rsync =, і це параметри, з якими ми запускаємо rsync. - Розділ
ssh =вказує порт SSH, який прослуховує цільовий комп’ютер
Якщо ви додаєте більше ніж один каталог для синхронізації, ви повинні повторити весь розділ «синхронізації», включаючи всі відкриваючі та закриваючі дужки для кожного каталогу.
Файл lsyncd.exclude¶
Як зазначалося раніше, файл excludeFrom має існувати. Створіть це зараз:
touch /etc/lsyncd.exclude
Наприклад, якщо ви синхронізуєте папку /etc на своєму комп’ютері, у процесі lsyncd буде багато файлів і каталогів, які потрібно виключити. Кожен виключений файл або каталог знаходиться у файлі, по одному на рядок:
/etc/hostname
/etc/hosts
/etc/networks
/etc/fstab
Перевірка¶
Коли все налаштовано, ви можете перевірити все. Переконайтеся, що наш systemd lsyncd.service запуститься:
systemctl start lsyncd
Якщо після виконання цієї команди не з’являється жодних помилок, перевірте статус служби, щоб переконатися, що:
systemctl status lsyncd
Якщо він показує, що служба запущена, використовуйте tail, щоб побачити кінці двох файлів журналу та переконайтеся, що все відображається нормально:
tail /var/log/lsyncd.log
tail /var/log/lsyncd-status.log
Якщо припустити, що все виглядає правильно, перейдіть до каталогу /home/[user], де [user] є користувачем комп’ютера, і створіть там файл із * touch*.
touch /home/[user]/testfile
Перейдіть на цільовий комп’ютер і подивіться, чи з’явився файл. Якщо так, то все працює. Налаштуйте lsyncd.service для запуску під час завантаження з:
systemctl enable lsyncd
Пам'ятайте про обережність¶
Щоразу, коли ви синхронізуєте набір файлів або каталогів з іншим комп’ютером, уважно подумайте про вплив цього на цільовий комп’ютер. Припустимо, ви повернулися до попереднього прикладу Файл lsyncd.exclude. Чи можете ви уявити, що могло б статися, якби ви не виключили /etc/fstab?
fstab — це файл, який налаштовує накопичувачі на будь-якому комп’ютері Linux. Диски та етикетки майже напевно відрізняються на різних машинах. Наступне перезавантаження цільового комп’ютера, ймовірно, не вдасться.
Висновки та література¶
lsyncd — потужний інструмент для синхронізації каталогу комп’ютера. Як ви бачите, його неважко встановити та не складно обслуговувати.
Ви можете дізнатися більше про lsyncd, відвідавши Офіційний сайт
Author: Steven Spencer
Contributors: Ezequiel Bruni, tianci li, Ganna Zhyrnova