Инкрементное резервное копирование на хранилище с помощью инструмента restic

Резервное копирование restic

В данной статье мы разберем настройку инкрементного резервного копирования с помощью инструмента restic. Мы уже писали о реализации резервного копирования с помощью duplicity, однако, вы можете попробовать и этот инструмент.

Утилита restic разработана на языке программирования Go. Преимущества этого инструмента заключаются в следующем:

  • простое управление;
  • скорость создания резервных копий ограничена только пропускной способностью дискового устройства и сетью;
  • возможность проверки целостности данных;
  • поддержка шифрования резервных копий с помощью AES-256;
  • инкрементное резервное копирование значительно сокращает необходимое место для хранения данных резервных копий;
  • множество протоколов удаленного хранилища — sftp , rest server , amazon s3 , minio server , openstack swift , backblaze b2 , microsoft azure blob storage , google cloud storage , rclone;
  • утилита бесплатна.

Установка Restic

Установить restic можно следующими командами:

Arch linux

pacman -S restic

Debian/Ubuntu

apt-get install restic (или apt install restic)

Fedora

dnf install restic

MacOS

brew install restic

Nix & NixOS

nix-env --install restic

OpenBSD

pkg_add restic

FreeBSD

pkg install restic

RHEL & Centos

yum install yum-plugin-copr

yum copr enable copart/restic

yum install restic

Альтернативная установка для Centos 7

yum-config-manager --add-repo https://copr.fedorainfracloud.org/coprs/copart/restic/repo/epel-7/copart-restic-epel-7.repo

yum install restic

Windows

Установка работает через Scoop (эмулятор командной консоли Linux для Windows).

scoop install restic

Docker контейнер

docker pull restic/restic

Настройка резервного копирования на удаленное хранилище SFTP с использованием ключей SSH

После установки приступаем к настройке. Создайте пару ключей для пользователя, из под которого будет выполняться резервное копирование с помощью следующей команды:

ssh-keygen -t rsa -b 4096

или используйте имеющийся (если вы ранее генерировали).

После генерации выполните подключение используя ваши логин и пароль с помощью любого доступного протокола к хранилищу. Далее примеры будут приводиться для файлового хранилища НетПоинт c1-ftp1.netpoint-dc.com.

На хранилище создайте файл authorized_keys в директории .ssh . Скопируйте данные из файла на сервере

cat /root/.ssh/id_rsa.pub

Поместите данные в файл authorized_keys и нажмите «Сохранить». Если файла нет, создайте его.

После того, как вы сформировали authorized_keys, подключение к серверу должно устанавливаться без запроса пароля:

#(Вместо "<username>" укажите имя пользователя хранилища. Подтвердите сертификат, если команда запросит подтверждение)

sftp <username>@c1-ftp1.netpoint-dc.com

Первое подключение выполнено и теперь можно подключаться используя файл ключа через restic. Первым делом нам необходимо инициализировать хранилище и задать парольную фразу. Выполните следующую команду для инициализации:

#(Вместо "<username>" укажите имя пользователя хранилища.
restic -r sftp:<username>@c1-ftp1.netpoint-dc.com:/_data/ init

Во время инициализации утилита попросит задать пароль. Придумайте надежную парольную фразу и введите ее два раза. Можете воспользоваться нашим генератором надежных паролей.

Запишите парольную фразу, чтобы не забыть и иметь возможность восстановить резервные копии. Если парольная фраза потеряется и вы не будете ее знать — вы не сможете восстановить свои резервные копии.

enter password for new backend:
enter password again:
(в данных строках укажите свою парольную фразу во время инициализации)

Выполнение резервного копирования

После инициализации можно выполнить команду резервного копирования. При первом запуске команды будет создана полная резервная копия.

#(Вместо "<username>" укажите имя пользователя хранилища. Во время резервного копирования вам нужно будет ввести парольную фразу)

restic -r sftp:<username>@c1-ftp1.netpoint-dc.com:/_data backup /etc

В примере выполняется резервное копирование директории /etc . Указывается параметр -r для определения хранилища и его путь.

Проверка доступных резервных копий и восстановление

Проверить состояние резервной копии можно таким образом:

restic -r sftp:<username>@c1-ftp1.netpoint-dc.com:/_data  snapshots

После определения имени резервной копии (у каждого снимка есть свой уникальный идентификатор) можно сделать восстановление:

restic -r  sftp:<username>@c1-ftp1.netpoint-dc.com:/_data  restore ID-snapshot --target /tmp/restore-folder

Удаление старых снимков

Для удаления старых снимков можно использовать следующую команду

restic -r sftp:name@c1-ftp1.netpoint-dc.com:/_data forget --keep-daily 7 --keep-monthly 2

#      --keep-daily задает количество ежедневных резервных копий
#      --keep-last задает количество резервных копий (сколько всего копий хранить)
#      --keep-hourly параметр задает количество резервных копий, если резервное копирование выполняется каждый час
#      --keep-weekly задает количество еженедельных резервных копий
#      --keep-monthly задает количество ежемесячных резервных копий
#      --keep-yearly задает количество ежегодных резервных копий

Автоматизация ввода пароля

Для автоматизации ввода пароля резервных копий можно использовать переменную окружения RESTIC_PASSWORD или RESTIC_PASSWORD_FILE, если пароль хранится в файле.

Полная документация к restic доступна на сайте утилиты.