A backup is not a backup until you restore it. A homelab tabletop exercise.


The backup jobs are all green. They have been green for two years. Neither fact means a restore works — green means the archive was written, not that it opens. So: one Saturday morning, a scratch VM on the Proxmox box (the same one that got the OpenTofu treatment), a stopwatch, and one rule — nothing gets fixed mid-drill, everything gets noted.

The rules of the drill

The findings

The runbook writes itself

Every command typed during the drill went into RESTORE.md as I ran it, with the timings. A runbook written from memory after the drill is fiction; the runbook is the log of the drill, and the drill is the only time it gets written honestly.

Cadence that stuck: quarterly for the feared restores, monthly for one random pick — restore roulette, one job, to scratch, timed. The nightly restic check stays, but it validates the archive, not the restore path. Both matter. Only one has ever failed in a way that mattered.

The honest trade-offs

Where I landed

Green checkmarks describe the writer. The drill describes the reader, and only the reader matters at 3am. Two of the five findings were real data-loss risks sitting under two years of green, and the fix for both was an afternoon. The third Saturday is already on the calendar.