Резервные копии в Linux: Borg или Restic и схема 3-2-1 дома
Borg или Restic выбирают по месту хранения: для своего диска или Linux-сервера по SSH хорош Borg 1.4, для облака S3 и нескольких машин в одном репозитории удобнее Restic. Оба шифруют и дедуплицируют данные, а схема 3-2-1 собирается из оригинала, внешнего диска и удалённого репозитория.

Содержание
Схема 3-2-1 на примере домашнего компьютера
Правило 3-2-1 звучит так: три копии данных, на двух разных носителях, одна из них вне дома. Для обычного линуксового компьютера это выглядит приземлённо:
- Оригинал: ваш
/homeна системном SSD. - Локальная копия: внешний USB-диск или второй диск в системнике, куда каждый вечер уходит инкрементальная копия.
- Удалённая копия: домашний сервер у родственников, VPS по SFTP или объектное хранилище S3-типа.
Две ошибки встречаются постоянно. Первая: считать снимки файловой системы резервной копией. Снимки Btrfs со Snapper спасают от неудачного обновления, но умирают вместе с диском. Вторая: синхронизация вместо архива. Syncthing или облачная папка честно размножат случайно удалённый или зашифрованный вирусом файл на все устройства. Нужна именно копия с историей версий, и здесь на сцену выходят Borg и Restic.
Borg или Restic: чем они отличаются
Обе программы делают одно и то же на высоком уровне: режут файлы на блоки, хранят каждый уникальный блок один раз (дедупликация), шифруют репозиторий и позволяют держать сотни версий без роста объёма в сотни раз. Различия в деталях, и именно они определяют выбор.
| Параметр | BorgBackup 1.4 | Restic 0.19 |
|---|---|---|
| Язык и поставка | Python с модулями на C | Go, один бинарник |
| Удалённое хранилище | Локальный путь или SSH, на сервере нужен borg | Локально, SFTP, REST server, S3, B2, Azure, GCS, через rclone ещё десятки |
| Сжатие | lz4, zstd, zlib, lzma на выбор | zstd, режимы auto, max, off |
| Очистка старых копий | prune, затем compact | forget --prune |
| Параллельная запись | Один клиент за раз (блокировка) | Несколько машин в один репозиторий |
| Графический интерфейс | Vorta | Backrest и другие сторонние |
| Обёртка для автоматизации | borgmatic | resticprofile, autorestic |
Упрощённое правило: если копии уходят на свой диск или на свой Linux-сервер по SSH, Borg отлично подходит и экономно расходует память. Если нужно облачное хранилище или несколько компьютеров пишут в один репозиторий, удобнее Restic. Ветка Borg 2.0 к октябрю 2026 года всё ещё в бета-версиях, для реальных данных ставьте 1.4.
Установка в Debian, Ubuntu, Fedora и Arch
Оба инструмента лежат в штатных репозиториях. Пакет Borg называется borgbackup, а команда borg.
# Debian 13, Ubuntu 26.04
sudo apt install borgbackup restic
# Fedora 44
sudo dnf install borgbackup restic
# Arch
sudo pacman -S borg restic
# проверить версии
borg --version
restic versionRestic в репозиториях стабильных дистрибутивов иногда отстаёт от upstream. У него есть встроенная команда restic self-update, но она предназначена для бинарника, скачанного с GitHub: в пакетах дистрибутивов её могут отключать, а обновлять такой restic всё равно лучше через пакетный менеджер. Для монтирования архивов через FUSE в Borg понадобится пакет python3-pyfuse3 или python3-llfuse в зависимости от дистрибутива.
Borg: репозиторий, первая копия и чистка
Создание репозитория
Пусть внешний диск смонтирован в /mnt/backup. Режим repokey-blake2 хранит ключ внутри репозитория под паролем:
borg init --encryption=repokey-blake2 /mnt/backup/borg
# сразу сохраните ключ отдельно от диска
borg key export /mnt/backup/borg ~/borg-key.txtБез ключа и пароля данные не восстановить никак, это не преувеличение из документации. Файл ключа положите в менеджер паролей или распечатайте.
Копия домашнего каталога
export BORG_REPO=/mnt/backup/borg
borg create --stats --compression zstd,3 \
--exclude-caches --exclude 'home/*/.cache' \
::'{hostname}-{now}' /home
borg listПервая копия идёт долго, следующие занимают минуты: Borg отправляет только изменившиеся блоки. Для удалённого сервера путь заменяется на ssh://user@server/./borg, и на сервере тоже должен стоять borg.
Чистка и проверка
borg prune --list --glob-archives '{hostname}-*' \
--keep-daily 7 --keep-weekly 4 --keep-monthly 6
borg compact
borg checkС версии 1.2 prune только помечает архивы удалёнными, место на диске освобождает compact. Об этом часто забывают и удивляются, что диск не пустеет.
Restic: копия на диск, SFTP и в облако
Restic принимает адрес репозитория через ключ -r или переменную окружения. Пароль удобно хранить в файле с правами 600:
install -m 600 /dev/null ~/.config/restic-pass
nano ~/.config/restic-pass
export RESTIC_PASSWORD_FILE=~/.config/restic-pass
# локальный диск
restic -r /mnt/backup/restic init
# удалённый сервер по SFTP
restic -r sftp:user@server:/srv/restic initКопия, список снимков и чистка по политике хранения:
export RESTIC_REPOSITORY=sftp:user@server:/srv/restic
restic backup ~ --exclude-caches --exclude ~/.cache
restic snapshots
# сначала посмотреть, что удалится
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --dry-run
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
# проверка структуры и выборочное чтение 5% данных
restic check --read-data-subset=5%Для S3-совместимого хранилища адрес выглядит как s3:https://адрес-хранилища/бакет, ключи доступа передаются переменными AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY. Такой репозиторий и закрывает пункт "одна копия вне дома" из схемы 3-2-1.
Запуск по расписанию через systemd timer
Копия, которую нужно запускать руками, перестаёт делаться через месяц. Для домашней машины удобнее всего пользовательский таймер systemd: он догонит пропущенный запуск, если компьютер был выключен. Создайте два файла в ~/.config/systemd/user/.
Файл restic-backup.service:
[Unit]
Description=Restic backup of home
[Service]
Type=oneshot
EnvironmentFile=%h/.config/restic.env
ExecStart=/usr/bin/restic backup %h --exclude-caches --exclude %h/.cache
ExecStartPost=/usr/bin/restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --pruneФайл restic-backup.timer:
[Timer]
OnCalendar=daily
Persistent=true
RandomizedDelaySec=30min
[Install]
WantedBy=timers.targetВ restic.env положите строки RESTIC_REPOSITORY=... и RESTIC_PASSWORD_FILE=.... Включение и проверка:
systemctl --user daemon-reload
systemctl --user enable --now restic-backup.timer
systemctl --user list-timers
journalctl --user -u restic-backup.serviceДля Borg то же самое удобнее делать через borgmatic, у которого есть готовые unit-файлы. Если привычнее cron, синтаксис расписаний разобран в статье Cron в Linux.
Проверка восстановления: единственный честный тест
Копия, из которой никто ни разу не восстанавливался, остаётся гипотезой. Раз в месяц достаньте пару файлов в отдельный каталог и откройте их:
# Borg: извлечь каталог из последнего архива
mkdir -p /tmp/restore && cd /tmp/restore
borg extract ::$(borg list --last 1 --format '{archive}') home/user/Documents
# Restic: восстановить один каталог из последнего снимка
restic restore latest --target /tmp/restore --include /home/user/Documents
# смонтировать репозиторий и пройтись файловым менеджером
mkdir -p /tmp/restic-mnt && restic mount /tmp/restic-mntПрогоните полное восстановление хотя бы раз, на чистую систему или в виртуальную машину. Только так выясняется, что ключ шифрования остался на умершем ноутбуке, а в исключения случайно попал каталог с документами. Если диск зашифрован, держите заголовок LUKS отдельно от бэкапа данных, как описано в статье шифрование LUKS и резервный ключ.
Частые проблемы и как их решать
- Repository is already locked. Прошлый запуск прервался. Убедитесь, что копия сейчас не идёт, и снимите блокировку:
borg break-lockилиrestic unlock. - Репозиторий на том же диске. Копия в соседнем разделе не переживёт отказ SSD. Минимум внешний диск, лучше плюс удалённая точка.
- Диск с копиями всегда подключён. Шифровальщик или ошибочный
rm -rfдоберутся и до него. Отключайте USB-диск после копирования или используйте удалённый репозиторий в режиме только добавления: у Borg этоborg serve --append-onlyна сервере, у Restic ключ--append-onlyв rest-server. - Копируются кэши и контейнеры. Исключите
~/.cache, каталоги Steam, образы виртуальных машин и~/.local/share/containers, если они не нужны: размер копии падает в разы. - Потерян пароль. Восстановить нельзя. Храните пароль и экспорт ключа в двух местах.
Для полного образа системы с загрузкой с флешки есть другой класс инструментов, например Rescuezilla. Он хорош перед рискованной переустановкой, а Borg и Restic закрывают ежедневную историю версий. Дальнейшие детали удобно смотреть в официальной документации BorgBackup и Restic. Если копии планируется хранить на своём сервере, пригодится и материал домашний сервер на Linux.
Частые вопросы
Что лучше для домашнего компьютера, Borg или Restic?
Для копий на внешний диск и свой сервер по SSH подходят оба, Borg чуть экономнее. Если нужна облачная копия в S3 или B2, проще Restic.
Можно ли использовать Borg 2.0?
На октябрь 2026 года ветка 2.0 выходит только бета-версиями. Для реальных данных используйте стабильную 1.4.
Почему после borg prune место на диске не освободилось?
С версии 1.2 prune только помечает архивы удалёнными. Место освобождает команда borg compact.
Снимки Btrfs или Timeshift заменяют резервную копию?
Нет. Снимки лежат на том же диске и пропадут вместе с ним. Они дополняют копии, а не заменяют их.
Как часто проверять резервную копию?
Запускайте borg check или restic check по расписанию, а раз в месяц вручную восстанавливайте несколько файлов в отдельный каталог.
Документация и источники
- BorgBackup 1.4 documentation: Quick Start, BorgBackup, 2026
- Restic documentation: Removing backup snapshots, restic, 2026
- systemd.timer, freedesktop.org, 2026
Читайте также
- Снимки Btrfs со Snapper: настройка и восстановление системы
- Rescuezilla: резервная копия и восстановление Linux с флешки
- Домашний сервер на Linux: хранение, резервные копии и сервисы
- Шифрование диска LUKS в Linux без риска потерять данные
- Syncthing: приватная синхронизация файлов между устройствами
- Cron и crontab в Linux: как настроить задания по расписанию
Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.