Одним из наиболее удобных инструментов для резервного копирования данных является утилита с открытым исходным кодом Restic. Данная утилита поддерживает дедупликацию данных, шифрование и создание снапшотов. При помощи Restic сохранять резервные копии можно как на локальных носителях, так и на удалённых серверах и в облачных хранилищах.
В статье рассмотрим, как производится настройка резервного копирования при помощи утилиты Restic, установленной на виртуальный сервер под управлением Ubuntu или Debian.
Настройка резервного копирования с использованием Restic на Ubuntu и Debian
После установки Restic создайте каталог, в котором будут храниться резервные копии и служебные данные, необходимые для их создания и восстановления:
$ sudo mkdir -p /backup/restic
Чтобы сохранять резервные копии файлов и директорий сервера не на локальном диске, а на внешнем ресурсе, имеет смысл на другом сервере настроить общий каталог при помощи Samba. Пример установки Samba и настройки общедоступного ресурса на Rocky Linux описан здесь.
После инсталляции и настройки Samba вернитесь к серверу, на котором настраиваете Restic. Здесь установите в систему утилиты, предназначенные для работы с файловыми ресурсами по протоколу SMB/CIFS:
$ sudo apt install cifs-utils
Затем примонтируйте общий диск Samba к созданному ранее каталогу /backup/restic:
$ sudo mount -t cifs //X.X.X.X/share /backup/restic/ -o user="sambauser"
В данном случае замените X.X.X.X на IP-адрес сервера Samba, а sambauser — на имя пользователя, имеющего доступ к каталогу Samba. При подключении необходимо ввести пароль для указанного в команде пользователя.
Чтобы убедиться в успешном подключении сервера к общему диску, выведите информацию о файловых системах, смонтированных в операционной системе:
$ df -h
В выводе должна присутствовать строка, соответствующая общему каталогу на сервере Samba, подключённому к каталогу Restic.

Для доступа к своему репозиторию утилита Restic использует пароль. Чтобы не запрашивать пароль при каждом запуске, утилита может считывать его из файла с помощью параметра --password-file. Это удобно при настройке автоматического выполнения резервного копирования по расписанию с помощью cron или systemd. Поэтому на следующем шаге создайте файл, в котором будет храниться данный пароль:
$ sudo nano /root/.restic-password
В файле /root/.restic-password не должно быть ничего, кроме пароля, используемого Restic. Придумайте сложный пароль и укажите его единственной строкой в файле, например, так:
ResticYourVeryStrongPassword
Закройте файл с сохранением, после чего измените права доступа к нему:
$ sudo chmod 600 /root/.restic-password
В данном случае числовое значение 600 означает, что владелец файла получает права на чтение и запись. При этом все остальные пользователи системы полностью лишаются каких-либо прав доступа к файлу. В результате только пользователь root может просматривать содержимое файла или изменять его. Остальные же пользователи не смогут прочитать пароль, открыть файл или отредактировать его содержимое.
Создание резервной копии
Чтобы подготовить Restic непосредственно к бэкапированию данных, создайте новый репозиторий:
$ sudo restic init --repo /backup/restic --password-file /root/.restic-password
При успешном выполнении команды должно появиться сообщение вида created restic repository.

После чего запустите создание резервной копии, например, каталога /etc:
$ sudo restic backup /etc --repo /backup/restic --password-file /root/.restic-password
В ходе выполнения команда рекурсивно просматривает все файлы и подкаталоги, расположенные в /etc. Утилита считывает их содержимое, разбивает данные на блоки, выполняет их дедупликацию, шифрует и сохраняет в репозиторий, расположенный в каталоге /backup/restic. Для доступа к репозиторию Restic использует пароль, который считывается из файла /root/.restic-password. Поэтому пользователю не потребуется вводить его вручную.

Чтобы убедиться в успешном создании резервной копии, выполните проверку целостности репозитория:
$ sudo restic check --repo /backup/restic --password-file /root/.restic-password
Во время проверки Restic анализирует структуру репозитория, а также проверяет наличие и корректность служебных файлов, снимков, индексов и всех сохранённых блоков данных. Если какие-либо данные повреждены или отсутствуют, команда сообщит об обнаруженных ошибках. При успешном завершении проверки команда выводит сообщение вида no errors were found. Это говорит о том, что все структуры репозитория и данные находятся в исправном состоянии.

Также следующей командой можно вывести список файлов и каталогов, содержащихся в последнем снапшоте репозитория Restic:
$ sudo restic ls latest --repo /backup/restic --password-file /root/.restic-password
Восстановление данных из резервной копии
Для восстановления содержимого последнего снапшота из репозитория Restic выполните следующую команду:
$ sudo restic restore latest --target /restore --repo /backup/restic --password-file /root/.restic-password
Чтобы восстановить данные, расположенные в каталоге /backup/restic, Restic также использует для доступа к нему пароль, хранящийся в файле /root/.restic-password.

Важно понимать, что команда restic restore не восстанавливает файлы непосредственно в их исходное расположение. Все данные извлекаются в каталог, указанный параметром --target, при этом сохраняется исходная структура каталогов. Например, если выполняется восстановление каталога /etc в каталог /restore, то файлы будут расположены по пути /restore/etc/. После проверки их можно вручную скопировать или переместить в требуемое место.
Restic легко интегрируется со средствами автоматизации Linux, что позволяет выполнять резервное копирование без участия администратора. Для этого, например, можно создать скрипт, содержащий необходимые команды резервного копирования. Также скрипт может содержать команды для проверки репозитория или удаления устаревших снапшотов. Далее, как правило, администратор настраивает регулярный запуск данного скрипта с использованием cron или таймеров systemd. Поскольку Restic считывает пароль из файла и выполняет операции в неинтерактивном режиме, утилиту удобно применять для автоматического создания резервных копий.
