
Якщо ви керуєте серверами Linux або просто маєте комп'ютер з даними, які ви не можете дозволити собі втратити, навчитися використовувати rsync для автоматизації резервного копіювання Це практично обов'язково. Немає потреби налаштовувати дорогий пакет програмного забезпечення чи покладатися на пропрієтарні інструменти: за допомогою кількох добре продуманих команд ви можете мати надійну, ефективну та просту в обслуговуванні систему резервного копіювання.
У цьому посібнику ви побачите Від основ rsync до розширеного редагуванняЛокальні резервні копії, віддалені резервні копії через SSH, резервні копії в стилі Time Machine зі знімками, готові до роботи сценарії, cron, таймери systemd, виключення, ротації та перевірка. Дивіться наші Порівняння методів резервного копіювання визначитися зі стратегією. Ідея полягає в тому, щоб завершити статтю чітким планом і командами, які ви можете практично скопіювати та адаптувати до свого середовища.
Що таке rsync і чому його так часто використовують для резервного копіювання?
Rsync — це інструмент командного рядка, призначений для синхронізувати файли та каталоги між двома місцями, або на одному комп'ютері, або між різними машинами, зазвичай через SSH або за допомогою власного демона rsyncd.
Перевага rsync над простим cp або scp полягає в тому, що він реалізує розумний алгоритм диференціальний блоковий переносВін порівнює джерело та призначення і щоразу надсилає лише зміни, а не весь файл. Якщо у вас багато даних і ви змінюєте лише невеликі фрагменти, економія часу та пропускної здатності величезна.
Крім того, rsync може зберегти практично всі метаданідозволи, власники, групи, позначки часу, символічні посилання, пристрої… Ось чому це так корисно для «серйозних» резервних копій, де важливий не лише вміст, а й те, як налаштовано файлову систему.
Ще однією важливою перевагою є те, що rsync працює як локально, так і віддаленоВи можете використовувати його для синхронізації двох папок на одному сервері, для вилучення даних з віддаленого сервера на резервну машину або для передачі даних на віддалений NAS або VPS за допомогою SSH.

Встановлення та тестування rsync на різних дистрибутивах
Хоча багато дистрибутивів вже постачаються з встановленим rsync, це гарна ідея Перевірте встановлення та оновіть його до останньої версії. як на вихідному, так і на цільовому комп’ютерах, перш ніж монтувати автоматичні резервні копії.
На системах на базі Debian або Ubuntu ви можете зробити щось просте, як-от:
rsync --version
sudo apt update
sudo apt install rsync
У таких дистрибутивах, як RHEL, CentOS, Rocky Linux або інших похідних, процедура буде дуже схожою, змінюючи менеджер пакетів, але з тією ж ідеєю переконайтеся, що rsync доступний та оновлений в обох крайнощах.
rsync --version
sudo dnf install rsync # En sistemas modernos
sudo yum install rsync # En sistemas más antiguos
Основні параметри rsync, які ви будете використовувати постійно
Хоча rsync має непоганий арсенал параметрів, на практиці для резервного копіювання ви витратите 90% свого часу, використовуючи... невеликий набір опцій що слід запам'ятати.
Загальна структура команди досить проста, але є одна деталь, яка додає багато можливостей: завершальна коса риска в шляхах змінює поведінку.
Загальний синтаксис:
rsync ORIGEN DESTINO
Ключова відмінність полягає в тому, як ви обробляєте каталог вихідного коду:
# Copia el directorio como tal dentro del destino
rsync -av /source/dir /backup/
# Копіювати ТІЛЬКИ вміст каталогу до місця призначення
rsync -av /джерело/каталог/ /резервне копіювання/
Деякі з найпоширеніших варіантів резервного копіювання особливо практичні, оскільки Вони поєднують багато речей у короткому тексті.:
- -a: режим файлу. Еквівалентно -rlptgoD (рекурсивний, зберігає символічні посилання, дозволи, позначки часу, групу, власника та спеціальні файли).
- -v: "Докладний" режим. Показує, що робиться та до яких файлів звертається.
- -z: стискає дані під час передачі, ідеально підходить для віддалених копій через Інтернет.
- -h: робить розміри "гарними" (MB, GB…), ідеальними для людей.
- -P: поєднує файли прогресу та часткові файли, щоб побачити, як ідуть справи, та мати можливість продовжити.
- –Видалити: видаляє у місці призначення файли, яких більше немає у джерелі, залишаючи точну копію.
- -n / –пробний запуск: імітує виконання, нічого не торкаючись, чудово підходить для того, щоб нічого не псувати.
- –виключити / –виключити-з: дозволяє виключити шаблони або повний список маршрутів, які ви не хочете копіювати.
- –призначення-посилання: створює жорсткі посилання з попередньою копією, основу інкрементальних резервних копій типу Time Machine.
Ручні локальні копії та перші приклади
Перший крок перед автоматизацією чогось – це мати чіткі та перевірені команди копіювання вручнуДавайте розглянемо типові випадки, які ми пізніше використовуватимемо в скриптах.
Якщо ви хочете клонувати свій домашній каталог у локальний резервний дискМінімальна команда виглядатиме так:
rsync -av /home/usuario/ /mnt/disco_backup/usuario/
Цей rsync сканує ваш головна сторінка повністю зберігає дозволи, дати та структуруі копіює лише те, чого бракує або що змінилося з минулого разу, що вже є дуже акуратною інкрементальною копією без ускладнень.
Ще один класичний приклад – синхронізація дані проєкту, фотографії чи документи між двома папками на одному сервері або навіть на різних дисках, щоб друга локальна гра завжди була свіжою.
rsync -av /media/fotos/ /backup/fotos/
Коли йдеться про конфіденційні системні дані, такі як /etc або /var/wwwЦілком нормально бажати отримати точну копію, видаляючи з резервної копії те, що зникає в оригіналі. Саме тут і з'являється відома опція видалення.
rsync -av --delete /var/www/ /backup/www/
Безпечне віддалене резервне копіювання за допомогою SSH
Де rsync справді сяє, так це коли ви поєднуєте його з SSH для відправки копій з сервераТаким чином, ви можете зберігати свої дані на іншому вузлі вашої мережі, NAS або VPS в Інтернеті. Таким чином, ви не залежите від одного пристрою та дотримуєтеся частини відомого правила 3-2-1 (принаймні одна копія поза межами сайту).
В ідеалі, вам слід налаштувати автентифікацію за допомогою відкритого ключа замість постійного ручного введення паролів. Після того, як ви скопіюєте ключ на резервний сервер, команди стануть дуже інтуїтивно зрозумілими.
# Empujar datos locales a un servidor remoto de backup
rsync -avz /etc/ backup@servidor-remoto:/backups/etc/
# Перенесення даних з віддаленого сервера на резервну машину
rsync -avz резервна копія@віддалений-сервер:/var/www/ /резервні копії/www/
У дещо уточнених сценаріях ви можете налаштувати SSH-шифрування, порт або стиснення з самого rsync з опцією -e, наприклад, якщо ваш сервер прослуховує інший порт або ви хочете оптимізувати повільне з'єднання.
rsync -avz \
-e "ssh -p 2222 -c -o Compression=no" \
/origen/ backup@servidor-remoto:/destino/
Корисний трюк, коли є слабке з’єднання або спільні мережі, полягає в використанні –bwlimit, щоб уникнути перевантаження посилання і не залишати нікого без інтернету під час запуску масштабного резервного копіювання.
rsync -avz --bwlimit=5000 /datos/ backup@servidor-remoto:/backups/datos/
Повні, диференціальні та інкрементальні резервні копії за допомогою rsync
Хоча rsync вже виконує диференціальні передачі на рівні блоків, з точки зору стратегії резервного копіювання варто розглянути це. три типи копій: повні, диференціальні та інкрементальніякі ви можете реалізувати безпосередньо за допомогою опцій rsync.
Повна копія є простою: вона відтворює весь вміст джерела в місці призначення, ідеально підходить як початкове резервне копіювання або для отримання чистого посилання.
# Copia completa de un árbol de directorios
rsync -a /ruta/origen/ /ruta/destino/
Диференціальне копіювання базується на цьому фундаменті та зосереджується на узгодженні місця призначення з джерелом, копіюванні змін та видаленні того, що більше не існує. Саме це зазвичай мається на увазі, коли йдеться про... мати дзеркало системи.
# Copia diferencial, manteniendo el destino idéntico al origen
rsync -a --delete /ruta/origen/ /ruta/destino/
Найцікавіша частина — це «справжнє» інкрементне резервне копіювання, де, окрім синхронізації, Ви зберігаєте історію за датою без дублювання данихСаме тут і вступає в дію параметр –link-dest, який створює жорсткі посилання на попередню копію для файлів, що не змінилися.
# Copia incremental apoyada en una copia previa
rsync -a --link-dest=/ruta/a/copiaprevia \
/ruta/origen/ /ruta/destino-incremental/
За такого підходу кожна папка резервного копіювання виглядає як повна копія, але внутрішньо Ідентичні файли спільно використовують блоки на дискуЦе значно зменшує використовуваний простір і дозволяє легко переглядати історичні знімки.
Резервні копії в стилі Time Machine зі знімками та жорсткими посиланнями
Багато людей хочуть відтворити в Linux зручність Машина часу macOS зі знімками за датоюЗа допомогою rsync це цілком можливо, якщо поєднати --link-dest, невелику оболонку та певну організацію.
Ідея полягає в тому, щоб підтримувати поточний каталог, який вказує на останню успішну резервну копію, і водночас створювати папки з позначкою часу (дата-час) що представляють кожен знімок. Незмінені файли пов'язані жорсткими посиланнями з попереднім знімком, а нові блоки записуються лише тоді, коли є фактичні відмінності.
Типова команда в цій схемі може бути приблизно такою:
rsync -avPh --delete \
--link-dest="$TARGETDIR/current" \
"$SOURCEDIR/$USER/" \
"$TARGETDIR/$USER-$TIMESTAMP"
Потім скрипт оновлює символічне посилання поточний, щоб він завжди вказував на найновіший знімокі вести невелику історію, упорядковану за датою. Завдяки цьому ви можете переглядати старіші копії, просто ввійшовши до папки, яка вас цікавить.
Автоматизація відбувається природно: ви зберігаєте скрипт у щось на кшталт /usr/local/bin/rsync-time-machine і заплануйте його щоденний запуск за допомогою cron у зручний для вас час.
0 5 * * * bash /usr/local/bin/rsync-time-machine
Автоматизуйте резервне копіювання за допомогою cron щодня
Настає момент, коли робити копії вручну вже не має сенсу; звичайним рішенням є Планування резервного копіювання за допомогою cron щоб вони запускалися автоматично в години поза піковою навантаженістю (наприклад, рано вранці), і ви могли забути про них, окрім як час від часу перевіряти журнали.
Процес завжди однаковий: ви готуєте скрипт, який створює повну копію з усіма опціями (виключення, журнали тощо), надаєте йому дозволи на виконання та підключаєте його до crontab відповідного користувача або до root-права, якщо це передбачає дотик до всієї системи.
Прикладом простого скрипта для локального копіювання може бути:
#!/bin/bash
SOURCE_DIR="/home"
BACKUP_DIR="/backup/home"
LOG_FILE="/var/log/backup/rsync-local.log"
DATE=$(date +"%Y-%m-%d %H:%M:%S")
mkdir -p «$BACKUP_DIR» «$(ім'я_каталогу «$LOG_FILE»)»
echo "Розпочато локальне резервне копіювання" >> "$LOG_FILE"
rsync -av – видалити
–виключити='*.tmp'
–виключити='.кеш'
–exclude='Завантаження/*' \
«$SOURCE_DIR/» «$BACKUP_DIR/» >> «$LOG_FILE» 2>&1
якщо; тоді
echo » Резервне копіювання успішно завершено» >> «$LOG_FILE»
ще
echo » Резервне копіювання з помилками» >> «$LOG_FILE»
fi
Після того, як ви, наприклад, введете скрипт, /usr/local/bin/rsync-local-backup.sh І позначений як виконуваний файл, ви додаєте його до cron, щоб він запускався у певний час.
sudo chmod +x /usr/local/bin/rsync-local-backup.sh
sudo crontab -e
Всередині crontab ви можете помістити щось на кшталт:
0 2 * * * /usr/local/bin/rsync-local-backup.sh
Таймери systemd: сучасна альтернатива cron
У сучасних системах часто варто Використовуйте таймери systemd замість cronособливо якщо ви хочете краще інтегрувати сервіси, керувати мережевими залежностями або мати централізовані журнали в journalctl.
Ідея полягає у визначенні служби, яка запускатиме ваш скрипт резервного копіювання, та таймера, який вказуватиме, коли його запускати. Служба може виглядати приблизно так:
Description=Rsync Backup Service
After=network-online.target
Wants=network-online.target
Type = oneshot
ExecStart=/usr/local/bin/rsync-remote-backup.sh
Користувач=корінь
StandardOutput=журнал
StandardError=журнал
Тайм-аут сек=7200
WantedBy = multi-user.target
А пов'язаний таймер буде визначено наступним чином, для a щоденне резервне копіювання о 2:00 з певною випадковістю, щоб не перевантажити все одразу:
Description=Daily Rsync Backup Timer
Requires=rsync-backup.service
У календарі=*-*-* 02:00:00
Постійний=істинний
Випадкова затримка (сек)=10 хв
WantedBy=timers.target
Після цього залишається лише перезавантажити systemd, активувати таймер і перевірити, чи він правильно програмується, і що У журналі обслуговування показано, що копії запускаються, коли настає час.
sudo systemctl daemon-reload
sudo systemctl enable --now rsync-backup.timer
systemctl list-timers
journalctl -u rsync-backup.service
Організуйте чергування резервних копій: щоденне, щотижневе та щомісячне
Якщо вам потрібне щось трохи складніше, ніж одна статична копія, ви можете налаштувати структуру чергування резервних копій: щоденне, щотижневе та щомісячневикористання жорстких посилань для економії місця та пошуку для очищення старих файлів.
Класичний шаблон передбачає наявність поточного каталогу, який оновлюється щоразу за допомогою rsync, а потім клонування цього дерева з жорсткими посиланнями на щоденні, щотижневі та щомісячні папки залежно від дня.
#!/bin/bash
SOURCE_DIR="/var/www"
BACKUP_ROOT="/backup/www"
CURRENT="$BACKUP_ROOT/current"
DAILY="$BACKUP_ROOT/daily"
WEEKLY="$BACKUP_ROOT/weekly"
MONTHLY="$BACKUP_ROOT/monthly"
DATE=$(date +%Y%m%d)
DOW=$(date +%u)
DOM=$(date +%d)
mkdir -p «$CURRENT» «$DAILY» «$WEEKLY» «$MTHLY»
rsync -av –delete –link-dest=»$CURRENT» \
«$SOURCE_DIR/» «$CURRENT/»
&& cp -al «$CURRENT» «$DAILY/$DATE»
&& cp -al «$CURRENT» «$WEEKLY/$DATE»
&& cp -al «$CURRENT» «$MONTHLY/$DATE»
знайти «$DAILY» -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
знайти «$WEEKLY» -maxdepth 1 -type d -mtime +28 -exec rm -rf {} \;
знайти «$МІСЯЦЯЧНО» -maxdepth 1 -type d -mtime +365 -exec rm -rf {} \;
З цією системою у вас є досить розумне історичне вікно без заповнення диска повними копіями, і кожен знімок залишається доступним для навігації, як звичайна папка.
Якщо ваші дані швидко змінюються або є дуже великими, ви можете налаштувати періоди зберігання, частоту або навіть поєднати це зі знімками LVM або ZFS, щоб забезпечити узгодженість баз даних або віртуальних машин.
Контролюйте, перевіряйте та дізнавайтеся, чи корисні ваші резервні копії.
Щоденне виконання завдань резервного копіювання – це чудово, але якщо ніхто не перевірить результат Це вам не дуже допоможе. Важливо налаштувати базовий моніторинг, щоб знати, чи було зроблено останню резервну копію і коли саме.
Проста тактика полягає в тому, щоб залишати невелику позначку в папці призначення щоразу, коли резервне копіювання успішно завершується, наприклад, файл .last-backup-success з датою. Тоді зовнішній скрипт або навіть перевірка Nagios/Icinga можуть попередити вас, якщо цей файл занадто старий.
MARKER="/backup/www/.last-backup-success"
if ; then
echo "Marcador de backup no encontrado"
exit 1
fi
Ще одна корисна звичка — перевіряти Перевірте журнали rsync на наявність помилок або незвичайної швидкості передачі данихСкрипт, який витягує статистику, таку як «Кількість файлів», «Загальний розмір», «Прискорення» тощо, дає вам швидке уявлення про те, як все йде.
І, звісно, що справді має значення, так це те, що потрібно час від часу до цього звикати. зробити справжню реставраціюВізьміть певний файл, відновіть версію з учорашнього дня або минулого тижня та перевірте, чи він правильно відкривається. Це єдиний спосіб переконатися, що якщо одного дня щось піде не так, ваші резервні копії будуть придатними для цього завдання.
Якщо ви об'єднаєте всі ці складові — добре налаштований rsync, автоматизацію за допомогою cron або systemd, розумну ротацію, моніторинг та тестування відновлення — ви отримаєте надійна, гнучка та недорога система резервного копіювання Linux, який повною мірою використовує переваги безкоштовного програмного забезпечення, не змушуючи вас відмовлятися від зручності чи надійності.
