Šifrování AES-256 ve výchozím nastavení
Restic šifruje absolutně všechna data, která ukládá do repozitáře – nejen obsah souborů, ale i názvy souborů, adresářovou strukturu, metadata (časové značky, oprávnění, vlastníky) a indexy. Šifrování používá AES-256 v režimu CTR pro šifrování dat a Poly1305 pro ověření integrity (authenticated encryption). Tato kombinace je považována za jednu z nejbezpečnějších v kryptografii.
Šifrovací klíč je odvozen z hesla uživatele pomocí funkce scrypt, která je navržena tak, aby byla výpočetně náročná a odolná proti brute-force útokům. Restic umožňuje mít pro jeden repozitář více hesel (klíčů) – můžete například mít jedno heslo pro denní zálohy a druhé pro administrátora, který potřebuje přístup v případě nouze.
Důležité je, že šifrování v Restic nelze vypnout. To je záměrné designové rozhodnutí – zabraňuje situacím, kdy uživatel zapomene aktivovat šifrování a jeho data jsou pak uložena v nezašifrované podobě na vzdáleném úložišti. Nikdy nemusíte přemýšlet, zda jsou vaše zálohy bezpečné – s Restic vždy jsou.
Content-Defined Chunking (CDC) a deduplikace
Restic rozděluje soubory na bloky (chunky) pomocí algoritmu content-defined chunking. Na rozdíl od fixed-size chunking, kde jsou bloky pevné velikosti (např. 1 MB), CDC určuje hranice bloků na základě obsahu dat pomocí posuvného okna a hash funkce (Rabin fingerprint).
Výhoda CDC je zásadní: pokud vložíte data doprostřed souboru, změní se pouze bloky kolem místa vložení. Všechny ostatní bloky zůstanou identické. Při fixed-size chunking by se posunuly hranice všech následujících bloků a celý zbytek souboru by musel být znovu uložen. CDC tak dosahuje výrazně lepší deduplikace, zejména u souborů, které se mění jen částečně – databáze, virtuální disky, logy, e-mailové schránky atd.
Deduplikace v Restic je globální – funguje napříč všemi snapshoty a všemi zálohovanými adresáři. Pokud máte stejný soubor na více počítačích nebo ve více složkách, uloží se pouze jednou. To výrazně šetří místo na úložišti, zejména v prostředí s více zálohovanými stroji.
Snapshoty
Každé spuštění restic backup vytvoří snapshot – neměnný záznam stavu zálohovaných dat v daném okamžiku. Snapshot obsahuje:
- Unikátní ID – krátký hash pro identifikaci snapshotu
- Časovou značku – datum a čas vytvoření
- Hostname – jméno počítače, ze kterého záloha pochází
- Cesty – seznam zálohovaných adresářů
- Tagy – volitelné štítky pro organizaci snapshotů
- Strom souborů – kompletní adresářová struktura s odkazy na datové bloky
Snapshoty jsou neměnné (immutable) – jakmile jsou vytvořeny, nelze je upravit. Lze je pouze smazat pomocí příkazu restic forget. To zajišťuje, že zálohy nemohou být náhodně poškozeny nebo změněny.
Prune – garbage collection
Příkaz restic prune odstraňuje datové bloky, které již nejsou referencovány žádným snapshotem. Typický pracovní postup je:
- Použijte
restic forgets politikami retence pro označení snapshotů ke smazání - Spusťte
restic prunepro fyzické uvolnění místa
Alternativně můžete oba kroky kombinovat: restic forget --prune --keep-last 7 --keep-weekly 4 --keep-monthly 12 – tento příkaz zachová posledních 7 snapshotů, 4 týdenní a 12 měsíčních, a okamžitě uvolní místo. Prune je optimalizovaný na minimalizaci datových přenosů a funguje efektivně i na vzdálených úložištích.
Mount – procházení záloh jako souborový systém
Příkaz restic mount připojí repozitář jako FUSE souborový systém. Po připojení můžete procházet snapshoty jako běžné adresáře ve správci souborů nebo příkazovém řádku. Struktura připojeného souborvého systému vypadá takto:
/mnt/restic/
├── hosts/
│ ├── server1/
│ │ ├── 2024-01-15T02:00:00/
│ │ ├── 2024-01-16T02:00:00/
│ │ └── latest -> 2024-01-16T02:00:00/
│ └── server2/
│ └── ...
├── snapshots/
│ ├── abc12345/
│ └── def67890/
├── ids/
└── tags/
Mount je ideální pro rychlé procházení a hledání konkrétních souborů v zálohách bez nutnosti obnovovat celý snapshot. Funguje na Linuxu a macOS (vyžaduje FUSE).
Diff – porovnání snapshotů
Příkaz restic diff porovná dva snapshoty a zobrazí, jaké soubory byly přidány, odstraněny nebo změněny mezi nimi. To je užitečné pro audit změn, zjištění co se zálohovalo v posledním cyklu, nebo identifikaci neočekávaných změn na systému.
# Porovnání dvou snapshotů
restic diff abc12345 def67890
# Výstup:
# + /data/novy-soubor.txt
# - /data/smazany-soubor.txt
# M /data/zmeneny-soubor.txt
# U /data/nezmeneny/ (adresář)
Check – ověření integrity repozitáře
Příkaz restic check ověřuje integritu repozitáře na několika úrovních:
- Základní kontrola (
restic check) – ověří strukturu repozitáře, indexy a metadata - Kontrola dat (
restic check --read-data) – navíc přečte a ověří všechny datové bloky - Kontrola podmnožiny (
restic check --read-data-subset=5%) – ověří náhodný vzorek dat (užitečné pro velké repozitáře)
Pravidelná kontrola integrity je důležitá pro včasné odhalení poškození dat (bit rot) nebo problémů s úložištěm. Doporučujeme spouštět restic check alespoň jednou měsíčně a restic check --read-data alespoň jednou za čtvrtletí.
Copy – kopírování mezi repozitáři
Příkaz restic copy umožňuje kopírovat snapshoty z jednoho repozitáře do druhého. To je užitečné pro vytvoření další kopie záloh na jiném úložišti (pravidlo 3-2-1), migraci na nové úložiště, nebo sdílení konkrétních záloh s jinými lidmi. Kopírování využívá deduplikaci – kopírují se pouze bloky, které v cílovém repozitáři chybí.
Exclude patterns
Restic nabízí flexibilní systém pro vyloučení souborů a adresářů ze zálohy:
--exclude– vyloučení podle vzoru (např.--exclude="*.tmp")--exclude-file– načtení vzorů ze souboru--exclude-if-present– vyloučení adresáře, pokud obsahuje specifický soubor (např..nobackup)--exclude-caches– vyloučení adresářů označených jako cache (obsahujících soubor CACHEDIR.TAG)--exclude-larger-than– vyloučení souborů větších než zadaná velikost
Omezení šířky pásma
Parametr --limit-upload a --limit-download umožňují omezit rychlost přenosu dat v KiB/s. To je užitečné pro zálohy přes pomalejší připojení nebo pro zajištění, aby záloha neomezovala ostatní síťový provoz.
# Omezení uploadu na 5 MiB/s a downloadu na 10 MiB/s
restic backup --limit-upload 5120 --limit-download 10240 /data
Tagy
Snapshoty lze označit tagy – textovými štítky pro organizaci a filtraci. Tagy můžete přidat při vytváření zálohy (restic backup --tag server,daily /data) nebo je přidat/odebrat dodatečně (restic tag --add important abc12345). Tagy lze poté používat pro filtraci v příkazech snapshots, forget, restore a dalších.
Podpora mnoha backendů
Restic nativně podporuje tyto backendy úložišť:
| Backend | Protokol/Služba | Typické použití |
|---|---|---|
| Local | Lokální souborový systém | USB disky, NAS přes NFS/SMB |
| SFTP | SSH File Transfer Protocol | VPS, vzdálené servery, NAS |
| REST | HTTP REST API (rest-server) | Vlastní zálohovací server |
| S3 | Amazon S3 API | AWS, MinIO, Wasabi |
| B2 | Backblaze B2 API | Backblaze B2 Cloud Storage |
| Azure | Azure Blob Storage | Microsoft Azure |
| GS | Google Cloud Storage | Google Cloud Platform |
| rclone | Přes rclone (70+ služeb) | OneDrive, Dropbox, pCloud, MEGA... |