VDS · Резервные копии и диск

Restic: копии с шифрованием и историей

Как настроить резервные копии со сквозным шифрованием, дедупликацией и снимками по датам, автоматизировать их и проверять целостность.

Обновлено 23 августа 2026 г.

Restic решает то, чего не умеет rsync: шифрует данные до отправки, хранит историю снимков, не копирует одинаковые куски дважды и умеет складывать копии в S3-совместимые хранилища. Одна программа без зависимостей.

Установка и первый репозиторий

sudo apt install -y restic
restic version

Репозиторий — место, где лежат копии. Может быть каталогом, машиной по SFTP или объектным хранилищем:

export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass

head -c 32 /dev/urandom | base64 > /root/.restic-pass
chmod 600 /root/.restic-pass
restic init

Пароль репозитория восстановлению не подлежит. Забыли — данные потеряны, никакой поддержки тут не существует по устройству. Сохраните его отдельно от машины: в менеджере паролей, на бумаге, где угодно, но не только в файле /root/.restic-pass на той самой машине, копию которой вы делаете.

Создание копии

restic backup /var/www /etc/nginx /opt/myapp \
  --exclude-file=/root/restic-exclude.txt \
  --tag daily
restic snapshots
restic ls latest
restic stats

Второй и последующие запуски проходят быстро: передаются только новые куски данных.

Восстановление

restic restore latest --target /restore
restic restore <id-снимка> --target /restore --include /var/www/uploads

Ещё удобнее посмотреть содержимое, не распаковывая всё:

mkdir /mnt/snapshots
restic mount /mnt/snapshots

Каталог покажет все снимки по датам как обычные папки. Это лучший способ достать один случайно удалённый файл.

Расписание и чистка

Скрипт /usr/local/bin/backup.sh:

#!/bin/bash
set -euo pipefail
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass

docker compose -f /opt/myapp/compose.yaml exec -T db \
  pg_dump -U postgres app | gzip > /var/backups/db.sql.gz

restic backup /var/www /etc/nginx /opt/myapp /var/backups --tag daily
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
chmod 700 /usr/local/bin/backup.sh

Дальше — таймер systemd, см. задания по расписанию. forget --prune удаляет лишние снимки и освобождает место; без --prune снимки исчезают из списка, но данные остаются.

Проверка целостности

restic check
restic check --read-data-subset=5%

Первая команда проверяет структуру, вторая — читает часть данных и сверяет контрольные суммы. Запускайте вторую раз в месяц: она грузит диск и полосу, но именно она ловит тихую порчу.

Проверка структуры не заменяет реального восстановления — см. учебное восстановление.

Ресурсы

Restic держит в памяти индекс: на больших наборах это сотни мегабайт. На VDS-1 с 2 ГБ памяти при копировании десятков гигабайт возможна нехватка — ограничьте параллелизм или переносите тяжёлые копии на ступень выше. Нагрузка на диск заметная, планируйте на ночь: см. скорость диска.

Частые ошибки

  • Пароль хранится только на копируемой машине. Классика: машина потеряна вместе с ключом от копий.
  • forget без --prune. Место не освобождается, репозиторий растёт.
  • Копия в тот же каталог на том же диске. Восстанавливаться будет неоткуда — см. копии на другой площадке.
  • Не исключены кеши и /var/lib/docker. Копия распухает вчетверо без пользы, список нужного — в статье что копировать.
  • Параллельные запуски. Второй запуск наткнётся на блокировку репозитория. Оберните вызов в flock.