Пост

Проверка, очистка и восстановление данных из бэкапов restic

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

🔎 Подготовка

Удобнее тестировать функциональность на локальном хранилище, поэтому подготовим новый репозиторий

1
restic -r ~/restic_extra/repo init

и сделаем несколько снимков с промежуточными изменениями файлов

1
restic -r ~/restic_extra/repo --verbose backup ~/restic_extra/data

📝 Проверка данных

🔹 Список снимков репозитория

1
2
3
4
5
6
7
8
9
10
11
restic -r ~/restic_extra/repo snapshots

repository ea57e435 opened (repository version 2) successfully, password is correct
ID        Time                 Host           Tags        Paths
----------------------------------------------------------------------------------------
ce5c0cca  2025-01-20 21:01:36  desoftru-vm-1              /home/desoft/restic_extra/data
83d1269c  2025-01-20 21:21:42  desoftru-vm-1              /home/desoft/restic_extra/data
13504b6b  2025-01-20 21:24:46  desoftru-vm-1              /home/desoft/restic_extra/data
f2bcb4e5  2025-01-20 21:25:12  desoftru-vm-1              /home/desoft/restic_extra/data
----------------------------------------------------------------------------------------
4 snapshots

🔹 Список файлов снимка

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# для конкретного снимка
restic -r ~/restic_extra/repo ls 83d1269c

repository ea57e435 opened (repository version 2) successfully, password is correct
snapshot 83d1269c of [/home/desoft/restic_extra/data] filtered by [] at 2025-01-20 21:21:42.022659046 +0500 +05):
/home
/home/desoft
/home/desoft/restic_extra
/home/desoft/restic_extra/data
/home/desoft/restic_extra/data/file1.txt
/home/desoft/restic_extra/data/file2.txt
/home/desoft/restic_extra/data/file3.txt


# для последнего снимка
restic -r ~/restic_extra/repo ls latest

repository ea57e435 opened (repository version 2) successfully, password is correct
snapshot f2bcb4e5 of [/home/desoft/restic_extra/data] filtered by [] at 2025-01-20 21:25:12.881860387 +0500 +05):
/home
/home/desoft
/home/desoft/restic_extra
/home/desoft/restic_extra/data
/home/desoft/restic_extra/data/file1.txt
/home/desoft/restic_extra/data/file2.txt
/home/desoft/restic_extra/data/file3.txt
/home/desoft/restic_extra/data/file4.txt
/home/desoft/restic_extra/data/file5.txt
/home/desoft/restic_extra/data/secret.txt

🔹 Занимаемое дисковое пространство

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# сколько места требуется для восстановления последнего снимка
restic -r ~/restic_extra/repo stats latest

repository ea57e435 opened (repository version 2) successfully, password is correct
scanning...
Stats in restore-size mode:
Snapshots processed:   1
   Total File Count:   10
         Total Size:   124 B

# сколько места занимает снимок в хранилище
restic -r ~/restic_extra/repo stats --mode raw-data latest

repository ea57e435 opened (repository version 2) successfully, password is correct
scanning...
Stats in raw-data mode:
Snapshots processed:   1
   Total Blob Count:   11
         Total Size:   1.930 KiB

🔹 Верификация данных

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# проверка структуры хранилища, целостности снимков
restic -r ~/restic_extra/repo check

using temporary cache in /tmp/restic-check-cache-3647136682
repository ea57e435 opened (repository version 2) successfully, password is correct
created new cache in /tmp/restic-check-cache-3647136682
create exclusive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
[0:00] 100.00%  4 / 4 snapshots
no errors were found

# расширенная проверка с включением файлов в снимках
restic -r ~/restic_extra/repo check --read-data

using temporary cache in /tmp/restic-check-cache-272191598
repository ea57e435 opened (repository version 2) successfully, password is correct
created new cache in /tmp/restic-check-cache-272191598
create exclusive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
[0:00] 100.00%  4 / 4 snapshots
read all data
[0:00] 100.00%  8 / 8 packs
no errors were found

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

🪓 Очистка хранилища

🔹 Исключение нежелательных данных из репозитория

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
restic -r ~/restic_extra/repo rewrite --exclude secret.txt --forget

repository ea57e435 opened (version 2, compression level auto)
[0:00] 100.00%  6 / 6 index files loaded

snapshot ce5c0cca of [/home/desoft/restic_extra/data] at 2025-01-20 21:01:36.217479383 +0500 +05 by desoft@desoftru-vm-1

snapshot 13504b6b of [/home/desoft/restic_extra/data] at 2025-01-20 21:24:46.974289631 +0500 +05 by desoft@desoftru-vm-1
excluding /home/desoft/restic_extra/data/secret.txt
saved new snapshot 9f8ded6d
removed old snapshot 13504b6b

snapshot 83d1269c of [/home/desoft/restic_extra/data] at 2025-01-20 21:21:42.022659046 +0500 +05 by desoft@desoftru-vm-1

snapshot f2bcb4e5 of [/home/desoft/restic_extra/data] at 2025-01-20 21:25:12.881860387 +0500 +05 by desoft@desoftru-vm-1
excluding /home/desoft/restic_extra/data/secret.txt
saved new snapshot 44fa7f2d
removed old snapshot f2bcb4e5

modified 2 snapshots

🔹 Удаление данных

Хоть мы и очистили хранилище от снимков с нежелательными данными, сами данные остались нетронутыми, а лишь потеряли привязку к снимкам. Для очистки от неиспользуемых более данных существует команда prune.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
restic -r ~/restic_extra/repo prune

repository ea57e435 opened (version 2, compression level auto)
loading indexes...
[0:00] 100.00%  6 / 6 index files loaded
loading all snapshots...
finding data that is still in use for 4 snapshots
[0:00] 100.00%  4 / 4 snapshots
searching used packs...
collecting packs for deletion and repacking
[0:00] 100.00%  8 / 8 packs processed

repacking packs
[0:00] 100.00%  1 / 1 packs repacked
rebuilding index
[0:00] 100.00%  6 / 6 indexes processed
[0:00] 100.00%  6 / 6 old indexes deleted
removing 2 old packs
[0:00] 100.00%  2 / 2 files deleted
done

📌 Для автоматизации процесса очистки forget и prune могут быть использованы вместе.

1
2
# оставляем 2 последних снимка, остальное очищаем
restic -r ~/restic_extra/repo forget --keep-last 2 --prune

За правила очистки отвечает опция --keep-*. Все доступные варианты использования здесь.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# восстанавливаем последний снимок в каталог repo_restored
restic -r ~/restic_extra/repo restore latest --target ~/restic_extra/repo_restored

repository ea57e435 opened (version 2, compression level auto)
[0:00] 100.00%  1 / 1 index files loaded
restoring snapshot 44fa7f2d of [/home/desoft/restic_extra/data] at 2025-01-21 09:25:12.881860387 +0500 +05 by desoft@desoftru-vm-1 to /home/desoft/restic_extra/repo_restored
Summary: Restored 9 files/dirs (109 B) in 0:00

# смотрим что получилось
tree ~/restic_extra/repo_restored

/home/desoft/restic_extra/repo_restored
└── home
    └── desoft
        └── restic_extra
            └── data
                ├── file1.txt
                ├── file2.txt
                ├── file3.txt
                ├── file4.txt
                └── file5.txt

5 directories, 5 files

Команда restore также поддерживает различные параметры фильтрации для более детальной настройки, что подробно расписано в документации.

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

Больше полезной информации в Telegram-канале