Найти в Дзене
DeSoft.ru

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

Оглавление

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

🔎 Подготовка

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

restic -r ~/restic_extra/repo init

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

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

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

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

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

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

# для конкретного снимка
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

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

# сколько места требуется для восстановления последнего снимка
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

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

# проверка структуры хранилища, целостности снимков
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 для автоматического удаления замененных снимков.

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.

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 могут быть использованы вместе.

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

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

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

# восстанавливаем последний снимок в каталог 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 показывают гибкость и глубокую проработку инструментария, что позволяет спроектировать и создать на его основе собственную систему хранения и контроля файловых резервных копий. Хоть версия программы еще не добралась до релиза, множество сценариев применения уже могут быть воплощены в реальных условиях эксплуатации.