Інкрементні бекапи на VPS за допомогою rsync і cron | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
Ex. VAT Ex. VAT 0%

Інкрементні бекапи на VPS за допомогою rsync і cron

Вступ

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

Цей мануал пояснює, як налаштувати інкрементні бекапи, використовуючи:

  • rsync — ефективний інструмент копіювання файлів
  • жорсткі посилання (hard links) — щоб уникнути дублювання даних у кожному бекапі
  • cron — для автоматичного запуску резервного копіювання

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

Як працюють інкрементні бекапи з rsync

rsync надає дві ключові можливості:

  1. Синхронізація лише змінених файлів
  2. --link-dest — створює жорсткі посилання на не змінені файли, що дозволяє мати декілька «повних» каталогів бекапів без додаткових витрат дискового простору.

Приклад структури каталогів:

/backups/ daily.0/ - today's backup daily.1/ - yesterday's backup daily.2/ - backup from 2 days ago

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

Вимоги

На VPS має бути:

  • Встановлений Linux
  • Доступ root або користувач із sudo
  • Достатньо місця на диску для знімків бекапів
  • Опціонально: віддалене сховище для резервного копіювання на інший сервер

Встановіть rsync, якщо він ще не встановлений:

sudo apt update

sudo apt install rsync

Info

Важливо: Зупиніть сервери баз даних або виключіть їхні каталоги даних з бекапу. Бекап працюючих баз даних через rsync може призвести до пошкоджених резервних копій.

Створення каталогів для бекапів

Створіть каталоги для зберігання бекапів. Зазвичай це:

  • Локальна файлова система: /backups/
  • Зовнішній диск: /mnt/storage/backups/
  • Віддалений сервер через SSH: user@backup-server:/data/backups/

Приклад (локально):

sudo mkdir -p /backups

sudo chmod 700 /backups

Базова команда rsync для інкрементних бекапів

Основна команда rsync:

rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/

Пояснення:

  • -a — режим архівування (зберігає права доступу, власників, часові мітки, символічні посилання)
  • --delete — видаляє файли в бекапі, які були видалені з джерела
  • --link-dest — створює жорсткі посилання на не змінені файли з попереднього знімка
  • /source/data/ — каталог, який потрібно забекапити
  • /backups/daily.0/ — сьогоднішній знімок

Скрипт ротації щоденних знімків

Скрипт виконує:

  1. Ротацію існуючих бекапів
  2. Створення нового інкрементного бекапу
  3. Збереження N днів (у прикладі — 7)

Створіть файл скрипта:

sudo nano /usr/local/bin/backup_daily.sh

Зі змістом:

#!/bin/bash BACKUP_DIR="/backups/" SOURCE="/" EXCLUDE="/etc/backup-exclude.txt" DAYS="7" #REMOTE_USER="<YOUR_REMOTE_USER>" #REMOTE_SERVER="<YOUR_REMOTE_SERVER>" REMOTE_DIR="/backups/" # Rotate for ((i=DAYS-1; i>=0; i--)); do if [ -d "$BACKUP_DIR/daily.$i" ]; then rm -rf "$BACKUP_DIR/daily.$((i+1))" mv "$BACKUP_DIR/daily.$i" "$BACKUP_DIR/daily.$((i+1))" fi done # Prepare backup directories mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Perform incremental backup rsync -a --delete \ --link-dest="$BACKUP_DIR/daily.1" \ --exclude-from="$EXCLUDE" \ "$SOURCE" "$BACKUP_DIR/daily.0" if [ -n "$REMOTE_USER" ] && [ -n "$REMOTE_SERVER" ] && [ -n "$REMOTE_DIR" ]; then rsync -azv --delete "$BACKUP_DIR" "$REMOTE_USER@$REMOTE_SERVER:$REMOTE_DIR" fi

Збережіть файл і вийдіть. Зробіть його виконуваним:

sudo chmod +x /usr/local/bin/backup_daily.sh

За потреби відредагуйте змінні у верхній частині скрипта. Наприклад, SOURCE, якщо не потрібно бекапити всю файлову систему.

Виключення непотрібних каталогів

Створіть файл виключень:

sudo nano /etc/backup-exclude.txt

Типові виключення:

  • /proc
  • /sys
  • /tmp
  • /run
  • /dev
  • /mnt
  • /media
  • /var/cache
  • /backups

Автоматичне створення бекапів за допомогою cron

Відредагуйте crontab:

sudo crontab -e

Додайте рядок (щоденний бекап о 03:00):

0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1

Це забезпечує створення автоматичних бекапів.

Бекап на віддалений сервер (опціонально)

Створіть каталог на віддаленому сервері:

mkdir -p /backups

Переконайтеся, що ключі SSH налаштовані. Виконайте наступну команду, щоб згенерувати свій ключ SSH:

ssh-keygen

Замініть <YOUR_REMOTE_USER> на ваше ім'я користувача на віддаленому сервері, <YOUR_REMOTE_SERVER> на ім'я домену вашого віддаленого сервера та виконайте наступну команду, щоб скопіювати свій ключ SSH на віддалений сервер:

ssh-copy-id <YOUR_REMOTE_USER>@<YOUR_REMOTE_SERVER>

Розкоментуйте REMOTE_USER, REMOTE_SERVER змінні у верхній частині вашого backup_daily.sh, замініть <YOUR_REMOTE_USER> на ваше ім'я користувача на віддаленому сервері, <YOUR_REMOTE_SERVER> на ім'я домену вашого віддаленого сервера та збережіть backup_daily.sh, щоб увімкнути віддалене резервне копіювання.

Завантаження бекапів у INTROSERV CloudBox

INTROSERV надає онлайн-сховище для автоматичного або ручного збереження захищених копій ваших даних. Для використання CloudBox увійдіть у веб-інтерфейс і додайте свій публічний SSH-ключ у профілі (налаштування профілю — у правому верхньому куті).

CloudBox profile settings

Вставте публічний SSH-ключ у розділ "Public keys".

CloudBox public SSH key section

Розкоментуйте REMOTE_USER, REMOTE_SERVER змінні у верхній частині вашого backup_daily.sh, замініть <YOUR_REMOTE_USER> на ваше ім'я користувача на сервері CloudBox, <YOUR_REMOTE_SERVER> на ім'я домену вашого сервера CloudBox та збережіть backup_daily.sh, щоб увімкнути віддалене резервне копіювання.

Тестування бекапів

Перед використанням обов'язково перевірте коректність роботи:

  1. Запустіть скрипт вручну: sudo /usr/local/bin/backup_daily.sh
  2. Перевірте розміри бекапів: du -sh /backups/*. Лише один бекап має бути великим.
  3. Перевірте цілісність файлів: ls -l /backups/daily.0/etc/

Відновлення даних

Відновлення окремого файлу:

cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/

Відновлення всієї системи:

sudo rsync -a /backups/daily.0/ /

Info

Увага: системні файли будуть перезаписані.

Безпека

  • Скористайтеся строгими правами доступу до каталогів резервного копіювання (chmod 700).
  • У SSH використовуйте лише ключі, відключіть паролі.
  • Не зберігайте бекапи на тому ж диску, що і VPS.
  • Для віддалених бекапів використовуйте шифрування (LUKS тощо).

Моніторинг і логування

Логи вже налаштовані через cron: /var/log/backup.log

Регулярно перевіряйте логи:

tail -f /var/log/backup.log

Висновок

Використання rsync разом із cron забезпечує:

  • Швидкі інкрементні бекапи
  • Ефективне використання диску завдяки hard links
  • Просте відновлення
  • Повністю автоматизований процес

Метод надійний, простий для початківців і чудово підходить для Linux VPS.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA