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