Хранение и резервные копии

Бэкапы сервера с restic

1 мин чтения

restic — утилита резервного копирования, которая шифрует данные, хранит только измененные блоки (дедупликация) и ведет историю копий. Работает в Linux, macOS и Windows.

Установка

sudo apt install restic        # Ubuntu, Debian
sudo dnf install restic        # Rocky Linux, AlmaLinux (EPEL)

Настройка

Создайте файл с параметрами подключения, например /root/.restic-env:

export AWS_ACCESS_KEY_ID=<Access Key>
export AWS_SECRET_ACCESS_KEY=<Secret Key>
export RESTIC_REPOSITORY=s3:https://s3.uzcstorage.uz/my-backups/server-1
export RESTIC_PASSWORD_FILE=/root/.restic-password
openssl rand -base64 32 > /root/.restic-password
chmod 600 /root/.restic-env /root/.restic-password

Внимание

restic шифрует бэкапы этим паролем. Без пароля восстановить данные невозможно. Сохраните его копию вне сервера, например в менеджере паролей.

Инициализируйте репозиторий:

source /root/.restic-env
restic -o s3.bucket-lookup=path -o s3.region=default init

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

source /root/.restic-env
R="restic -o s3.bucket-lookup=path -o s3.region=default"

$R backup /etc /var/www /home --exclude-caches
$R snapshots

Автоматизация и ротация

Создайте скрипт /usr/local/bin/restic-backup.sh, который делает бэкап и хранит 7 ежедневных, 4 еженедельные и 6 ежемесячных копий:

#!/bin/bash
set -e
source /root/.restic-env
R="restic -o s3.bucket-lookup=path -o s3.region=default"
$R backup /etc /var/www /home --exclude-caches --quiet
$R forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune --quiet

Сделайте его исполняемым и запускайте каждую ночь в 03:00 через cron:

sudo chmod 700 /usr/local/bin/restic-backup.sh
echo "0 3 * * * root /usr/local/bin/restic-backup.sh >> /var/log/restic.log 2>&1" | sudo tee /etc/cron.d/restic

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

source /root/.restic-env
R="restic -o s3.bucket-lookup=path -o s3.region=default"

$R restore latest --target /restore                      # the whole latest backup
$R restore latest --target /restore --include /etc/nginx # one folder
$R check                                                 # verify the repository

Регулярно проверяйте восстановление: копия, из которой ни разу не восстанавливались, — не гарантия.

Совет

См. также: