Vrácení systému na ext4 pomocí rsync a hardlink: praktická implementace
Standardní instalace Linuxu na ext4 nepodporují vestavěné snímky, což komplikuje rychlý návrat k předchozímu stavu. Nástroje pro zálohování jako borg nebo restic jsou zaměřené na dlouhodobé ukládání dat, nikoli na lokální vrácení změn. Obnova z úplné zálohy trvá hodiny a vyžaduje zpracování velkých objemů, což je neefektivní pro opravu lokálních chyb v konfiguracích nebo po aktualizacích.
Řešení vyžaduje minimalizaci závislostí: bez změny souborového systému, LVM nebo specializovaných FS jako Btrfs/ZFS. Přístup je založen na rsync s podporou hardlink pro deduplikaci.
Princip fungování: rsync + hardlink
rsync synchronizuje adresáře, kopíruje pouze změny. Volba --link-dest umožňuje odkazovat se na předchozí snímek: nezměněné soubory se znovu použijí přes hardlink, zabírají minimum místa. Hardlink jsou další názvy pro jeden inode, zajišťující nulové náklady na nezměněná data.
Základní příkaz pro vytvoření snímku:
rsync -aHAX --numeric-ids --delete --link-dest="$PREV" "$SRC" "$DEST_TMP/"
-a: archivní režim (rekurze, práva, časová razítka).-H: zachování hardlink.-A: ACL.-X: rozšířené atributy.--numeric-ids: UID/GID podle čísel.--delete: odstranění nadbytečných souborů v cílovém adresáři.
Tím se převede aktuální stav na snímek, kopíruje se pouze rozdíl.
Struktura ukládání snímků
Snímky jsou umístěny v .infra_snapshots/ jako běžné adresáře s časovými značkami:
.infra_snapshots/
├── system/
│ ├── 2026-03-01_00-30-00/
│ ├── 2026-03-02_00-30-00/
│ └── LATEST -> 2026-03-02_00-30-00/
├── docker/
│ ├── 2026-03-01_23-30-00/
│ └── LATEST -> 2026-03-01_23-30-00/
Symbolický odkaz LATEST ukazuje na aktuální snímek pro automatizaci. Oddělení system a docker umožňuje izolovat systémové soubory od kontejnerových: volumes Docker jsou vyloučeny, aby se předešlo problémům s měnícími se daty.
Proces vytváření:
- Vytvořit dočasný adresář
.tmp-YYYY-MM-DD_HH-MM-SS. - Spustit rsync do něj.
- Atomicky přejmenovat:
mv -T "$TMP_DEST" "$FINAL_DEST". - Aktualizovat
LATEST:ln -sfn "$FINAL_DEST" "$LATEST_LINK".
Tím je zaručena atomičnost: snímek je buď úplný, nebo chybí.
Obnovení stavu
Vrácení změn – zpětná synchronizace s dry-run pro náhled:
rsync -aHAX --numeric-ids --delete --dry-run "$SNAP/" "/"
Po kontrole odstraňte --dry-run pro aplikaci. rsync převede kořen systému do stavu snímku, odstraní nové soubory a obnoví staré přes hardlink.
Pro Docker: obdobně, ale pouze na adresář kontejnerů, s vyloučením volumes.
Omezení přístupu
- Absence systémové atomičnosti: rsync čte soubory postupně, systém se může během vytváření měnit. Snímek je konzistentní podle souborů, ale není okamžitý.
- Měnící se data: logy, databáze, dočasné soubory mohou být v přechodném stavu. Vylučte je z rsync (
--exclude). - Místo na disku: nové verze souborů zabírají místo; pravidelně čistěte staré snímky.
- Není pro produkci s vysokou zátěží: vhodné pro servery/desktopy s nízkou aktivitou během snímku.
| Scénář | Čas vytvoření (přibližně) | Nároky na disk |
|----------|---------------------------|---------------|
| Denní system | 2-5 min | 100-500 MB |
| Docker po aktualizacích | 1-3 min | 50-200 MB |
Automatizace
Integrujte do cron pro denní snímky:
- 00:30: system.
- 23:30: docker.
Skript by měl logovat výstup rsync, kontrolovat exit kódy a upozorňovat na chyby.
Co je důležité:
- rsync s
--link-destemuluje snímky na ext4 bez změny FS. - Hardlink zajišťuje deduplikaci: nezměněné soubory se neduplikují.
- Atomičnost přes tmp-adresáře zabraňuje částečným snímkům.
- Oddělení system/docker zvyšuje přesnost vrácení změn.
- Dry-run je povinný před obnovou pro bezpečnost.
Přístup je transparentní, používá pouze standardní nástroje Linuxu a škáluje se na jakékoli ext4-systémy.
— Editorial Team
Zatím žádné komentáře.