Бэкап Linux-сервера: rsync, tar, Veeam и стратегия 3-2-1 на практике
«У нас не было бэкапа» — фраза, после которой компании теряют данные навсегда. Бэкап 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 бэкапа)
- 2 разных типа носителя (например, локальный диск + облако)
- 1 копия вне площадки (offsite — другой дата-центр, облако, или даже USB-диск дома)
# Практическая реализация 3-2-1 для Linux-сервера:
#
# Копия 1 (оригинал): /var/www, /etc, /home на сервере
# Копия 2 (локальная): rsync на отдельный диск /backup (ежедневно)
# Копия 3 (offsite): rsync на удалённый сервер или S3 (ежедневно)
#
# Дополнительно: еженедельный полный tar-архив на FTP/S3
Как настроить бэкап через 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 --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
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-интерфейс
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)"
Чек-лист бэкапа Linux-сервера
- Стратегия 3-2-1: локальный + удалённый + offsite
- Ежедневный инкрементный бэкап (rsync или borg)
- Еженедельный полный бэкап (tar или Veeam)
- Шифрование offsite-бэкапов
- Мониторинг и алерты при сбое бэкапа
- Регулярная проверка восстановления
- Документирование процедуры восстановления
- Исключение /proc, /sys, /dev, /tmp из бэкапа
- Ротация старых бэкапов
- Отдельный бэкап БД (mysqldump, pg_dump) перед файловым
Настроим бэкап ваших серверов
ITfresh настроит автоматический бэкап по стратегии 3-2-1: локальный + облачный + мониторинг. Восстановление за 15 минут. Бесплатная консультация.