LinuxRuLinux без лишней теории
Резервное копирование

Резервные копии в Linux: Borg или Restic и схема 3-2-1 дома

Редакция LinuxRu6 мин чтенияИнструкции

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

Резервные копии в Linux: Borg или Restic и схема 3-2-1 дома
Фото: William Hook from Stafford, United Kingdom, CC BY-SA 2.0, Wikimedia Commons
Содержание
  1. Схема 3-2-1
  2. Borg или Restic
  3. Установка
  4. Работа с Borg
  5. Работа с Restic
  6. Автоматизация
  7. Восстановление
  8. Ошибки
  9. Частые вопросы

Схема 3-2-1 на примере домашнего компьютера

Правило 3-2-1 звучит так: три копии данных, на двух разных носителях, одна из них вне дома. Для обычного линуксового компьютера это выглядит приземлённо:

  1. Оригинал: ваш /home на системном SSD.
  2. Локальная копия: внешний USB-диск или второй диск в системнике, куда каждый вечер уходит инкрементальная копия.
  3. Удалённая копия: домашний сервер у родственников, VPS по SFTP или объектное хранилище S3-типа.

Две ошибки встречаются постоянно. Первая: считать снимки файловой системы резервной копией. Снимки Btrfs со Snapper спасают от неудачного обновления, но умирают вместе с диском. Вторая: синхронизация вместо архива. Syncthing или облачная папка честно размножат случайно удалённый или зашифрованный вирусом файл на все устройства. Нужна именно копия с историей версий, и здесь на сцену выходят Borg и Restic.

Borg или Restic: чем они отличаются

Обе программы делают одно и то же на высоком уровне: режут файлы на блоки, хранят каждый уникальный блок один раз (дедупликация), шифруют репозиторий и позволяют держать сотни версий без роста объёма в сотни раз. Различия в деталях, и именно они определяют выбор.

ПараметрBorgBackup 1.4Restic 0.19
Язык и поставкаPython с модулями на CGo, один бинарник
Удалённое хранилищеЛокальный путь или SSH, на сервере нужен borgЛокально, SFTP, REST server, S3, B2, Azure, GCS, через rclone ещё десятки
Сжатиеlz4, zstd, zlib, lzma на выборzstd, режимы auto, max, off
Очистка старых копийprune, затем compactforget --prune
Параллельная записьОдин клиент за раз (блокировка)Несколько машин в один репозиторий
Графический интерфейсVortaBackrest и другие сторонние
Обёртка для автоматизацииborgmaticresticprofile, 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 version

Restic в репозиториях стабильных дистрибутивов иногда отстаёт от 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 по расписанию, а раз в месяц вручную восстанавливайте несколько файлов в отдельный каталог.

Документация и источники

Читайте также

Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.