Restic

Материал из ALT Linux Wiki

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

Удалять снимки можно либо вручную (указав идентификатор снимка), либо с помощью политики, описывающей, какие снимки следует удалить.

Удаление одиночного снимка и данных, на которые ссылались файлы в этом снимке:

$ restic -r /tmp/restic-repo  forget df13e70c --prune
enter password for repository: 
repository cbac5dd4 opened successfully, password is correct
[0:00] 100.00%  1 / 1 files deleted
1 snapshots have been removed, running prune
loading indexes...
loading all snapshots...
finding data that is still in use for 2 snapshots
[0:00] 100.00%  2 / 2 snapshots
searching used packs...
collecting packs for deletion and repacking
[0:00] 100.00%  8 / 8 packs processed

to repack:            0 blobs / 0 B
this removes          0 blobs / 0 B
to delete:            4 blobs / 2.776 KiB
total prune:          4 blobs / 2.776 KiB
remaining:           31 blobs / 13.579 MiB
unused size after prune: 0 B (0.00% of remaining size)

rebuilding index
[0:00] 100.00%  7 / 7 packs processed
deleting obsolete index files
[0:00] 100.00%  1 / 1 files deleted
removing 1 old packs
[0:00] 100.00%  1 / 1 files deleted
done


Удаление снимков вручную чревато ошибками, поэтому restic позволяет указать политику (один или несколько параметров --keep-*), для которой следует сохранять снимки. Например, удалить все снимки, кроме трёх последних:

$ restic -r /tmp/restic-repo forget --keep-last 3 
enter password for repository: 
repository cbac5dd4 opened successfully, password is correct
Applying Policy: keep 3 latest snapshots
keep 3 snapshots:
ID        Time                 Host                Tags        Reasons        Paths
---------------------------------------------------------------------------------------------
b56aab49  2022-03-30 13:02:13  comp2.example.test              last snapshot  /home/user/docs
fdf45ecf  2022-03-30 15:03:55  comp2.example.test              last snapshot  /home/user/docs
3e587f18  2022-03-30 15:04:03  comp2.example.test              last snapshot  /home/user/docs
---------------------------------------------------------------------------------------------
3 snapshots

remove 1 snapshots:
ID        Time                 Host                Tags        Paths
------------------------------------------------------------------------------
44e47cf1  2022-03-30 12:54:02  comp2.example.test              /home/user/docs
------------------------------------------------------------------------------
1 snapshots

[0:00] 100.00%  1 / 1 files deleted

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

Восстановить данные из снимка 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.
Примечание: Для предоставления возможности монтирования файловой системы FUSE всем пользователями (по умолчанию доступно только пользователям, входящим в группу wheel), следует выполнить команду:
# 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