restic делает зашифрованные снимки с дедупликацией: каждый новый снимок хранит только изменения, а восстановить можно любую версию. Хранилищем может быть S3-совместимый бакет, другой сервер по SFTP или локальный диск.
Установка
$ apt install -y restic$ restic versionНастройки репозитория
Сохраните настройки в файл, доступный только root. Пример для S3-совместимого хранилища:
$ export RESTIC_REPOSITORY="s3:https://s3.example.com/my-backups/web-01"$ export AWS_ACCESS_KEY_ID="ключ-доступа"$ export AWS_SECRET_ACCESS_KEY="секретный-ключ"$ export RESTIC_PASSWORD_FILE="/root/.restic-password"Для другого сервера по SFTP (вход по SSH-ключу) достаточно строки репозитория:
$ export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic/web-01"$ openssl rand -base64 32 > /root/.restic-password$ chmod 600 /root/.restic-password /root/.restic.envСоздание репозитория и первый снимок
$ . /root/.restic.env$ restic init$ restic backup /etc /var/www /home /var/backups/db --exclude-caches$ restic snapshotsСколько хранить
$ restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --pruneforget отмечает лишние снимки, --prune удаляет их данные из хранилища.
Ежедневный запуск
$ #!/bin/sh$ set -e$ . /root/.restic.env$ restic backup /etc /var/www /home /var/backups/db --exclude-caches --quiet$ restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune --quiet$ echo "$(date -Is) ok"$ chmod 700 /usr/local/bin/backup-restic.sh15 4 * * * root flock -n /run/backup-restic.lock /usr/local/bin/backup-restic.sh >> /var/log/backup-restic.log 2>&1Проверьте результат
$ . /root/.restic.env$ restic snapshots$ restic checkcheck проверяет целостность структуры репозитория. Раз в месяц можно проверить и часть самих данных: restic check --read-data-subset=10%.
Восстановление
$ restic ls latest /var/www$ restic restore latest --target /tmp/restore --include /var/www/site$ ls /tmp/restore/var/www/siteВосстанавливайте во временный каталог, проверяйте и только потом переносите на место. Вместо latest можно указать id снимка из restic snapshots.
Частые ошибки
- unable to open repository или Fatal: wrong password — не загружен файл окружения (. /root/.restic.env) или не тот пароль.
- Repository is already locked — предыдущий запуск прервался. Убедитесь, что restic не работает, и выполните restic unlock.
- Ключ S3 с правом удаления хранится на сервере — взломщик сможет стереть копии. По возможности включите в хранилище версионирование или блокировку объектов.