bolt Valebyte VPS from $4/mo — NVMe, 60s deploy.

Get a VPS arrow_forward

Як створити бекап за допомогою rsync?

calendar_month March 17, 2025 schedule 9 хв. читання visibility 742 переглядів
person
Valebyte Team
Як створити бекап за допомогою rsync?
summarize

TL;DR

  • ['Rsync використовує алгоритм delta-transfer, передаючи тільки змінені частини файлів для економії трафіку.', 'Утиліта зберігає права доступу, власників і тимчасові мітки файлів при синхронізації даних.', 'Опція --link-dest дозволяє створювати інкрементальні бекапи, заощаджуючи місце за рахунок жорстких посилань.', 'Rsync підтримує роботу через SSH, забезпечуючи безпечну передачу даних на віддалені сервери.', 'Процес резервного копіювання легко автоматизується за допомогою планувальника задач cron.']

Як створити бекап за допомогою rsync?

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

Привіт, колеги! У світі VPS і хостингу, де кожен байт даних на рахунку, а простій може коштувати репутації та грошей, питання резервного копіювання стоїть як ніколи гостро. Ми у Valebyte знаємо, наскільки важливо мати надійний план відновлення. Сьогодні поговоримо про один з найпотужніших і гнучких інструментів в арсеналі будь-якого сисадміна – rsync.

rsync – це не просто утиліта для копіювання файлів. Це швейцарський ніж для синхронізації, який може ефективно переносити дані локально або по мережі, мінімізуючи трафік за рахунок передачі тільки змінених частин файлів. Його алгоритм "delta-transfer" дозволяє значно економити час і пропускну здатність, що особливо актуально для великих обсягів даних або віддалених серверів. У цій статті ми розберемо rsync від азів до просунутих сценаріїв, щоб ви могли будувати по-справжньому відмовостійкі системи.

Чому саме rsync для бекапів?

Illustration of data being backed up from a server to a secure location, representing data protection and backup.

Коли мова заходить про бекапи, у нас є безліч варіантів: від простого cp або tar до спеціалізованих рішень на кшталт BorgBackup або Duplicity. Так чому ж rsync часто є кращим вибором?

  • Ефективність: Передає тільки зміни, а не весь файл цілком. Це критично для великих файлів і повільних з'єднань.
  • Гнучкість: Працює як локально, так і віддалено (через SSH).
  • Збереження атрибутів: Може зберігати права доступу, власників, часові мітки, символічні посилання та інші метадані.
  • Інкрементальні бекапи: За допомогою опції --link-dest можна створювати ротовані інкрементальні бекапи, які займають мало місця, але при цьому кожна копія виглядає як повний бекап.
  • Простота: Базові команди досить прості для освоєння, а глибоке налаштування доступне через безліч опцій.
  • Надійність: Широко використовується і перевірений часом.

Крок 1: Встановлення rsync

Перш ніж почати, переконайтеся, що rsync встановлено на вашому сервері (і, якщо ви робите віддалений бекап, то і на цільовому сервері). На більшості сучасних дистрибутивів Linux він встановлений за замовчуванням. Якщо ні, установка займе всього хвилину.

Для Debian/Ubuntu:

sudo apt update
sudo apt install rsync

Для CentOS/RHEL/Fedora:

sudo yum install rsync # або dnf install rsync для Fedora/RHEL 8+

Після установки можете перевірити версію:

Потрібен надійний сервер для ваших rsync-бекапів?

Захистіть свої дані за допомогою потужних і доступних VPS. Ідеально підходить для регулярного резервного копіювання. — from €4.49/mo.

Почати з VPS →
rsync --version
rocket_launch Quick pick

Looking for a server that just works?

Valebyte VPS — NVMe, 24/7 support, deploy in 60 seconds.

View VPS plans arrow_forward

Крок 2: Базова команда rsync для бекапу

Найпростіша команда rsync для створення бекапу виглядає так:

rsync -avz /path/to/source/ /path/to/destination/

Давайте розберемо ці флаги, оскільки вони є основою для більшості операцій з rsync:

  • -a (--archive): Це "режим архівування". Він еквівалентний комбінації -rlptgoD.
    • -r (--recursive): Рекурсивне копіювання директорій. Без нього будуть скопійовані тільки файли у вихідній директорії.
    • -l (--links): Копіювати символічні посилання як символічні посилання.
    • -p (--perms): Зберігати права доступу.
    • -t (--times): Зберігати час модифікації.
    • -g (--group): Зберігати групу.
    • -o (--owner): Зберігати власника (вимагає прав root на цільовій машині).
    • -D (--devices --specials): Зберігати файли пристроїв і спеціальні файли.
  • -v (--verbose): Виводити детальну інформацію про процес. Дуже корисно для налагодження і розуміння, що відбувається.
  • -z (--compress): Стискати дані під час передачі. Це значно економить трафік, особливо при передачі текстових файлів або файлів, які добре стискаються. Не забудьте, що стиснення відбувається "на льоту" і вимагає ресурсів CPU.

Важливий нюанс зі слешем: Зверніть увагу на слеш в кінці вихідного шляху (/path/to/source/).

  • Якщо ви використовуєте /path/to/source/ (зі слешем), rsync скопіює вміст директорії source в /path/to/destination/.
  • Якщо ви використовуєте /path/to/source (без слеша), rsync скопіює саму директорію source (разом з її вмістом) всередину /path/to/destination/, створивши /path/to/destination/source/.

Приклад локального бекапу:

Припустимо, нам потрібно забекапити директорію /var/www/mywebsite в /mnt/backups/daily/:

sudo rsync -avz /var/www/mywebsite/ /mnt/backups/daily/mywebsite_$(date +%Y%m%d)/

Тут $(date +%Y%m%d) додасть до імені директорії поточну дату, створюючи унікальний каталог для кожного бекапу. Це корисно для створення простих ротованих бекапів, але не дуже ефективно по місцю.

Крок 3: Віддалений бекап по SSH

Одна з сильних сторін rsync – його здатність працювати по SSH. Синтаксис трохи змінюється:

rsync -avz -e "ssh -p 22" /path/to/source/ user@remote_host:/path/to/destination/
  • -e "ssh -p 22": Вказує rsync використовувати SSH для з'єднання. Ви можете вказати нестандартний порт (наприклад, -p 2222) або інші опції SSH.
  • user@remote_host:/path/to/destination/: Стандартний синтаксис SSH для віддаленого шляху.

Для автоматизації віддалених бекапів настійно рекомендуємо використовувати SSH-ключі замість паролів. Це безпечніше і дозволяє запускати бекапи без інтерактивного введення.

ssh-keygen -t rsa -b 4096
ssh-copy-id user@remote_host # скопіює ваш публічний ключ на віддалений хост

Крок 4: Просунуті стратегії бекапу з rsync

Тепер давайте перейдемо до більш цікавих і ефективних методів бекапу.

Інкрементальні бекапи з жорсткими посиланнями (--link-dest)

Це одна з killer-фіч rsync. Вона дозволяє створювати послідовність повних бекапів, які насправді займають місце тільки для змінених файлів. Працює це так: rsync створює нові файли тільки для тих даних, які змінилися з моменту останнього бекапу. Для всіх незмінених файлів він створює жорсткі посилання на їх копії в попередньому бекапі. В результаті кожен бекап виглядає як повний, але споживає місце тільки для дельти.

# Приклад для щоденного бекапу з ротацією
# Створюємо структуру:
# /mnt/backups/latest/ -> символічне посилання на останній повний бекап
# /mnt/backups/2023-10-26/
# /mnt/backups/2023-10-25/
# ...
# 1. Визначаємо шляхи SOURCE="/var/www/mywebsite/" BACKUP_ROOT="/mnt/backups/" CURRENT_DATE=$(date +%Y-%m-%d) LATEST_BACKUP="${BACKUP_ROOT}latest" # Символічне посилання на попередній бекап TARGET_DIR="${BACKUP_ROOT}${CURRENT_DATE}/" # 2. Створюємо цільову директорію, якщо її немає mkdir -p "${TARGET_DIR}" # 3. Запускаємо rsync # --delete: видаляє файли в TARGET_DIR, яких немає в SOURCE (дзеркалювання) # --link-dest: якщо LATEST_BACKUP існує, rsync створює жорсткі посилання на незмінені файли # з LATEST_BACKUP замість їх повторного копіювання. if [ -d "${LATEST_BACKUP}" ]; then rsync -avz --delete --link-dest="${LATEST_BACKUP}" "${SOURCE}" "${TARGET_DIR}" else # Перший бекап, без --link-dest rsync -avz --delete "${SOURCE}" "${TARGET_DIR}" fi # 4. Оновлюємо символічне посилання на останній бекап rm -f "${LATEST_BACKUP}" ln -s "${TARGET_DIR}" "${LATEST_BACKUP}" echo "Бекап успішно створено в ${TARGET_DIR}"

Цей скрипт створює щоденні бекапи, де кожен новий бекап жорстко пов'язаний з попереднім. Видалення старих бекапів безпечне: файли, на які є посилання з інших бекапів, не будуть видалені з диска, поки на них існують посилання. Це дуже потужний інструмент для створення ротованих бекапів з мінімальною витратою місця.

Виключення файлів і директорій (--exclude/--exclude-from)

Часто бувають файли або директорії, які не потрібно бекапити (логи, кеші, тимчасові файли, директорії з завантаженнями). Для цього використовуйте --exclude:

rsync -avz --exclude 'cache/*' --exclude 'logs/*.log' /path/to/source/ /path/to/destination/

Для великої кількості виключень краще використовувати файл:

# exclude-list.txt
cache/
logs/*.log
tmp/
*.bak

rsync -avz --exclude-from=exclude-list.txt /path/to/source/ /path/to/destination/

Інші корисні флаги:

  • --progress: Показує прогрес передачі для кожного файла. Корисно для великих файлів або повільних з'єднань.
  • --stats: Виводить статистику після завершення.
  • --dry-run (-n): Дуже, дуже важливий флаг! Показує, що rsync буде робити, без фактичного виконання змін. Завжди використовуйте його перед першим запуском нової команди rsync, особливо з --delete.
  • --delete: Видаляє файли в цільовій директорії, яких немає у вихідній. Будьте гранично обережні! Використовуйте тільки якщо ви хочете зробити точне дзеркало.
  • --numeric-ids: Важливо при копіюванні між різними системами, де UID/GID можуть не співпадати. Гарантує, що числові ідентифікатори власників і груп зберігаються, а не намагаються бути зіставлені за іменами.
  • --chown=user:group, --chmod=D755,F644: Дозволяє змінити власника/права доступу для скопійованих файлів/директорій на цільовій машині.
  • --bwlimit=KBPS: Обмежує пропускну здатність в кілобайтах в секунду. Корисно, щоб бекап не "забивав" весь канал.
rocket_launch Quick pick

Looking for a server that just works?

Valebyte VPS — NVMe, 24/7 support, deploy in 60 seconds.

View VPS plans arrow_forward

Крок 5: Автоматизація за допомогою Cron

Ручний запуск бекапів – шлях до проблем. Використовуйте Cron для автоматизації. Найкраще створити окремий скрипт для rsync, а потім викликати його з Cron.

Приклад скрипта бекапа (/usr/local/bin/backup_mywebsite.sh):

#!/bin/bash

# --- Конфігурація ---
SOURCE_DIR="/var/www/mywebsite/"
BACKUP_BASE_DIR="/mnt/backups/mywebsite/"
LOG_FILE="/var/log/backup_mywebsite.log"
DATE_FORMAT=$(date +%Y-%m-%d_%H-%M-%S)
CURRENT_BACKUP_DIR="${BACKUP_BASE_DIR}${DATE_FORMAT}"
LATEST_LINK="${BACKUP_BASE_DIR}latest"
EXCLUDE_FILE="/etc/rsync_exclude_mywebsite.txt" # Список виключень

# --- Створення лога і директорії ---
mkdir -p "${CURRENT_BACKUP_DIR}" || { echo "Не вдалося створити директорію бекапа: ${CURRENT_BACKUP_DIR}" | tee -a "${LOG_FILE}"; exit 1; }
echo "--- Запуск бекапа: ${DATE_FORMAT} ---" | tee -a "${LOG_FILE}"

# --- rsync команда ---
RSYNC_CMD="rsync -avz --delete --stats --progress --numeric-ids"

# Додаємо --link-dest, якщо існує попередній бекап
if [ -L "${LATEST_LINK}" ] && [ -d "$(readlink -f ${LATEST_LINK})" ]; then
    RSYNC_CMD="${RSYNC_CMD} --link-dest=$(readlink -f ${LATEST_LINK})"
    echo "Використовується --link-dest з: $(readlink -f ${LATEST_LINK})" | tee -a "${LOG_FILE}"
fi

# Додаємо виключення
if [ -f "${EXCLUDE_FILE}" ]; then
    RSYNC_CMD="${RSYNC_CMD} --exclude-from=${EXCLUDE_FILE}"
    echo "Використовуються виключення з: ${EXCLUDE_FILE}" | tee -a "${LOG_FILE}"
fi

# Виконуємо rsync
${RSYNC_CMD} "${SOURCE_DIR}" "${CURRENT_BACKUP_DIR}" 2>&1 | tee -a "${LOG_FILE}"
RSYNC_EXIT_CODE=${PIPESTATUS[0]} # Отримуємо код виходу rsync

if [ ${RSYNC_EXIT_CODE} -eq 0 ]; then
    echo "Бекап успішно завершено в ${CURRENT_BACKUP_DIR}" | tee -a "${LOG_FILE}"
    # Оновлюємо символічне посилання
    rm -f "${LATEST_LINK}"
    ln -s "${CURRENT_BACKUP_DIR}" "${LATEST_LINK}"
else
    echo "Помилка rsync. Код виходу: ${RSYNC_EXIT_CODE}" | tee -a "${LOG_FILE}"
    # Відправка повідомлення про помилку, якщо потрібно
    # mail -s "Помилка бекапа mywebsite" [email protected] < "${LOG_FILE}"
fi

```html
echo "--- Завершення бекапу: $(date +%Y-%m-%d_%H-%M-%S) ---" | tee -a "${LOG_FILE}"

Зробіть скрипт виконуваним: sudo chmod +x /usr/local/bin/backup_mywebsite.sh

Налаштування Cron-задачі:

Відкрийте таблицю Cron для користувача root (або користувача, від імені якого має запускатися бекап):

sudo crontab -e

Додайте рядок для щоденного запуску, наприклад, о 03:00 ранку:

0 3 * * * /usr/local/bin/backup_mywebsite.sh >/dev/null 2>&1

>/dev/null 2>&1 перенаправляє весь вивід скрипта в нікуди. Якщо ви хочете отримувати листи з виводом скрипта (що дуже корисно для моніторингу), приберіть цю частину або перенаправте вивід у файл.

Важливо: Переконайтеся, що користувач, від імені якого запускається cron-задача, має необхідні права на читання вихідних даних і запис у цільову директорію бекапів.

Крок 6: Тестування та верифікація

Створення бекапів безглузде, якщо ви не можете їх відновити або якщо вони пошкоджені. Завжди тестуйте свій процес відновлення!

  • --dry-run: Як вже згадувалося, використовуйте його перед кожним "бойовим" запуском нової команди rsync.
  • Перевірка цілісності: Періодично відновлюйте частину даних на тестовій машині і перевіряйте їх працездатність. Для простої перевірки можна використовувати diff -qr /path/to/source /path/to/backup, щоб переконатися, що файли ідентичні.
  • Моніторинг логів: Регулярно перевіряйте лог-файл вашого скрипта бекапу на предмет помилок.
  • Сповіщення: Налаштуйте відправку email-сповіщень у випадку збою бекапу.

Висновки

rsync – це неймовірно потужний і універсальний інструмент для вирішення задач резервного копіювання і синхронізації. Від простих локальних копій до складних ротованих інкрементальних бекапів по SSH, він надає гнучкість і ефективність, необхідні в сучасній інфраструктурі. Освоївши його основні опції і просунуті функції, такі як --link-dest, ви зможете побудувати надійну і економічну систему резервного копіювання, яка стане вашим рятувальним колом у випадку непередбачених обставин.

Пам'ятайте: кращий бекап – це той, який ви зможете відновити. Завжди тестуйте свої бекапи, автоматизуйте процес і не забувайте про моніторинг. Безпека ваших даних – це не просто технічна задача, це запорука спокою і безперервності роботи вашого проекту. Удачі у ваших бекап-стратегіях!

Масштабуйте свої бекапи з гнучкими хмарними інстансами

Для ще більшої гнучкості і масштабованості розгляньте наші хмарні інстанси. Ідеально для зростаючих потреб у зберіганні.

Дослідити хмару →
```
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.