· 16 мин чтения

Резервное копирование Linux-серверов: rsync vs BorgBackup на практике

Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. За 15+ лет я восстанавливал данные после всего: от случайно удалённой базы 1С до поражения шифровальщиком всего файл-сервера. И каждый раз выводил одну и ту же мораль — бэкап, который не проверяли на восстановление, это не бэкап, а благое намерение. В этой статье сравниваю два инструмента, которые реально работают в production: классический rsync и современный BorgBackup. Покажу, когда лучше выбрать каждый.

Rsync: проверенный временем

Rsync существует с 1996 года, он есть во всех Unix-системах и делает одну вещь очень хорошо — синхронизирует файлы между двумя точками, передавая только изменения. Основные сценарии, где я использую rsync:

# Базовый бэкап файл-сервера на NAS
rsync -aHAX --delete \
  --exclude='*.tmp' --exclude='/tmp/' --exclude='/proc/' \
  /srv/ backup@nas.office.local:/backups/srv/

# Флаги: -a (archive), -H (hard links), -A (ACL), -X (xattrs), --delete (удалять на целевой то, что нет на исходной)

Проблема rsync — он не даёт истории. Если вы ежедневно делаете rsync --delete, то вчерашняя версия перетирается сегодняшней. Для истории нужен rsync + hard links (схема rsnapshot):

# Упрощённая схема rsnapshot-подобного бэкапа
TODAY=$(date +%F)
YESTERDAY=$(date -d 'yesterday' +%F)
BACKUP_ROOT=/backup/fileserver

rsync -aHAX --delete \
  --link-dest=$BACKUP_ROOT/$YESTERDAY \
  /srv/ $BACKUP_ROOT/$TODAY/

Такая схема даёт «прозрачные» инкременты: каждая дневная папка выглядит как полный снимок, но неизменившиеся файлы физически одни и те же через hard links. У нас на практике для файлового сервера объёмом 800 ГБ хранилище 30 дневных копий занимает 1.1 ТБ — всё зависит от интенсивности изменений.

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

BorgBackup — это современная замена rsync+rsnapshot. Пишется на Python+C, работает через SSH (или локально), делает блочную дедупликацию, прозрачное сжатие и шифрование.

sudo apt install borgbackup  # Debian/Ubuntu
sudo dnf install borgbackup  # RHEL/Rocky

# На целевом сервере создаём репозиторий
ssh backup@nas 'borg init --encryption=repokey-blake2 /backup/borg/server1'

# Первый бэкап
borg create \
  --stats --progress \
  --compression zstd,9 \
  --exclude-caches \
  --exclude '/proc/*' --exclude '/sys/*' --exclude '/tmp/*' \
  backup@nas:/backup/borg/server1::'{hostname}-{now:%Y-%m-%dT%H:%M}' \
  / /home /var/www /etc

Первая операция занимает время (упирается в диск+сеть). Каждая последующая быстрее: Borg считает хеши от чанков, сравнивает с тем, что уже в репозитории, передаёт только новые.

Сравнение rsync vs Borg в цифрах

Я замерил на типовом офисном файл-сервере (850 ГБ данных, дельта в сутки около 8 ГБ, ~250 тыс. файлов):

Метрикаrsync + hard linksBorgBackup
Место на 30 дней1.1 ТБ290 ГБ
Время ежедневного бэкапа14 минут8 минут
Первый полный бэкап2 ч 40 мин3 ч 10 мин
Восстановление одного файлаcp из папкиborg extract
Восстановление полного дереваrsync обратноborg extract
ШифрованиеНет (нужен дополнительный слой)AES-CTR + HMAC
Проверка целостностиВручнуюborg check

Borg выигрывает в экономии места за счёт блочной дедупликации. На данных, где много повторяющихся файлов (образы ВМ, дампы БД), разница ещё больше — я видел соотношение 5:1 по месту.

Рабочая схема с Borg и retention

Я всегда настраиваю бэкап скриптом плюс systemd-таймером. Скрипт:

#!/bin/bash
# /usr/local/bin/borg-backup.sh
set -euo pipefail

export BORG_PASSCOMMAND="cat /root/.borg-passphrase"
export BORG_REPO="backup@nas.office.local:/backup/borg/server1"

BACKUP_NAME="{hostname}-{now:%Y-%m-%dT%H:%M}"

borg create \
  --stats --show-rc \
  --compression zstd,9 \
  --exclude-caches \
  --exclude '/proc' --exclude '/sys' --exclude '/dev' \
  --exclude '/run' --exclude '/tmp' \
  --exclude '/var/cache' --exclude '/var/tmp' \
  --exclude '/var/lib/docker' \
  "::${BACKUP_NAME}" \
  / /home /etc /var/www /var/lib/postgresql

borg prune \
  --list --show-rc \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 12 \
  --keep-yearly 2

borg compact

Systemd-таймер:

# /etc/systemd/system/borg-backup.service
[Unit]
Description=BorgBackup daily
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/borg-backup.sh
Nice=19
IOSchedulingClass=idle

# /etc/systemd/system/borg-backup.timer
[Unit]
Description=Daily BorgBackup
[Timer]
OnCalendar=03:15
RandomizedDelaySec=900
Persistent=true
[Install]
WantedBy=timers.target

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

Главное, ради чего всё это затевается — быстрое восстановление. Borg даёт несколько вариантов:

# Список архивов
borg list backup@nas:/backup/borg/server1

# Содержимое конкретного архива
borg list backup@nas:/backup/borg/server1::server1-2025-03-11T03:15

# Восстановление одного файла
cd /tmp/restore
borg extract backup@nas:/backup/borg/server1::server1-2025-03-11T03:15 \
  home/user/important.xlsx

# Монтирование архива как FUSE-файлсистемы
borg mount backup@nas:/backup/borg/server1::server1-2025-03-11T03:15 /mnt/borg
ls /mnt/borg
umount /mnt/borg

Бэкап PostgreSQL и MySQL правильно

Копировать /var/lib/postgresql напрямую — это рецепт катастрофы. Нужен логический дамп или pg_basebackup перед стартом Borg:

# PostgreSQL
pg_dumpall --clean --if-exists | \
  gzip > /var/backups/pg/all-$(date +%F).sql.gz

# Или физический бэкап через pg_basebackup
pg_basebackup -D /var/backups/pg/base -Ft -z -P

# MySQL / MariaDB
mariadb-dump --all-databases --single-transaction --routines --triggers \
  | gzip > /var/backups/mysql/all-$(date +%F).sql.gz

И уже эти dump-файлы включаем в Borg-архив. Таким образом бэкап консистентен даже для активной БД.

Кейс: инцидент с шифровальщиком и восстановление за 4 часа

В октябре 2025 один из клиентов — строительная компания в Московской области, 60 рабочих мест — подцепил шифровальщик через зараженный RDP. За ночь шифратор прошёл по файловому серверу и зашифровал 420 ГБ проектной документации. К утру позвонили в панике.

Хорошо, что мы за год до этого настроили Borg-бэкапы на отдельный NAS в дата-центре МТС с pull-моделью (NAS сам тянет бэкапы по SSH, шифровальщик с сервера не имел к нему push-доступа). Подняли чистую виртуалку, восстановили архив двухдневной давности командой borg extract. 420 ГБ вытащили за 3 часа 20 минут, ещё 40 минут на проверку целостности и перенастройку доступов. Потерь данных — минимум 8 часов работы, но не недели как было бы без бэкапов.

Сервер клиента: HP ProLiant DL380 Gen10 с Xeon Silver 4214, 64 ГБ RAM. NAS для бэкапов: Synology RS3621xs+ с дисками Seagate Exos на 16 ТБ, RAID-6. Стоимость наших работ по восстановлению — 85 000 руб. (включая расследование и harden'инг против повторного инцидента).

Что НЕ делать при настройке бэкапов

Настроим надёжную систему бэкапов для Linux-серверов

Развернём BorgBackup или rsync, настроим pull-модель с изолированного хранилища, организуем ежемесячные тестовые восстановления. NAS, дата-центр МТС, шифрование, мониторинг в Grafana — всё под ключ.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — частые вопросы о бэкапах Linux

В чём разница между rsync и BorgBackup?
rsync копирует файлы as-is. Borg делает дедупликацию и шифрование, хранит инкременты в компактном репозитории.
Как часто делать бэкапы?
Стандарт 3-2-1. Критичные данные — каждые 1-4 часа, рядовые — раз в сутки.
Как проверить, что бэкап рабочий?
Регулярно восстанавливайте случайный архив на тестовую машину и убеждайтесь, что приложение запускается.
Нужно ли шифровать резервные копии?
Если вне защищённого периметра — обязательно. Borg шифрует по умолчанию.
BorgBackup или Restic — что выбрать?
Borg — для SSH-репозиториев, Restic — для S3-совместимых облаков.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

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

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.