737 words
4 minutes

08 from Backups Verified by Restore — Twelve Days of OK Over an Empty Archive

The restore proof: a backup counts once a clean machine brings it back

By Docker Captain · CNCF Ambassador · IBM Champion
An empty steel safe with its lid open, cold cyan light inside and one red lamp still lit

A backup that has only ever been listed has not been shown to restore. It is an archive with a hopeful name.

The proof has three parts with three owners: the archive opens, the shipped script brings the data back, and a machine with nothing on it brings the service back. The clean-machine drill is the third part, and the only one that produces a recovery time an auditor can be given.

  1. 1

    Read the archive back before it gets its name

    Nothing carries the name a restore would pick until it has been opened: an integrity test for a compressed dump, a full listing for an archive, and for a database a load into a throwaway container compared with the live schema table for table. A floor of “more than ten tables” passes a dump that restored a fifth of the schema.

  2. 2

    Run the shipped restore script, not a copy of its commands

    Write a marker, wait for a backup whose cycle started after it, destroy the live state, run the file an operator would run, and require the marker back through the application, not through the database.

  3. 3

    Prove the prune

    Plant an archive older than the retention window beside the real ones. After the next cycle it is gone and the recent ones stay. A prune that is only intended is not a prune.

  4. 4

    Restore on a machine that never ran the stack, weekly

    The previous release's backup into the current release, on a runner that has never seen it. That run finds what the dump does not carry: server accounts, generated secrets, files written at install time.

  5. 5

    Publish the number with its run, and refuse a report without it

    One row per drill: from and to release, pass or fail, seconds, the backup interval as the bound on loss, and the run link. A failed drill is a row with no time. A file carrying fewer than half the drills of the last published one is refused, not shown.

  6. 6

    Give the number an owner

    SRE, with the figure on the page they would be asked for.

Measured on a clean machine, week of 8 November 2026

MeasureResultWhere it is
Templates restored46 of 47The weekly drill, 8 November 2026
Fastest, SiYuan18 secondsRun 42475961949
Slowest, Jira6 minutes 10 secondsRun 42475927543
Median, all 4672 secondsThe evidence page
Failed, DifyNo time; shown as failedRun 42475992937
Bound on loss24 hours, the backup interval, for the 46 of 47 templates that publish oneEach template's own setting

What shows it works

Three decisions, the drill, and runs anyone can open.

A backup is the one a clean machine brought back.

The long versions are the posts Backups Verified by Restore and Restore Drills on a Clean Machine. ISMS.online on ISO 27001 8.13; AICPA, 2017 Trust Services Criteria (2022 points of focus), criterion A1.3.


Vladimir Mikhalev

Docker CaptainCNCF AmbassadorIBM Champion

The Verdict — production-tested analysis on YouTube.

The Verdict

Inconvenient truths about shipping in the AI era

Container security, platform engineering, and the agentic shift — tested in production, argued without the hype. The verdict reaches your inbox the moment there's one worth sending.

Related Posts

Same category
  1. 1
    Backups Verified by Restore — Twelve Days of OK Over an Empty Archive
    Self-Hosting · A backup verified by restore is the only kind that exists. Twelve days of OK over a volume nothing wrote to, and 47 templates' restore scripts CI never ran.
  2. 2
    Install ownCloud Using Docker Compose
    Self-Hosting · Learn how to install ownCloud with Docker Compose on Ubuntu using Traefik and Let's Encrypt. Secure, scalable file storage and sharing for your server.
  3. 3
    Install Docmost Using Docker Compose
    Self-Hosting · Learn how to install Docmost using Docker Compose with Traefik and Let's Encrypt. Step-by-step guide for self-hosting a modern documentation platform.
  4. 4
    Install AFFiNE with Docker Compose, Traefik and Let's Encrypt
    Self-Hosting · AFFiNE behind Traefik with automatic Let's Encrypt certificates: the Docker networks, the compose file from my repository, one command to start, first login.

More Blueprints

All 12
  1. 09
    The bounded cloud run
    Signal, 13 November 2026 · Run the real cloud test in an account of its own, tag and tear down every resource, sweep and cap what escapes, and report the cost from the bill, not the estimate.
  2. 10
    The read receipt
    Signal, 20 September 2026 · Prove the source before the prompt, open the response before trusting it, and let a verdict slow a change but never wave one through.
  3. 11
    The apply gate
    Signal, 11 June 2026 · Keep the Terraform MCP server's operations flag off, pin what it can reach, gate every agent-reachable workspace with policy, and keep the approval and its record with a person.
  4. 12
    The evidence join
    Signal, 11 August 2026 · Bind each agent to its governance use case, give every run a span with the same id, keep the spans for the longest obligation, and alert when a run has no evidence to match.
The restore proof: a backup counts once a clean machine brings it back
https://heyvaldemar.com/blueprints/restore-proof/
Author
Vladimir Mikhalev
Published
2026-11-14
License
CC BY-NC-SA 4.0