Restic
restic — система резервного копирования, предоставляет инструменты для сохранения резервных копий в версионированном репозитории, который может размещаться на внешних серверах и в облачных хранилищах. Данные хранятся в зашифрованном виде. Restic позволяет определить правила для включения и исключения файлов и каталогов в резервную копию.
В данной статье рассмотрен процесс создания резервной копии и восстановления данных в локальном каталоге.
Установка
Установить пакет restic:
# apt-get install restic
Создание репозитория
Репозиторий — место, где хранятся резервные копии.
Локальный каталог
Создать репозиторий /tmp/restic-repo (потребуется задать пароль для репозитория):
$ restic init --repo /tmp/restic-repo
enter password for new repository:
enter password again:
created restic repository cbac5dd448 at /tmp/restic-repo
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
Внешний сервер с доступом по SFTP
Для возможности создания резервных копий с использованием sftp, необходимо настроить доступ на сервер ssh по ключу без пароля (т.к. restic не может подключиться к репозиторию, если сервер запрашивает учетные данные).
Создание репозитория:
$ restic -r sftp:user@host:/tmp/restic-repo init
enter password for new repository:
enter password again:
created restic repository 56843cf637 at sftp:user@host:/tmp/restic-repo2
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
Создание резервной копии
Создать резервную копию каталога ~/docs (потребуется ввести пароль, заданный при создании репозитория):
$ restic -r /tmp/restic-repo backup ~/docs
enter password for repository:
repository cbac5dd4 opened successfully, password is correct
created new cache in /home/user/.cache/restic
no parent snapshot found, will read all files
Files: 3 new, 0 changed, 0 unmodified
Dirs: 3 new, 0 changed, 0 unmodified
Added to the repo: 143.979 KiB
processed 3 files, 141.763 KiB in 0:00
snapshot 44e47cf1 saved
В результате создана резервная копия каталога ~/docs. Созданный снимок идентифицируется последовательностью шестнадцатеричных символов, в данном случае 44e47cf1.
Резервное копирование файла:
$ restic -r /tmp/restic-repo backup ~/test/alt-education-10.0.pdf
Исключить файлы типа .mp3 из резервной копии:
$ restic -r /tmp/restic-repo backup --exclude=*.mp3 ~/docs
Можно указать все файлы, которые необходимо исключить, в файле, и указать этот файл при создании резервной копии. Например:
$ cat excludes.txt
# исключить файлы mp3
*.mp3
# исключить foo/x/y/z/bar foo/x/bar foo/bar
foo/**/bar
$ restic -r /tmp/restic-repo backup --exclude-file=excludes.txt ~/docs
Управление снимками
Список всех снимков, доступных в репозитории:
$ restic -r /tmp/restic-repo snapshots
enter password for repository:
repository cbac5dd4 opened successfully, password is correct
ID Time Host Tags Paths
-----------------------------------------------------------------------------------------------------
44e47cf1 2022-03-30 12:54:02 comp2.example.test /home/user/docs
b56aab49 2022-03-30 13:02:13 comp2.example.test /home/user/docs
df13e70c 2022-03-30 13:09:03 comp2.example.test /home/user/test/alt-education-10.0.pdf
9e0a78eb 2022-03-30 13:11:49 comp2.example.test /home/user/docs
-----------------------------------------------------------------------------------------------------
Сравнение снимков:
$ restic -r /tmp/restic-repo diff 44e47cf1 b56aab49
enter password for repository:
repository cbac5dd4 opened successfully, password is correct
comparing snapshot 44e47cf1 to b56aab49:
+ /home/user/docs/alt-education-10.0-ru-RU.pdf
M /home/user/docs/test.txt
Files: 1 new, 0 removed, 1 changed
Dirs: 0 new, 0 removed
Others: 0 new, 0 removed
Data Blobs: 20 new, 1 removed
Tree Blobs: 4 new, 4 removed
Added: 13.437 MiB
Removed: 2.228 KiB
Восстановление данных
Восстановить данные из снимка b56aab49 в /tmp/restore:
$ restic -r /tmp/restic-repo restore b56aab49 --target /tmp/restore
enter password for repository:
repository cbac5dd4 opened successfully, password is correct
restoring <Snapshot b56aab49 of [/home/user/docs] at 2022-03-30 13:02:13.947703656 +0200 EET by user@comp2.example.test> to /tmp/restore
Просмотр данных без восстановления
Резервную копию можно исследовать как обычную файловую систему. Для этого необходимо создать точку монтирования (например, ~/restic) и примонтировать в нее репозиторий:
$ mkdir ~/restic
$ restic -r /tmp/restic-repo mount ~/restic
enter password for repository:
repository cbac5dd4 opened successfully, password is correct
Now serving the repository at /home/user/restic
When finished, quit with Ctrl-c or umount the mountpoint.
# control fusermount public
Репозиторий в файловом менеджере:
Проверка репозитория
Проверка структуры репозитория:
$ restic -r /tmp/restic-repo check
…
load indexes
check all packs
check snapshots, trees and blobs
no errors were found
[0:00] 100.00% 4 / 4 snapshots
Проверка структуры репозитория и целостность файлов в репозитории:
$ restic -r /tmp/restic-repo check --read-data
…
load indexes
check all packs
check snapshots, trees and blobs
[0:00] 100.00% 4 / 4 snapshots
read all data
[0:00] 100.00% 9 / 9 packs
no errors were founds