Резервное копирование. Restic

2025-08-17 · 3 мин. для прочтения

Резервное копирование. Restic.

Содержание

1 Общая информация

2 Установка

  • Debian:
sudo apt install restic
  • RHEL:
sudo dnf install restic
  • Gentoo:
    emerge app-backup/restic
    

3 Сохранение пароля репозитория restic в pass

3.1 Пароль репозитория

  • Создать пароль репозитория:
pass insert sysadmin/$(hostnamectl hostname)/restic
  • Введите пароль от репозитория Restic при запросе.

3.2 Проверьте пароль

pass show sysadmin/$(hostnamectl hostname)/restic

4 Внешний сервер с доступом по SFTP

4.1 Ключ ssh

  • Для возможности создания резервных копий с использованием sftp, необходимо настроить доступ на сервер ssh по ключу без пароля (т.к. restic не может подключиться к репозиторию, если сервер запрашивает учетные данные).
  • Для использования определённого ключа настройте конфигурационный файл ~/.ssh/config:
    Host foo
        IdentityFile ~/.ssh/foo-secret-key-file
    
  • Можно создать полную конфигурацию для соединения в ~/.ssh/config:
    Host foo-restic
        User username
        Port 22
        IdentityFile ~/.ssh/foo-secret-key-file
        Hostname foo
    
  • Тогда подключаться надо будет так:
    restic -r sftp://foo-restic//some/dir
    

4.2 Инициализация репозитория на SFTP

  • Инициализация:
    restic -r sftp://user@example.com:22//path/to/backup-repo --password-command "pass sysadmin/$(hostnamectl hostname)/restic" init
    
  • Двойной слеш (//) для случая абсолютной адресации (от корня).

4.3 Сделать резервную копию

  • Сделать резервную копию:
restic -r sftp://user@example.com/backup-repo --ssh-command "ssh -i ~/.ssh/key" --password-command "pass sysadmin/$(hostnamectl hostname)/restic" backup /важные_данные

5 Автоматизация бэкапов

5.1 Создайте файл с паролем

echo "ваш_пароль_репозитория" > ~/.restic-password
chmod 600 ~/.restic-password

5.2 Скрипт для бэкапа

  • Создайте файл ~/backup-script.sh:
#!/bin/bash

# Настройки
REPO="sftp:user@example.com:/backup-repo"
SOURCE="/важные_данные"

# Команда бэкапа
restic -r $REPO \
       --password-command "pass sysadmin/$(hostnamectl hostname)/restic" \
       backup $SOURCE

# Очистка старых бэкапов (храним: 7 дневных, 4 недельных, 6 месячных)
restic -r $REPO \
       --password-command "pass sysadmin/$(hostnamectl hostname)/restic" \
       forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6

# Оптимизация репозитория
restic -r $REPO \
       --password-command "pass sysadmin/$(hostnamectl hostname)/restic" \
       prune
  • Сделайте скрипт исполняемым:
chmod +x ~/backup-script.sh

5.3 Настройте cron для ежедневных бэкапов

  • Добавьте строку (пример для ежедневного бэкапа в 2:00) в cron:
0 2 * * * /bin/bash /home/ваш_пользователь/backup-script.sh >> /var/log/restic.log 2>&1

6 Обслуживание резервных копий

6.1 Проверка целостности

  • Проверим целостность резервной копии:
restic -r sftp://user@example.com/backup-repo --ssh-command "ssh -i ~/.ssh/key" --password-command "pass sysadmin/$(hostnamectl hostname)/restic" check

6.2 Просмотр списка резервных копий

  • Список резервных копий:
restic -r sftp://user@example.com/backup-repo --ssh-command "ssh -i ~/.ssh/key" --password-command "pass sysadmin/$(hostnamectl hostname)/restic" snapshots

7 Восстановление данных

7.1 Восстановление последнего снимка

  • Восстановим последний снимок:
restic -r sftp://user@example.com/backup-repo --ssh-command "ssh -i ~/.ssh/key" --password-command "pass sysadmin/$(hostnamectl hostname)/restic" restore latest --target /путь/восстановления
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.