Резервное копирование и восстановление данных в Linux

TIP

Эта статья — часть серии Linux administration, посвящённой самостоятельному администрированию Linux, Self-Hosting и DevOps. Резервное копирование — не опция. Это необходимость. Без него один сбой может уничтожить месяцы работы.

📌 О чём эта статья?

Сколько стоит ваша система? Данные, конфигурации, пользовательский контент — всё это может исчезнуть в любой момент: сбой диска, ошибка администратора, ransomware.

В современном мире информационных технологий, где данные являются одним из самых ценных активов, резервное копирование и восстановление данных играют ключевую роль в обеспечении стабильности и безопасности операционных систем, таких как Linux. Командная строка Linux предоставляет невероятную гибкость и доступность для решения этих задач.

В этой статье вы узнаете:

  • Принципы надёжного резервного копирования (3-2-1)
  • Как использовать rsync, tar, cpio для бэкапа
  • Современные инструменты: borg, restic
  • Автоматизация с cron
  • Практические примеры и лучшие практики
  • Как проверить, что бэкап работает

WARNING

“Я не делал бэкап — но всё будет хорошо.”
— Последние слова перед катастрофой


🧩 Принцип 3-2-1: основа надёжности

QUOTE

3-2-1 Backup Rule:

  • 3 копии данных (оригинал + 2 бэкапа)
  • На 2 разных типах носителей (HDD, SSD, cloud)
  • 1 копия — вне места хранения (offsite: облако, компьютер друга, другой город)

Пример:

  • Оригинал: сервер дома
  • Копия 1: внешний диск (локально)
  • Копия 2: облако (Backblaze, AWS S3, или удалённый сервер)

INFO

Этот принцип рекомендуется NIST, Veeam, и другими экспертами по ИТ-безопасности.
Источник: NIST SP 800-34 Rev. 1 — Contingency Planning Guide


🛠️ Основные инструменты резервного копирования

1. rsync — синхронизация файлов

rsync — самый популярный инструмент для копирования и синхронизации.

🔹 Преимущества:

  • Инкрементальное копирование (только изменения)
  • Поддержка SSH (безопасная передача)
  • Возобновление после обрыва
  • Сжатие (-z)
  • Синхронизация с удалёнными серверами

🔹 Базовые команды

# Локальный бэкап
rsync -av /home/ /backup/home/
 
# С сжатием и удалением удалённых файлов
rsync -avz --delete /var/www/ user@backup-server:/backups/www/
 
# С SSH-ключом и портом
rsync -av -e "ssh -p 2222" /data/ user@192.168.1.100:/backups/data/

🔹 Флаги:

  • -a — архивный режим (сохраняет права, владельца, символические ссылки)
  • -v — подробный вывод
  • -z — сжатие
  • --delete — удалять файлы на приёмнике, которых нет на источнике
  • --exclude='*.tmp' — исключить файлы

INFO

rsync — идеален для ежедневной синхронизации.
Источник: rsync — Official Documentation


2. tar — создание архивов

tar — стандартный инструмент для архивации.

🔹 Примеры

# Архив без сжатия
tar -cf backup.tar /home/alice/docs/
 
# Сжатие gzip
tar -czf backup.tar.gz /home/alice/docs/
 
# Сжатие xz (лучшее сжатие)
tar -cJf backup.tar.xz /etc /home
 
# Распаковка
tar -xzf backup.tar.gz -C /restore/
 
# Просмотр содержимого
tar -tzf backup.tar.gz

🔹 Инкрементальный бэкап с tar

# Полный бэкап
tar -g /backup/snapshot.full -czf /backup/full-$(date +%F).tar.gz /data/
 
# Инкрементальный (только изменения с момента последнего)
tar -g /backup/snapshot.inc -czf /backup/inc-$(date +%F).tar.gz /data/

WARNING

tar не умеет “синхронизировать” как rsync. Лучше использовать для периодических полных бэкапов.


3. borg — современный дедуплицирующий бэкап

borg — мощный инструмент с шифрованием, дедупликацией и сжатием.

🔹 Установка

sudo apt install borgbackup    # Debian/Ubuntu
sudo dnf install borg          # Fedora

🔹 Создание репозитория

borg init --encryption=repokey /backup/borg-repo

🔹 Создание бэкапа

borg create \
    --verbose \
    --filter AME \
    --list \
    --stats \
    --show-rc \
    --compression lz4 \
    /backup/borg-repo::'home-{now:%Y-%m-%d}' \
    /home /etc

🔹 Просмотр бэкапов

borg list /backup/borg-repo

🔹 Восстановление

borg extract /backup/borg-repo::home-2025-04-05

🔹 Монтирование (как файловая система)

borg mount /backup/borg-repo::home-2025-04-05 /mnt/restore

INFO

borg поддерживает удалённые репозитории через SSH.
Источник: Borg — Official Docs


4. restic — альтернатива borg (проще, но менее гибкий)

restic — современный бэкап с поддержкой S3, Google Drive, Backblaze B2.

🔹 Установка

sudo apt install restic

🔹 Инициализация (в S3)

export RESTIC_REPOSITORY="s3:s3.amazonaws.com/mybucket/backups"
export AWS_ACCESS_KEY_ID="..."
export AWS_SECRET_ACCESS_KEY="..."
restic init

🔹 Бэкап

restic backup /home /etc

🔹 Восстановление

restic restore latest --target /restore

INFO

restic проще в использовании, но borg предлагает больше контроля.
Источник: Restic — Official Docs


🔄 Автоматизация с cron

Чтобы бэкапы были регулярными, настройте cron.

Пример: ежедневный rsync

# crontab -e
0 2 * * * /usr/bin/rsync -avz --delete /var/www/ backup@192.168.1.100:/backups/www/

Скрипт с логированием

#!/bin/bash
# /usr/local/bin/backup-www.sh
 
LOG="/var/log/backup-www.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
 
echo "[$DATE] Starting backup" >> $LOG
rsync -avz --delete /var/www/ backup@remote:/backups/www/ >> $LOG 2>&1
if [ $? -eq 0 ]; then
    echo "[$DATE] Backup successful" >> $LOG
else
    echo "[$DATE] Backup FAILED" >> $LOG
    # Отправить уведомление (например, через curl или mail)
fi

TIP

Используйте systemd timers для более сложных сценариев.


🔁 Восстановление: как проверить, что бэкап работает?

WARNING

Бэкап, который нельзя восстановить — это не бэкап.

Проверка:

  1. Регулярно тестируйте восстановление (хотя бы раз в квартал)
  2. Проверяйте целостность:
    borg check /backup/borg-repo
    restic check
  3. Сравнивайте контрольные суммы:
    find /data -type f -exec md5sum {} \; > /backup/data.md5
    # Позже:
    md5sum -c /backup/data.md5

🧪 Практические примеры

Пример 1: Бэкап Self-Hosted сервисов

# Бэкап Nextcloud (данные + БД)
mysqldump nextcloud > /backup/db/nextcloud.sql
rsync -av /var/www/nextcloud/data/ /backup/nextcloud-data/

Пример 2: Инкрементальный бэкап с borg

# Ежедневно
borg create --compression zstd /backup/repo::'{now:%Y-%m-%d}' /home
 
# Ежемесячно — экспорт полного
borg prune -v --list /backup/repo --keep-daily 7 --keep-weekly 4 --keep-monthly 6

Пример 3: Облачный бэкап с restic + Backblaze B2

export RESTIC_REPOSITORY="b2:bucket-name:backups"
export B2_ACCOUNT_ID="..."
export B2_ACCOUNT_KEY="..."
restic backup /home

⚠️ Лучшие практики

TIP

Следуйте этим правилам, чтобы избежать катастроф.

  1. Тестируйте восстановление — регулярно.
  2. Шифруйте бэкапы, если они вне доверенной сети.
  3. Используйте 3-2-1 стратегию.
  4. Не храните бэкап на том же диске, что и оригинал.
  5. Автоматизируйте — ручные бэкапы это плохая практика.
  6. Логируйте и уведомляйте о сбоях.
  7. Используйте дедупликацию (borg, restic) для экономии места.

📊 Полезные команды диагностики

# Сколько места занимают бэкапы?
du -sh /backup/
 
# Проверить, работает ли cron?
systemctl status cron
 
# Посмотреть логи бэкапа
tail /var/log/backup.log
 
# Проверить доступность удалённого сервера
ping backup-server.local

Важный нюанс:

Файл /etc/fstab: При переустановке Linux не следует восстанавливать файл /etc/fstab из резервной копии, так как файловые системы получают новые уникальные идентификаторы (UUID), и старые настройки могут привести к ошибкам.


✅ Заключение

Теперь вы можете:

  • Настроить надёжный бэкап по принципу 3-2-1
  • Использовать rsync, tar, borg, restic
  • Автоматизировать процесс с cron
  • Восстанавливать данные и проверять целостность

QUOTE

“Администратор делает бэкап.
Хороший администратор проверяет, что он работает.”