· 16 мин чтения

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

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

Привет! Это Евгений Семёнов, директор АйТи Фреш. За пятнадцать с лишним лет в IT мне доводилось всякое: от спасения случайно удалённой базы 1С до борьбы с последствиями шифровальщиков, которые намертво блокировали целые файл-серверы. Знаете, каждый раз приходишь к одному и тому же: бэкап, который ни разу не проверили на восстановление — это просто красивое, но абсолютно бесполезное обещание. В этой статье я поделюсь нашим опытом и детально сравню два инструмента, с которыми мы реально работаем в боевых условиях: старый добрый 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 просто чемпион по экономии места! И всё это благодаря его волшебной блочной дедупликации. Представьте, если у вас на сервере тонны повторяющихся файлов — например, десятки образов виртуальных машин или ежедневные дампы баз данных. Вот тогда разница в занимаемом объёме становится по-настоящему впечатляющей! Мы лично видели, как 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 ГБ оперативной памяти. А вот для бэкапов у них стоял 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 подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.