EUR
european

EUR

usa

USD

Russian Ru
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 для инкрементальных бэкапов

Below is the key rsync command:

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

This ensures regular automatic snapshots.

Бэкап на удалённый сервер (опционально)

Создайте каталог на сервере назначения:

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 даёт:

  • быстрые инкрементные бэкапы
  • экономию дискового пространства
  • простое восстановление
  • полностью автоматизированный процесс

Метод надежен, прост и отлично подходит для 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