Как настроить резервное копирование файлов в Linux с помощью Borg Backup

Это инструкция по инструменту. Как построить схему копирования целиком и проверить восстановление: резервное копирование 3-2-1.
Borg делает дедуплицированные архивы с шифрованием. Пока не сработал borg extract и ключ лежит отдельно от сервера — это ещё не бэкап, а каталог на диске.
Зачем Borg, а не только rsync
rsync удобен для зеркала. Borg даёт дедупликацию, шифрование и точки во времени: украденный диск без ключа и фразы не читается. Один репозиторий на том же сервере — не резерв. Восстановление данных в CIS Controls и резервное копирование в NIST SP 800-53 (CP-9) — международная практика, не замена вашего регламента.
Что нужно заранее
- Linux-хост-источник и место под репозиторий: другой диск, другой сервер по SSH или съёмный том.
- Отдельная учётка ОС для задания бэкапа, не повседневный root-логин админа.
- Понимание, что ключ и парольная фраза — отдельные секреты. Документация прямо пишет: копия ключа только на том же хосте, который бэкапите, недостаточна.
1. Установка Borg 1.4
Debian / Ubuntu:
sudo apt update
sudo apt install -y borgbackup
borg --version
Ожидание: borg 1.4.5 или соседний патч 1.4. Если репозиторий отдаёт 1.2 или 2.x — остановитесь и сверьте документацию своей ветки. Дальше — только 1.4. На RHEL-подобных часто пакет borgbackup из EPEL:
sudo dnf install -y epel-release
sudo dnf install -y borgbackup
borg --version
2. Репозиторий с шифрованием
Официальный quick start требует режим шифрования при init:
sudo mkdir -p /mnt/backup/borg
sudo chown backup:backup /mnt/backup/borg
borg init --encryption=repokey-blake2 /mnt/backup/borg
repokey-blake2 кладёт ключ внутрь репозитория и закрывает его парольной фразой. Это удобно, но парольная фраза обязательна и её нельзя хранить в том же git, что и плейбуки, без отдельного секрета. Режим keyfile хранит ключ в ~/.config/borg/keys на клиенте: тогда без выгрузки ключа потеря клиента = потеря всех архивов.
Удалённый репозиторий по SSH, если Borg стоит и на приёмнике:
borg init --encryption=repokey-blake2 backup@backup.example.org:/srv/borg/server01
3. Выгрузить ключ сразу
borg key export /mnt/backup/borg /root/borg-key-server01.txt
Файл унесите с хоста-источника: печать, сейф, отдельный секрет-хранилище. Документация называет хранение ключа только на бэкапируемой машине ошибкой «оставили ключи в машине». Проверка: ключ можно восстановить, не включая исходный сервер.
4. Первый архив
borg create --stats --progress \
/mnt/backup/borg::server01-{now:%Y-%m-%d} \
/etc /var/www /home
Подставьте свои каталоги. Не кладите в архив сам репозиторий и не копируйте секреты в открытый /tmp. Пример --stats после первого прогона:
------------------------------------------------------------------------------
Archive name: server01-2026-10-11
This archive: 1.12 GB
All archives: 1.12 GB
Unique chunks: 1.12 GB
------------------------------------------------------------------------------
Второй прогон тех же файлов обычно пишет меньше Unique chunks — дедупликация. borg list /mnt/backup/borg должен показать архив с сегодняшней датой:
server01-2026-10-11 Sat, 2026-10-11 03:15:02
5. Хранение: prune и compact
borg prune --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6 /mnt/backup/borg
borg compact /mnt/backup/borg
prune удаляет старые архивы по политике, compact возвращает место. Без compact диск может не сжаться. Политику keep утверждает владелец данных, не «как в примере».
6. Восстановление — обязательный шаг
Официальный extract пишет в текущий каталог. Для проверки возьмите пустой каталог, не корень системы:
mkdir -p /tmp/borg-restore-test
cd /tmp/borg-restore-test
borg list /mnt/backup/borg
borg extract --dry-run /mnt/backup/borg::ИМЯ_АРХИВА
borg extract /mnt/backup/borg::ИМЯ_АРХИВА etc/hostname
Путь в extract — без ведущего /. Пример сверки:
diff -u /etc/hostname /tmp/borg-restore-test/etc/hostname
# пустой вывод diff — файлы совпали
Вытащить один сайт, не весь /var/www:
borg extract /mnt/backup/borg::server01-2026-10-11 var/www/example.com
--dry-run читает и проверяет целостность, но не пишет данные — удобно как регулярная проверка.
Пока extract или сверка контрольной суммы не сделаны, в отчётности писать «бэкап настроен» нельзя. Это авторское правило приёмки, не пункт man, и его стоит закрепить во внутреннем стандарте.
7. Расписание
Пример systemd timer от имени учётки backup. Не кладите парольную фразу в юнит в открытом виде: используйте BORG_PASSCOMMAND или секрет ОС.
# /etc/systemd/system/borg-create.service
[Service]
Type=oneshot
User=backup
Environment=BORG_REPO=/mnt/backup/borg
ExecStart=/usr/bin/borg create --stats ${BORG_REPO}::server01-%Y-%m-%d /etc /var/www /home
ExecStart=/usr/bin/borg prune --keep-daily=7 ${BORG_REPO}
Юнит выше — каркас. BORG_PASSPHRASE в файле юнита не ставьте. Рядом таймер раз в сутки:
# /etc/systemd/system/borg-create.timer
[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now borg-create.timer
systemctl list-timers borg-create.timer
journalctl -u borg-create --since today
Ожидание: в list-timers есть следующее срабатывание, в журнале нет ошибки за последние сутки.
Как проверить
- Репозиторий инициализирован с шифрованием, не
none. - Ключ выгружен и лежит вне исходного хоста.
- Есть хотя бы один архив и политика prune.
- Зафиксирован успешный extract контрольного файла (дата, кто делал, что сравнивали).
- Задание запускается не вручную «когда вспомнили».
Ограничения и ошибки
- Репозиторий на том же диске, что и данные — не переживает отказ диска.
- Потеря парольной фразы или keyfile без export — архивы нечитаемы. Borg это не лечит.
- extract в непустой корень системы — не «откат сервера», а риск перемешать дерево. Официальный текст предупреждает, что extract не превращает непустой каталог в снимок архива.
- Borgmatic и Borg 2 — другие обёртки и CLI. Не копируйте флаги 1.4 в 2.x.
Источники
- Borg 1.4.5, Quick Start. URL: https://borgbackup.readthedocs.io/en/1.4.5/quickstart.html. Дата обращения: 11.10.2026.
- Borg 1.4.5, borg init, режимы шифрования и требование бэкапа ключа. URL: https://borgbackup.readthedocs.io/en/1.4.5/usage/init.html. Дата обращения: 11.10.2026.
- Borg 1.4.5, borg extract. URL: https://borgbackup.readthedocs.io/en/1.4.5/usage/extract.html.
- CIS Controls. URL: https://www.cisecurity.org/controls.
- NIST SP 800-53 Rev. 5. URL: https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final.






















