Бэкап Linux-сервера: rsync, tar, Veeam и стратегия 3-2-1 на практике

Linux 24 марта 2026 12 мин чтения Автор: Евгений Семёнов
Бэкап Linux сервера

«У нас не было бэкапа» — фраза, после которой компании теряют данные навсегда. Бэкап Linux-сервера — задача, которую откладывают до первого инцидента. В этом руководстве мы разберём все инструменты (rsync, tar, Veeam, BorgBackup, Restic), стратегию 3-2-1 и ответим на 15 реальных проблем из 172 комментариев администраторов.

Из нашей практики: ITfresh управляет бэкапами более 50 Linux-серверов. За последний год мы 4 раза восстанавливали серверы из бэкапов — отказ диска, ошибка администратора, ransomware. Время восстановления — от 15 минут до 2 часов.

Что такое стратегия 3-2-1 и почему она обязательна?

Правило 3-2-1 — золотой стандарт бэкапа:

# Практическая реализация 3-2-1 для Linux-сервера:
#
# Копия 1 (оригинал): /var/www, /etc, /home на сервере
# Копия 2 (локальная): rsync на отдельный диск /backup (ежедневно)
# Копия 3 (offsite):   rsync на удалённый сервер или S3 (ежедневно)
#
# Дополнительно: еженедельный полный tar-архив на FTP/S3
Из комментариев: «У меня был RAID 1, я думал это бэкап.» RAID — это НЕ бэкап! RAID защищает от отказа диска, но не от удаления файлов, ransomware или ошибки администратора.

Как настроить бэкап через rsync?

rsync — самый популярный инструмент для инкрементных бэкапов Linux. Копирует только изменённые файлы.

Локальный бэкап

#!/bin/bash
# /opt/scripts/backup-rsync.sh
DATE=$(date +%Y%m%d-%H%M)
SRC="/"
DST="/backup/daily"
LOG="/var/log/backup-$DATE.log"

rsync -aAXv --delete \
  --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/backup/*"} \
  "$SRC" "$DST/" 2>&1 | tee "$LOG"

echo "Backup completed: $(du -sh $DST | cut -f1)" >> "$LOG"

Удалённый бэкап через SSH

# Бэкап на удалённый сервер
rsync -aAXvz --delete \
  --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*"} \
  -e "ssh -p 22 -i /root/.ssh/backup_key" \
  / backup@remote-server:/backup/server1/

# С ограничением скорости (чтобы не забить канал):
rsync -aAXvz --bwlimit=50000 ...  # 50 MB/s
Из нашей практики: всегда используйте --exclude для /proc, /sys, /dev, /tmp. Без этого rsync попытается скопировать виртуальные файловые системы и зависнет.

Включаются ли примонтированные CIFS/NFS в бэкап?

Частый вопрос из комментариев. Ответ зависит от инструмента:

# rsync: используйте --one-file-system (-x) для исключения
rsync -aAXvx / /backup/  # НЕ заходит в примонтированные FS

# tar: аналогично
tar czf backup.tar.gz --one-file-system /

# Или явно исключите точки монтирования:
rsync -aAXv --exclude="/mnt/*" --exclude="/media/*" / /backup/

# Проверить, что примонтировано:
mount | grep -E "cifs|nfs"
df -hT | grep -E "cifs|nfs"

Как создать полный архив сервера через tar?

tar создаёт один файл-архив — удобно для хранения и переноса:

#!/bin/bash
# /opt/scripts/backup-tar.sh
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/weekly"
ARCHIVE="$BACKUP_DIR/server-full-$DATE.tar.gz"

mkdir -p "$BACKUP_DIR"

tar czf "$ARCHIVE" \
  --exclude=/proc \
  --exclude=/sys \
  --exclude=/dev \
  --exclude=/tmp \
  --exclude=/run \
  --exclude=/mnt \
  --exclude=/media \
  --exclude=/backup \
  --exclude=/lost+found \
  --one-file-system \
  /

echo "Archive size: $(du -sh $ARCHIVE | cut -f1)"

# Удаление архивов старше 4 недель
find "$BACKUP_DIR" -name "server-full-*.tar.gz" -mtime +28 -delete
# Восстановление из tar-архива:
# Загрузитесь с Live USB, примонтируйте целевой диск
mount /dev/sda1 /mnt
tar xzf server-full-20260324.tar.gz -C /mnt/

# Не забудьте переустановить GRUB после восстановления!

Почему после восстановления не загружается GRUB?

Это проблема номер один из комментариев. При восстановлении из бэкапа на новый диск или VM загрузчик GRUB не работает, потому что он привязан к конкретному диску.

# Решение: переустановка GRUB из chroot
# 1. Загрузитесь с Live USB (например, Debian netinst)
# 2. Примонтируйте разделы:

mount /dev/sda2 /mnt           # Корневой раздел
mount /dev/sda1 /mnt/boot/efi  # EFI-раздел (если UEFI)
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys

# 3. Войдите в chroot:
chroot /mnt

# 4. Переустановите GRUB:
# Для BIOS:
grub-install /dev/sda
update-grub

# Для UEFI:
grub-install --target=x86_64-efi --efi-directory=/boot/efi
update-grub

# 5. Пересоберите initramfs (критично при смене железа!):
update-initramfs -u -k all

# 6. Выходите и перезагружайтесь:
exit
umount -R /mnt
reboot
Из комментариев: «dracut timeout при переносе CentOS на VMware» — решается через rescue mode: dracut --force --regenerate-all. При переносе между гипервизорами всегда пересобирайте initramfs!

Как перенести Linux-сервер на виртуальную машину?

Перенос физического сервера в VM (P2V) — частая задача. Два подхода:

Подход 1: rsync + chroot (надёжный)

# 1. Создайте VM с такой же ОС (минимальная установка)
# 2. Загрузите VM, скопируйте данные:

rsync -aAXvz --delete \
  --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/boot/*"} \
  -e ssh root@old-server:/ /

# 3. Пересоберите initramfs и GRUB
update-initramfs -u -k all
update-grub

# 4. Проверьте /etc/fstab — UUID дисков изменились!
blkid  # покажет новые UUID
nano /etc/fstab  # замените старые UUID

Подход 2: Veeam Agent (простой)

# 1. Установите Veeam Agent на физический сервер
# 2. Создайте полный бэкап на NFS/SMB-шару
# 3. Скачайте Veeam Recovery ISO
# 4. Загрузите VM с этого ISO
# 5. Укажите путь к бэкапу → восстановите
# Veeam сам настроит GRUB и initramfs

Как восстановить бэкап на диск меньшего размера?

Из комментариев: «Старый сервер 1 TB, новый 500 GB — как перенести?»

# С rsync/tar — легко, если данные помещаются:
du -sh --exclude=/proc --exclude=/sys --exclude=/dev /
# Если результат < 500 GB — всё ОК

# С Veeam — сложнее. Два варианта:
# 1. Восстановить файлы (не весь диск) через File Level Recovery
# 2. Перед бэкапом уменьшить разделы:
resize2fs /dev/sda2 400G  # уменьшить FS
# Затем создать бэкап — он будет содержать только используемые блоки

BorgBackup — дедупликация и шифрование

BorgBackup (borg) — современная альтернатива rsync с дедупликацией и шифрованием:

# Установка
apt install -y borgbackup

# Инициализация репозитория (с шифрованием)
borg init --encryption=repokey /backup/borg-repo

# Или на удалённом сервере:
borg init --encryption=repokey ssh://backup@remote:22/backup/borg-repo

# Создание бэкапа
borg create --stats --progress \
  /backup/borg-repo::server-{now:%Y%m%d-%H%M} \
  / \
  --exclude '/dev' --exclude '/proc' --exclude '/sys' \
  --exclude '/tmp' --exclude '/run' --exclude '/mnt' \
  --exclude '/backup'

# Автоочистка старых бэкапов
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 \
  /backup/borg-repo

# Восстановление
cd /mnt/restore
borg extract /backup/borg-repo::server-20260324-0300
Из нашей практики: BorgBackup с дедупликацией экономит до 70% дискового пространства. Для 10 серверов вместо 500 GB ежедневных бэкапов — 150 GB благодаря дедупликации.

Restic — бэкап в S3 и облачные хранилища

# Установка
apt install -y restic

# Инициализация репозитория в S3 (Yandex Cloud, MinIO, AWS)
export AWS_ACCESS_KEY_ID=your_key
export AWS_SECRET_ACCESS_KEY=your_secret
restic -r s3:https://storage.yandexcloud.net/my-backups init

# Бэкап
restic -r s3:https://storage.yandexcloud.net/my-backups backup / \
  --exclude /dev --exclude /proc --exclude /sys --exclude /tmp

# Проверка целостности
restic -r s3:https://storage.yandexcloud.net/my-backups check

# Список снапшотов
restic -r s3:https://storage.yandexcloud.net/my-backups snapshots

Veeam Agent for Linux — бесплатный корпоративный бэкап

Veeam Agent — бесплатный инструмент для полного образного бэкапа Linux:

# Установка на Debian/Ubuntu:
wget https://download2.veeam.com/veeam-release-deb_1.0_amd64.deb
dpkg -i veeam-release-deb_1.0_amd64.deb
apt update && apt install -y veeam

# Настройка через CLI:
veeamconfig job create --name "Daily Backup" \
  --repopath /backup/veeam \
  --daily --at 03:00

# Или интерактивно:
veeam  # запускает ncurses-интерфейс
Из комментариев: «Ошибка лимитов файлов при сборке Recovery ISO» — увеличьте лимиты: ulimit -n 65535 перед запуском. Также проверьте свободное место в /tmp (нужно ~2 GB для ISO).

Как автоматизировать бэкап нескольких серверов?

Для 10+ серверов нужна централизация:

Вариант 1: borgmatic + cron (бесплатно)

# Установка borgmatic
pip install borgmatic

# Конфигурация /etc/borgmatic/config.yaml
location:
    source_directories:
        - /
    repositories:
        - ssh://backup@central-server/backup/{hostname}
    exclude_patterns:
        - /dev
        - /proc
        - /sys
        - /tmp
        - /run

retention:
    keep_daily: 7
    keep_weekly: 4
    keep_monthly: 6

hooks:
    on_error:
        - echo "Backup FAILED on {hostname}" | mail -s "Backup Alert" admin@company.com

Вариант 2: Hetzner Storage Box (дёшево)

# Storage Box — дешёвое хранилище от Hetzner
# BX11: 1 TB за 3.81 EUR/мес, поддерживает SSH/SFTP/SMB
#
# Подключение для rsync:
rsync -aAXvz -e "ssh -p 23" \
  / u123456@u123456.your-storagebox.de:backup/server1/

Как проверить, что бэкап действительно работает?

Непроверенный бэкап = отсутствие бэкапа. Проверяйте регулярно:

#!/bin/bash
# /opt/scripts/verify-backup.sh
# Запускать раз в неделю

# 1. Проверить, что бэкап свежий (не старше 25 часов)
LATEST=$(find /backup/daily -maxdepth 0 -mmin -1500 | wc -l)
if [ "$LATEST" -eq 0 ]; then
    echo "ALERT: Backup is older than 25 hours!" | \
      mail -s "Backup Alert" admin@company.com
fi

# 2. Проверить целостность (для borg)
borg check /backup/borg-repo 2>&1
if [ $? -ne 0 ]; then
    echo "ALERT: Borg repo corrupted!" | \
      mail -s "Backup Integrity Alert" admin@company.com
fi

# 3. Тестовое восстановление файла
TESTFILE="/etc/hostname"
borg extract --stdout /backup/borg-repo::latest "$TESTFILE" > /tmp/test-restore
diff "$TESTFILE" /tmp/test-restore
if [ $? -ne 0 ]; then
    echo "ALERT: Restore verification failed!"
fi
rm -f /tmp/test-restore

echo "Backup verification completed: $(date)"
Из нашей практики: раз в квартал мы проводим полное тестовое восстановление — разворачиваем VM из бэкапа и проверяем, что все сервисы работают. Это единственный способ быть уверенным в бэкапе.

Чек-лист бэкапа Linux-сервера

  1. Стратегия 3-2-1: локальный + удалённый + offsite
  2. Ежедневный инкрементный бэкап (rsync или borg)
  3. Еженедельный полный бэкап (tar или Veeam)
  4. Шифрование offsite-бэкапов
  5. Мониторинг и алерты при сбое бэкапа
  6. Регулярная проверка восстановления
  7. Документирование процедуры восстановления
  8. Исключение /proc, /sys, /dev, /tmp из бэкапа
  9. Ротация старых бэкапов
  10. Отдельный бэкап БД (mysqldump, pg_dump) перед файловым
IT-аутсорсинг для бизнеса

Настроим бэкап ваших серверов

ITfresh настроит автоматический бэкап по стратегии 3-2-1: локальный + облачный + мониторинг. Восстановление за 15 минут. Бесплатная консультация.

50+серверов под бэкапом
15 минвремя восстановления
0потерь данных

Читайте также