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 <snapshot-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 ГБ RAM резервування десятків гігабайтів може не вкластися — обмежте паралельність або перенесіть важкі резервні копії на рівень вище. Навантаження на диск помітне, тож плануйте на ніч: дивіться швидкість диска.
Поширені помилки
- Пароль зберігається лише на машині, яку резервують. Класика: машину втрачено разом із ключем до резервних копій.
forgetбез--prune. Місце не звільняється, і репозиторій продовжує зростати.- Резервна копія в тому самому каталозі на тому самому диску. Відновлювати буде нізвідки — дивіться резервні копії в іншому місці.
- Кеші та
/var/lib/dockerне виключено. Резервна копія роздувається вчетверо без жодної користі; перелік того, що включати, — у статті що резервувати. - Паралельні запуски. Другий запуск натрапить на блокування репозиторію. Обгорніть виклик у
flock.