line — заметки на полях

Бэкапы домашнего сервера с restic

21 февраля 2026

Долгое время бэкап у меня был rsync на соседний диск. Это не бэкап, а зеркало: удалённый по ошибке файл аккуратно удаляется и в копии. Перешёл на restic — он делает снапшоты с дедупликацией и шифрованием, а хранить их можно где угодно, от второго диска до S3.

Репозиторий

Храню на NAS по SFTP. Пароль от репозитория — в файле, доступном только root:

install -m 600 /dev/null /etc/restic/password
# записать туда длинный случайный пароль

export RESTIC_REPOSITORY=sftp:backup@nas:/srv/restic/home
export RESTIC_PASSWORD_FILE=/etc/restic/password
restic init
Пароль от репозитория надо сохранить где-то ещё, кроме самого сервера. Без него снапшоты — это просто шум, восстановить их не получится никак.

Что и как копировать

restic backup /etc /home /srv \
    --exclude-file=/etc/restic/excludes \
    --one-file-system

В excludes — всё, что восстанавливается само или не нужно вовсе:

/home/*/.cache
/srv/*/tmp
*.iso
node_modules

Базы данных копировать как файлы на лету бессмысленно — перед бэкапом делаю дамп (pg_dump, sqlite3 .backup) в /srv/dumps, а копируется уже он.

Сколько хранить

restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

Неделя ежедневных, месяц еженедельных, полгода ежемесячных. --prune сразу освобождает место; на медленном хранилище его можно запускать реже, например раз в неделю.

Проверка — обязательно

Бэкап, из которого ни разу не восстанавливали, — это надежда, а не бэкап. Раз в неделю проверяю целостность с чтением части данных:

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

Раз в пару месяцев — настоящее восстановление в отдельный каталог:

restic snapshots
restic restore latest --target /tmp/restore --include /etc/nginx
diff -r /etc/nginx /tmp/restore/etc/nginx

Расписание

Всё это завёрнуто в скрипт и запускается systemd-таймером — подробно про таймеры в отдельной заметке. Бэкап ночью, check по воскресеньям отдельным таймером, чтобы долгая проверка не задерживала основной бэкап.