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.