BorgBackup (Borg) — дедуплицирующий инструмент резервного копирования с шифрованием. Ключевая особенность: дедупликация на уровне блоков данных позволяет хранить годовой архив ежедневных снимков почти того же размера, что один полный бекап.
Как работает
Borg разделяет данные на чанки (по умолчанию 2-8 MB) и вычисляет хеш каждого. При создании нового снимка чанки, идентичные уже сохранённым, не записываются повторно — только хранится ссылка. 100 GB данных с изменением 1% в сутки: через 30 дней архив займёт 130 GB вместо 3000 GB при наивном подходе.
Шифрование встроено и включено по умолчанию: AES-256-CTR + HMAC-SHA256. Ключ защищён парольной фразой. Снимок зашифрован до передачи на удалённый сервер — провайдер хранилища не имеет доступа к содержимому.
Установка и базовые операции
# Установка
apt install borgbackup # Debian/Ubuntu
pip install borgbackup # через pip
# Инициализация репозитория (с шифрованием)
borg init --encryption=repokey-blake2 user@backup-server:/backups/myrepo
# Создание снимка
borg create --stats --compress lz4 user@backup-server:/backups/myrepo::daily-$(date +%Y%m%d) /var/www /etc /home
# Список снимков
borg list user@backup-server:/backups/myrepo
# Восстановление
borg extract user@backup-server:/backups/myrepo::daily-20240101
# Проверка целостности
borg check user@backup-server:/backups/myrepo
История
BorgBackup — форк Attic (2013), созданный сообществом после замедления разработки оригинала. Имя Borg — отсылка к Star Trek. С 2015 года активно развивается: Borg 1.1 (2017) добавил сжатие zstd, Borg 1.2 (2022) — улучшенный компрессор и более быстрое удаление снимков. Borg 2.0 в разработке с поддержкой параллельного чтения.
Автоматизация через borgmatic
borgmatic — обёртка над Borg для автоматизации через cron:
# /etc/borgmatic/config.yaml
location:
source_directories: [/var/www, /etc, /home]
repositories: [user@backup:/repo]
retention:
keep_daily: 7
keep_weekly: 4
keep_monthly: 6
hooks:
on_error:
- echo "Backup failed!" | mail -s "Borg Error" admin@example.com
borgmatic запускается через systemd timer или cron, создаёт снимок, применяет политику ротации и при ошибке отправляет уведомление.
Borg vs rsync vs tar
| Инструмент | Дедупликация | Шифрование | Удалённые бекапы |
|---|---|---|---|
| BorgBackup | Блочная | AES-256 встроено | Нативно через SSH |
| rsync | Файловая (--link-dest) | Нет | SSH |
| tar | Нет | Через gpg | Через SSH/FTP вручную |
На что обращать внимание
Репозиторий Borg нельзя читать напрямую как файловую систему — только через borg extract или mount. Borg mount создаёт FUSE-файловую систему для просмотра снимков без полного восстановления. Резервную копию самого репозитория и парольной фразы храните отдельно: потеря ключа = потеря всех данных. На VPS с малым объёмом RAM (512 MB) Borg потребляет много памяти при больших репозиториях — увеличьте swap.
Для мониторинга бекапов интегрируйте Borg с Grafana: borgmatic отправляет метрики о статусе, размере репозитория и времени выполнения через prometheus-файл или PUSH в Pushgateway. Алерт о пропущенном бекапе (up{job="borgmatic"} == 0) приходит в Telegram.