Backup, který nikdy neotestuješ, je jenom přání. Tohle je můj 3-2-1 setup po 2 letech ladění, který přežil 4 incidenty (3× moje pitomost, 1× hardware).
3 vrstvy
Vrstva 1 — ZFS snapshots (každých 6 hodin)
ZFS umí native snapshoty — kopírujou se okamžitě (copy-on-write), zaberou prostor jen na rozdíl. Mám rotaci 7 dní × 4 snapshoty = 28 snapshotů per pool.
Skript najdeš v snippet/proxmox-snapshot-rotation.
Restore: zfs rollback rpool/data@auto-20260513-0000. 5 sekund.
Vrstva 2 — PBS (Proxmox Backup Server)
PBS běží jako separátní LXC kontejner (CT 200) s vlastním ZFS poolem. Proxmox 1 i 2 sem postujou denní backupy přes incremental dedup. Compression ZSTD.
rolling retention:
keep-daily 7
keep-weekly 4
keep-monthly 6Backup window: 2:00–4:00 v noci. PBS dedup typicky 20-30× menší než raw data.
Restore: Proxmox UI → CT/VM → Backup → Restore. Klikni a hotovo.
Vrstva 3 — Hetzner Storage Box (denně, off-site)
Pro paranoid scenario kdy se mi vyhoří dům (1× ročně si představuju jak se mi
vyhoří dům). Restic backup z PBS poolu do Hetzner Storage Box (u540029.your-storagebox.de).
restic -r sftp:[email protected]:23/backups \
backup /backup/pbs --compression maxForget policy: keep-daily 14, keep-monthly 12. ~200 GB zaplaceno za 4 EUR/měs.
3-2-1 pravidlo
- 3 kopie dat — original na produkci, ZFS snapshot, PBS, Hetzner
- 2 různé media — local SSD vs. remote SFTP
- 1 off-site — Hetzner
Co dělat když...
Smazals soubor v kontejneru: ZFS snapshot, rollback nebo file-level extract
ls /rpool/data/subvol-103-disk-0/.zfs/snapshot/auto-20260513-1200/Smazals kontejner: PBS restore přes web UI nebo CLI
proxmox-backup-client restore vm/103/2026-05-13T12:00:00Z root.pxar /tmp/restoreVyhořel dům: Hetzner restore, dáš si pivo
restic -r sftp:... restore latest --target /tmp/restoreTesty
Každý poslední den měsíce automaticky restoruju random kontejner do test poolu a smažu. Restore čas: ~3 minuty pro 16 GB kontejner. Pokud restore failne, ntfy push.
Co bych zlepšil
- Encrypted backup Hetzner už mám, ale PBS leží unencrypted na local ZFS.
- Off-site monitoring — kdyby Hetzner SFTP cron failoval, dozvím se z healthchecku až po 24 hodinách. Mám otevřený issue přidat ntfy alert.
Pohoda. Tak jedeme dál.