Zpět na domů

Rsync hardlink pro rollback na ext4 Linux

Článek popisuje realizaci snapshotů a rollback na ext4 s pomocí rsync a hardlink. Rozdělení system/docker, atomárnost, příkazy restore. Omezení a automatizace pro middle/senior devops.

Rollback Linux ext4: rsync a hardlink v akci
Advertisement 728x90

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.

Google AdInline article slot

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:

Google AdInline article slot
.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í.

Google AdInline article slot

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-dest emuluje 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

Advertisement 728x90

Číst dál