Backup, Recovery, and the Ark You Build Before the Flood
How do we prepare for the day of trouble?
Chapter 11 — Backup, Recovery, and the Ark You Build Before the Flood
“A backup is not a backup until you have tested the restore.” — sysadmin adage (the law of Schrödinger’s backup: until you open the box, every backup is both alive and dead)
“The prudent sees danger and hides himself, but the simple go on and suffer for it.” — Proverbs 22:3 (ESV)
Why This Matters
Everything you have built in this course can be destroyed in an afternoon.
Not theoretically. Routinely. A rm -rf typed against the wrong path. A ransomware crew that has been inside your network for three weeks and detonates on a Friday at 5 p.m. A datacenter fire. A fat-fingered terraform destroy against prod instead of staging. A cloud account suspended over a billing dispute. A disgruntled admin on their way out the door. The disasters are not exotic, and they are not rare. They are scheduled — you just don’t know the date. The entire discipline of backup and recovery exists because of one unsentimental fact: storage fails, humans err, and adversaries are real, so the question is never if you lose data but whether you prepared before you did.
That is this week’s apologetic question, and Scripture states it plainly: how do we prepare for the day of trouble? “The prudent sees danger and hides himself” (Proverbs 22:3). Joseph, reading Pharaoh’s dream in Genesis 41, did not stop the famine — he stored grain through seven years of plenty so the nation survived seven years of want. Noah built the ark before the rain. Prudence is not pessimism; it is the steward’s refusal to be surprised. You will build arks this week.
Here is what is new, and why a graduate administrator can no longer treat backup as the boring chapter. The estate you are protecting is no longer just databases and home directories. It is an AI estate, and AI assets break your old mental model in a way that matters for recovery. Some of them are reproducible — an HNSW vector index can be rebuilt from its source embeddings; a base-model checkpoint can be re-pulled from a registry. Backing those up is wasted money and wasted RTO. Others are irreplaceable — a fine-tuned set of weights that cost a five-figure training run, a curated dataset that took a human team three months to label, a prompt library that encodes hard-won behavior. Lose those and no amount of compute brings them back. A DR plan that treats all bytes alike either overpays to protect the rebuildable or, far worse, fails to protect the irreplaceable. Classification is the whole game.
And the dual-AI thread runs straight through this week. AI as the tool you wield: the agentic SRE platforms from Chapter 9 will now happily draft your DR runbook, do your business-impact analysis, and propose your RPO/RTO targets — fast, fluent, and occasionally confidently wrong about which command actually restores your database. AI as the workload you govern: the model weights, vector stores, prompts, and datasets are themselves first-class assets you must back up, version, and lock against ransomware. You are protecting AI with one hand and protecting against AI’s failure modes with the other. The spine rule holds: the human stays in the loop where the judgment lives. An agent can generate a runbook in twelve seconds. Only you can certify that running it at 3 a.m. during a real outage will actually bring the ministry back online — and that certification comes from one place, the restore test you ran before the flood.
There is a reason this chapter sits in Phase 2, where AI is part of the work. The discipline of backup predates AI by decades — but AI has raised the stakes on both ends. The adversary now writes better phishing and automates reconnaissance, so the ransomware that takes your estate arrives faster and lands more often (you saw this in Chapter 10). And the estate it threatens now contains assets — a fine-tuned model, a hand-curated dataset — whose loss is measured not in re-typed records but in months of irreplaceable human work and real money spent on compute. The cost of being unprepared went up; the prudence required went up with it. This is not the boring chapter. It is the chapter where everything you’ve built either survives or doesn’t.
Build the ark now. The rain has a date.
11.1 — The Backup Trinity: Full, Incremental, Differential
Every backup strategy is built from three primitives. Know them cold, because every vendor product is just a packaging of these.
| Type | What it copies | Restore needs | Backup cost | Restore cost |
|---|---|---|---|---|
| Full | Everything, every time | Just the one full | High (time + space) | Low (one set) |
| Incremental | Only what changed since the last backup of any kind | The last full + every incremental since | Low | High (chain of many) |
| Differential | Everything changed since the last full | The last full + one differential | Medium (grows daily) | Medium (two sets) |
The tradeoff is a seesaw between backup cost and restore cost, and restore is the one that happens during a crisis. An incremental chain is cheap to write nightly and miserable to restore: lose or corrupt one link and the chain past it is worthless. A common production pattern is the Grandfather-Father-Son rotation — a weekly full (grandfather), daily differentials (father), with the most recent set retained longest — which bounds your restore chain while keeping nightly cost low.
Picture a week of a 100 GB vector store that grows ~2 GB a day. All-full: seven 100 GB backups — 700 GB written, but any single day restores in one read. Incremental: one 100 GB full plus six ~2 GB increments — ~112 GB written, but a Saturday restore replays the full and all six links in order, and a single corrupt link breaks everything after it. Differential: one 100 GB full plus daily diffs that grow to ~12 GB by Saturday — ~145 GB written, and any restore needs exactly two sets (the full + that day’s diff). The differential is the sane middle for most estates: it spends a little more disk than incrementals to buy a dramatically simpler, more robust restore. When in doubt, bias toward the strategy whose restore you trust at 3 a.m.
Coach’s Note — When you size a backup window, optimize for the restore, not the backup. Nobody is standing over you while the nightly job runs. Someone — possibly your director, possibly an auditor, possibly a family whose donation records you lost — is standing over you during the restore. Design for the bad day.
For AI assets specifically, the trinity maps unevenly, and the mapping is itself a design decision worth stating out loud:
- Fine-tuned weights are nearly static between retrains and large (tens of GB). A full on each new model version — and nothing in between — is correct. There is no value in nightly incrementals of bytes that didn’t change; back up on the event (a new fine-tune ships), not on the clock.
- A vector store under constant ingestion behaves like a transactional database: a periodic full plus continuous change capture (WAL streaming) is the database-native equivalent of full + incrementals, and it’s what gets your RPO down to minutes without re-dumping the whole store every hour.
- A prompt library is tiny and changes constantly — so it lives in git, where every commit is a perfect differential for free and the entire history travels in one
git bundle. - Curated datasets change rarely and matter enormously; a full with a checksum manifest, re-taken only when the set changes, is right.
Notice the pattern: back up on the rhythm the asset actually changes, not on one global schedule. A single nightly job pointed at everything is the lazy answer that overpays for the static assets and under-protects the fast-moving ones.
11.2 — 3-2-1, Immutability, and the Air Gap
The oldest rule in the discipline still holds, and ransomware made it load-bearing again.
The 3-2-1 rule: keep 3 copies of the data, on 2 different media/storage types, with 1 copy offsite. Three copies survives a double failure. Two media survives a media-class flaw (the bug that eats every disk of one model on the same firmware). One offsite survives the building burning down.
In 2026, ransomware forced a fourth idea into the rule, sometimes written 3-2-1-1-0: one copy immutable or air-gapped, and 0 errors verified by restore testing. Here is why immutability is no longer optional. Modern ransomware does not just encrypt your live data — it hunts for and encrypts or deletes your backups first, because attackers know a clean restore is the thing that lets you tell them no. A backup an attacker (or a compromised admin credential) can overwrite is not a backup; it is a second hostage.
The countermeasure is WORM — Write Once, Read Many — implemented in cloud as object lock. On S3 you set a retention period in Compliance mode, after which not even the root account can delete or overwrite the object until the lock expires. That is the engineering point: immutability has to be enforced by something the attacker cannot socially-engineer or escalate past. An air gap — backups on media physically or logically disconnected from the network — achieves the same end by removing the wire.
# Create a versioned, object-locked bucket: ransomware cannot encrypt what it cannot overwrite.
aws s3api create-bucket --bucket ministry-ai-backups --object-lock-enabled-for-bucket
aws s3api put-object-lock-configuration --bucket ministry-ai-backups \
--object-lock-configuration '{"ObjectLockEnabled":"Enabled",
"Rule":{"DefaultRetention":{"Mode":"COMPLIANCE","Days":30}}}'
Coach’s Note — “Compliance mode” means you also cannot delete it for 30 days — including when you fat-finger an upload of secrets you didn’t mean to push. Immutability is a guarantee that cuts both ways. That is the price of a backup an adversary cannot destroy, and it is worth paying for your irreplaceable assets. Do not blanket-lock everything; lock what you cannot afford to lose.
The air gap deserves its own word because it is the one defense with no software attack surface. A backup written to media that is then physically disconnected — tape rotated to a vault, a drive unplugged and locked away — or logically isolated in an account with no standing credentials, cannot be reached by an attacker who owns your network, because there is no wire to reach it on. Immutability and air-gapping are complementary: immutability says “you may reach it but cannot change it,” the air gap says “you cannot reach it at all.” For the most precious assets — the fine-tune you’d weep to lose — many shops do both: an object-locked copy and a periodic offline copy. Belt and suspenders is not paranoia when the thing you’re protecting cannot be rebuilt.
For our AI estate, the rule lands on the irreplaceable tier: fine-tuned weights, curated datasets, and the prompt library go to an object-locked bucket. The reproducible tier — base checkpoints, derived indexes — does not. See code/backup_ai_estate.sh for the full asset-by-asset script and code/dr-asset-register.yaml for the classification that drives it.
11.3 — RPO and RTO: The Two Numbers That Govern Everything
A DR plan reduces, in the end, to two numbers per service. Learn to think in them.
- RPO — Recovery Point Objective: the maximum data loss you can tolerate, measured in time. An RPO of 1 hour means: after a disaster, you accept losing up to the last hour of work. RPO is set by your backup frequency — if you snapshot hourly, your floor RPO is one hour. To shrink it, back up more often (or stream changes continuously).
- RTO — Recovery Time Objective: the maximum downtime you can tolerate before service is restored. RTO is set by your recovery mechanism and architecture — how fast you can actually stand the thing back up.
These are business decisions wearing engineering clothes. An RPO of zero (lose nothing) and an RTO of zero (no downtime) is physically achievable only with continuous synchronous replication and hot standby — and it is expensive. The art is matching the number to the asset’s true cost-of-loss, which is the same stewardship of resources the whole book teaches (and which Chapter 12 will price out in dollars).
| Tier | RPO | RTO | Mechanism | Cost |
|---|---|---|---|---|
| Hot | seconds | seconds–minutes | Synchronous replication, live standby | Highest |
| Warm | minutes | minutes–hours | Async replication, pre-provisioned but idle | Medium |
| Cold | hours–days | hours–days | Restore from backups onto new infra | Lowest |
The AI twist: RTO for an AI service hides a cost the napkin math misses. Restoring the bytes of a model is not the same as restoring the service. You must also pull the weights into VRAM and warm the serving engine — and for a reproducible asset like an HNSW index, the rebuild time is the RTO. A 50M-vector index can take hours to rebuild. If you declared a 30-minute RTO and then planned to rebuild the index on recovery, your plan is fiction. code/rpo_rto.py computes estate-wide RPO/RTO from the asset register so you find that contradiction on paper, not at 3 a.m.
Work one example end to end so the numbers stop being abstract. Suppose recovery of the RAG assistant is serial — you can’t serve until every dependency is back — and the steps clock in like this: pull 16 GB of fine-tuned weights from object storage (≈ 8 min on a 300 Mbps link), load them into VRAM and warm the vLLM engine (≈ 4 min), restore the pgvector source dump (≈ 6 min), rebuild the HNSW index from source (≈ 40 min, measured), re-point DNS and pass a smoke test (≈ 5 min). That is 63 minutes of RTO, and the single biggest term — the index rebuild — is the one a junior would have forgotten because it’s “just an index.” This is why the estate RTO is a sum along the critical path, not the time of any one step, and why the weakest link governs the whole plan.
$ python code/rpo_rto.py code/dr-asset-register.yaml
Estate RPO (max data loss): 1440 min
Estate RTO (serial recovery): 460 min
Irreplaceable (back these up): fine-tuned-weights, vector-db-source, prompt-library
Reproducible (rebuild, don't pay to store): vector-db-hnsw-index, base-model-weights
11.4 — Snapshots, Replication, and Why They Are Not Backups
Two mechanisms get confused with backup constantly, and the confusion gets people fired.
A snapshot is a point-in-time, copy-on-write image of a volume or database. It is fast — near-instant, because it records only the blocks that change after the snapshot point. Snapshots are excellent for quick rollback (“the upgrade broke prod, revert to the 2 p.m. snapshot”) and as the source of a backup. But a snapshot living on the same storage system as the live data is not a backup: if that array fails, is encrypted by ransomware, or its account is deleted, the snapshot dies with the original. A snapshot becomes a backup only when it is copied off the system — to different media, offsite, ideally immutable. That is the 3-2-1 rule again, doing its job.
Replication continuously copies writes to a second system. It is how you get a low RPO and a fast RTO (warm/hot standby). But replication faithfully copies your mistakes: DELETE FROM donors; replicates to the standby in milliseconds, and rm -rf replicates just as fast. Ransomware encryption replicates beautifully. Replication protects against hardware failure, not against logical corruption or malice — for those you need a historical copy you can roll back to, which is a backup. The mature pattern is both: replication for availability, immutable backups for recoverability.
Coach’s Note — Say this until it’s reflex: RAID is not a backup. A snapshot is not a backup. Replication is not a backup. A sync is not a backup. Each protects against exactly one failure mode and faithfully propagates every other. A backup is an independent, historical, ideally immutable copy you can restore from after the live system and its mirror are both compromised. The day you conflate them is the day you discover — during the incident — that you have one hostage stored twice.
11.5 — Protecting the AI Estate: Reproducible vs. Irreplaceable
This is the section that makes this an AI DR chapter and not a 2005 backup chapter. Walk the four AI asset classes and decide, for each, what you are actually protecting.
1. Model weights. Split them in two. Base/open-weight checkpoints (Llama 4 Scout, Mistral Large 3, gpt-oss-120b — open weights you can re-pull) are reproducible: pin them by digest and cache them locally to shrink RTO, but do not pay to back them up. Fine-tuned weights are irreplaceable: they are the output of a training run you cannot cheaply repeat, encoding your data and your money. Back those up, immutably, on every new version. As of 2026 the emerging pattern is to store weights as OCI artifacts in a registry (Harbor, or a CNAI model registry) so they reuse the signing, scanning, and GitOps tooling you already run for containers — though note the Kubernetes OCI image volume source (KEP-4639) was still behind a feature gate that is off by default in v1.33, so verify runtime support before you build a plan on it.
2. Vector databases. Here is the subtlety the brief flags: back up the source (the raw embeddings and their documents) — that is irreplaceable — but recognize the HNSW index is derived state you can rebuild from the source. The recovery decision becomes restore-vs-rebuild:
| Restore the index | Rebuild from source | |
|---|---|---|
| Speed | Faster (copy bytes) | Slower (graph construction) |
| Robustness | Couples you to on-disk format/version | Always works from source of truth |
| When to use | Tight RTO, same DB version | Format changed, or index corrupt |
Back up both if you want the fast path, but never let the only copy of your knowledge live in an index you can’t regenerate — because the day the index format changes across a version upgrade, the restore-the-bytes path silently stops working and only the rebuild-from-source path survives. (And mind index integrity itself: pgvector’s 0.8.3 fixed an HNSW vacuuming corruption bug — a live reminder that a corrupt index is a real, non-hardware failure mode, and one more reason the source is the asset you actually protect.)
3. Prompt libraries. Small, dense with value, and changed constantly. They belong in git — every commit is a versioned backup — pushed to an offsite remote, with a periodic git bundle to immutable storage so a compromised forge can’t take the history with it.
4. Datasets. Curated, labeled training and evaluation sets are pure human labor and therefore irreplaceable. Back them up with checksums (a manifest of SHA-256 hashes) so a silent corruption — the bit-rot that makes a restore succeed but the data be subtly wrong — is caught on the way out and again on the way back in.
| AI asset | Reproducible? | Protect by | Lock? |
|---|---|---|---|
| Base/open weights | Yes (re-pull) | Cache + pin by digest | n/a |
| Fine-tuned weights | No | 3-2-1, OCI artifact, signed | Yes |
| Vector DB — source | No | Snapshot + WAL stream | Yes |
| Vector DB — HNSW index | Yes (rebuild) | Rebuild on recovery | No |
| Prompt library | No (but tiny) | git + offsite bundle | Yes |
| Curated datasets | No | 3-2-1 + checksum manifest | Yes |
| Inference KV cache | Yes (transient) | Don’t back up | No |
Coach’s Note — The most expensive mistake here is symmetric to the classic one. The classic mistake is failing to back up something irreplaceable. The new, AI-specific mistake is paying to back up the reproducible — multi-terabyte base checkpoints and rebuildable indexes — bloating your storage bill and lengthening your restore window with bytes you could have regenerated for free. Classify first. Then protect what classification told you to.
11.6 — Three Ways to Get Weights Back Into a Pod
Backing up the bytes is half the job. The other half — the half that sets your RTO — is getting those bytes back into a running service. For a containerized AI estate in 2026 there are three patterns to load model weights into a pod, and they trade off cold-start time, immutability, and provenance in ways that matter at recovery time.
| Method | How | Cold start | Immutability / provenance | Image bloat |
|---|---|---|---|---|
| Bake into the image | Copy weights into the container image at build time | Fast (already local) | Strong — image is signed + digest-pinned | Huge images (tens of GB) |
| OCI image volume | Mount weights as a separate OCI artifact | Medium | Strong — separately signed/scanned, GitOps-friendly | None (image stays small) |
| Object-storage mount | Mount the bucket via the S3 CSI driver | Slow first read (pull on demand) | Depends on bucket policy | None |
The OCI artifact pattern is the one the field is converging on as of 2026: store weights in a registry (Harbor 2.x, or a CNAI model registry) so they inherit the signing, scanning, P2P distribution (Dragonfly), and GitOps you already run for containers. The relevant hedge for a DR plan: the Kubernetes OCI image volume source (KEP-4639) reached Beta in v1.33 but its feature gate is off by default and not every runtime supports it — so verify your cluster actually honors it before you make it load-bearing in a recovery runbook. The recovery lesson underneath the table: a backup you can’t quickly re-mount has a long RTO. Caching base checkpoints locally and pinning them by digest (never latest) is how you shrink the warm-up that bake-vs-mount decisions govern.
Coach’s Note — Pin everything by digest, never by tag.
:latestis the enemy of reproducible recovery — the tag that pointed at the right weights in March silently points at different weights in June. A DR plan that restoresmyorg/model:latestrestores whatever that tag means today, which is not what you backed up. Digests are immutable by construction; that is exactly the property you want when you’re trying to restore the model, not a model.
11.7 — AI as the Tool: AI-Drafted DR Runbooks and Impact Analysis
Now the tool side of the thread. The agentic SRE platforms you met in Chapter 9 — Datadog Bits AI SRE (GA as of late 2025), Microsoft Azure SRE Agent (GA March 2026), PagerDuty’s SRE agent — and a general assistant like Claude (Opus 4.8 for the hard reasoning, Haiku 4.5 when it’s a cheap lookup) are genuinely good at the paperwork of DR. Ask one to draft a runbook and you’ll get a clean, ordered, plausible document in seconds:
PROMPT to the assistant:
Draft a restore runbook for our RAG assistant. Stack: pgvector on Postgres 16,
fine-tuned weights served by vLLM, prompts in git, backups in S3 (object-locked).
Output ordered steps with the exact commands, and flag any step that needs human sign-off.
It will give you a structured runbook, a business-impact-analysis (BIA) table, and even first-draft RPO/RTO targets. A BIA is exactly the kind of tedious-but-valuable artifact AI is good at scaffolding — it enumerates each service, what depends on it, and the cost of its downtime, like this first draft you’d then correct:
| Service | Depends on | Impact if down | Draft RTO | Draft RPO |
|---|---|---|---|---|
| RAG assistant | weights, vector DB, prompts | Congregants get no answers; trust erodes | 1 h | 1 h |
| Donation processing | database, payment gateway | Lost gifts during a campaign | 15 min | 0 |
| Eval pipeline | datasets, model registry | Can’t validate a new model; ship blocked | 8 h | 24 h |
Used well, this collapses the hours of boilerplate that used to keep DR plans from getting written at all. That is real leverage. Take it — and then fix the numbers, because the agent guessed them.
And then verify every line, because this is exactly where the confident-wrong partner is most dangerous. The failure modes are specific and repeatable:
- Hallucinated restore commands. The model will produce a
pg_restoreinvocation or anaws s3 syncflag that is plausible and wrong — the wrong direction on a sync (overwriting your good backup with empty prod), a--deleteyou didn’t want, a restore that targets the live database instead of a scratch one. A wrong restore command does not fail safely; it can destroy the thing you were recovering. - Optimistic RTO. Ask the model for an RTO and it will give you the time to download the bytes, not the time to warm the serving engine, rebuild the index, re-establish DNS, and pass a smoke test. Its number will be too low, and you will set an SLA you cannot meet.
- It doesn’t know your topology. It will assume a network path, a credential, an order of operations that isn’t yours. The runbook reads correctly and fails at step 6.
Here is the single most dangerous line a runbook generator can hand you, and it reads completely innocent:
# AI-suggested "restore" step — READ THE DIRECTION.
aws s3 sync ./local-prod s3://ministry-ai-backups/vectors # WRONG: overwrites the GOOD backup
aws s3 sync s3://ministry-ai-backups/vectors ./restore-scratch # RIGHT: backup -> scratch, read-only on prod
The two commands differ only in argument order, and the wrong one — pushing empty or half-recovered production data up onto your pristine backup — destroys the very thing you were trying to recover from. An AI will produce the first form as readily as the second; it has no concept of which side is precious. You do. That asymmetry — the model can’t tell the irreplaceable from the disposable, and you can — is the whole reason the human stays in the loop.
The discipline ties straight back to Chapter 1: AI drafts, the human owns the verdict, and the test proves it. A DR runbook is not “done” when the agent writes it. It is done when you have executed it against a scratch target in a game day and watched the service come back. The runbook the agent wrote and you never ran is worth exactly the paper it isn’t printed on.
11.8 — DR Tiers, Failover, and the Game Day
A continuity plan is graded on whether it works under pressure, which means it must be exercised. The standard architecture tiers from §11.3 — hot, warm, cold — are choices about how much you pre-pay to shrink RTO. Most organizations run a mix: hot for the donation-processing service that cannot go down during a campaign, cold for the analytics warehouse that can wait a day.
Failover is the act of cutting over to the standby. Two flavors: automatic (health checks trip and traffic reroutes with no human) gives the lowest RTO but can flap or fail over into a corrupted secondary; manual (a human declares the disaster and runs the cutover) is slower but keeps judgment in the loop. For AI services, automatic failover has a sharp edge — if your primary went down because a poisoned input crashed the model, automatic failover sends the same poison to the standby. Sometimes the right move is to stay down and investigate, which is a decision an automated health check cannot make.
The DR test — the “game day” — is the entire point. Tiers of rigor:
- Tabletop: walk the runbook on paper. Cheap, catches the obvious gaps, proves nothing about the machinery.
- Restore test: restore one asset into a scratch target and verify it (see
code/restore_test.sh). This is the minimum that earns the word “backup.” - Full game day: declare a simulated disaster, fail over to DR, run real traffic, measure actual RPO/RTO, then fail back. Schedule it. Quarterly is a defensible cadence.
A concrete game day for our RAG estate runs like this. Pick a Tuesday. Declare: “the primary region is gone — ransomware, assume the live host and any writable backup are encrypted.” Recover from the immutable tier only: pull the object-locked weights, restore the pgvector dump into fresh infrastructure, rebuild the HNSW index, restore prompts from the offsite git bundle, and warm the engine. Measure: start a stopwatch at “declare” and stop it when a real query returns a grounded, correct answer — that wall-clock number is your true RTO, and it is almost always larger than the one in the plan. Verify RPO: check the timestamp of the last backed-up change against the moment of “disaster” — the gap is your real data loss. Fail back and write up what broke. The first game day always finds something: an expired credential, an undocumented firewall rule, a backup that’s been silently failing for six weeks, a runbook step that assumed a path that no longer exists.
Coach’s Note — Untested DR plans don’t degrade gracefully — they fail completely, at the worst possible moment, in front of the people who trusted you. The game day is where you find the expired credential, the firewall rule nobody documented, the backup that’s been silently failing for six weeks, the RTO that’s triple your SLA. You want to find those on a Tuesday you scheduled, not a Friday the adversary scheduled. The game day is the restore test of the whole plan.
11.x — Interactive Lab: DR Planner (RPO/RTO)
Below this chapter on the website is an interactive panel: the DR Planner (RPO/RTO). Use it now — this is where the chapter becomes a skill.
The widget gives you the five AI asset classes from §11.5 — fine-tuned weights, the vector DB (source and index), the prompt library, the datasets, and the configs. For each one you choose a backup strategy: 3-2-1 with immutable lock, periodic snapshots, continuous replication, git-and-bundle, or “rebuild on recovery / don’t back up.” As you choose, the panel computes the resulting RPO and RTO for the whole estate and then drops a disaster on you — a ransomware detonation, a region outage, an accidental terraform destroy — and shows you exactly what you lost and how long you were down given the choices you made.
Drive it deliberately. First, try the naïve plan: back up everything the same way, nightly, to the same bucket. Watch the storage cost balloon and watch the ransomware scenario encrypt your backups because you didn’t lock them. Then fix it: mark the base weights and the HNSW index “rebuild — don’t back up,” lock the irreplaceable tier immutable, and move the prompt library to git. Watch your RTO fall (you’re no longer restoring rebuildable bytes) and your ransomware loss go to zero (the locked copy survives). Finally, set an aggressive 15-minute RTO and try to hit it — the planner will show you where the index-rebuild time makes that impossible, and you’ll feel why §11.3 said the rebuild time is the RTO.
What it teaches, in your hands and not just on the page: that classification drives everything, that immutability is what makes a backup survive an adversary, and that an RPO/RTO target is a promise you can only keep if the math closes before the disaster. The mistakes are free in the widget. They are not free in production.
11.9 — Compliance-Grade Retention: When the Auditor Is the Disaster
Not every “day of trouble” is a fire. Sometimes it is a regulator, a lawsuit, or an internal audit asking what did your AI system do on March 14, and can you prove it. For a graduate administrator running AI as a governed workload, retention is a recovery problem with a legal deadline.
The control stack is the same primitives pointed at a different requirement: WORM/object-lock retention + signed artifacts + immutable audit logs. Together these satisfy the EU AI Act’s Article 12 requirement for automatic logging over a system’s lifetime, plus any internal audit trail. The durations are real and worth pinning: GPAI providers must retain technical documentation (the Model Documentation Form) for at least 10 years. (The high-risk obligation dates are the volatile part — as of mid-2026 the Digital Omnibus has provisionally deferred Annex III high-risk obligations to December 2, 2027, pending formal adoption, so confirm the live date before you cite it. The retention durations themselves are stable.)
The governance best practice ties recovery to documentation: require a model card for every model promoted beyond development — owner, approver, training-data references, eval and safety results — and store every artifact (weights, datasets, cards) in signed, access-controlled registries under lifecycle/WORM policy. The payoff at recovery time is enormous: when you restore a fine-tuned model after a disaster, the model card tells you what it was, who signed off, and what it was trained on — so you can certify the restored thing is the thing you lost, not a stale or tampered copy. Recovery without provenance is just hoping you restored the right bytes.
A complementary instrument is the AIBOM — an AI Bill of Materials (CycloneDX ML-BOM, SPDX 3.0) that inventories every weight, dataset, and config in the estate. Think of it as the ingredients label: when a disaster forces you to rebuild, the AIBOM is the manifest that tells you exactly what the estate was made of so you can reassemble it completely rather than discovering, three weeks later, that you forgot to restore the guardrail config or the eval set. An estate you cannot inventory is an estate you cannot fully recover; the AIBOM is what makes “restore everything” a checkable claim instead of a hope. Pair it with signed artifacts and you can also prove that what you restored is what you backed up — integrity, not just completeness.
11.10 — The Steward and the Storehouse
Let’s give this week’s question the weight it deserves, because the engineering sharpens when you do.
How do we prepare for the day of trouble? The unbelieving and the believing administrator both answer “back it up,” and they are both right. But the Christian administrator has a particular reason not to be the simple one of Proverbs 22:3 — the one who “goes on and suffers for it.” Prudence here is not anxiety, and it is not a denial that trouble comes. It is the opposite of both: a sober acknowledgment that we live in a world where things break, decay, and are stolen — “where moth and rust destroy, and where thieves break in and steal” (Matthew 6:19) — and a refusal to pretend otherwise. The steward who backs up faithfully is simply telling the truth about the world.
Joseph is the pattern, and the pattern is precise. He did not stop the famine; he was not given that power. He stored grain through the years of plenty so that the years of want did not become the years of death. That is RPO and RTO in narrative form: he accepted that the lean years would come (he could not prevent the disaster), and he prepared so that recovery was possible (he bounded the loss). He did the work before the trouble, when it was inconvenient and there was no visible emergency to justify it. That is the hardest part of DR and the most faithful: doing the unglamorous, un-thanked work of preparation while the sun is shining and everyone thinks you’re being paranoid. The reward for a perfect backup system is that nothing happens — and the discipline to keep building one anyway, with no applause, is a form of faithfulness.
There is a stewardship edge that cuts against the AI grain, too. The temptation of an AI estate is to believe everything is reproducible — that compute is cheap and infinite, that anything lost can be regenerated. It cannot. The fine-tuned weights, the curated dataset, the prompt library are irreplaceable human labor, given into your keeping, belonging to real people whose work and trust they represent. “It is required of stewards that they be found faithful” (1 Corinthians 4:2) means knowing the difference between what God lets you rebuild and what He does not — and guarding the latter with your whole attention.
This is also where the two-kingdoms register sharpens the engineering rather than decorating it. The administrator’s authority is real but delegated and limited — you keep watch over what belongs to others, under an accountability that is not finally to the org chart. That limit is precisely the human-in-the-loop thesis in theological dress: an agent can act, but it cannot be responsible; it cannot stand before the board, or the congregation, or God, and give an account of the estate it was given. You can. So you do not hand the irrevocable decisions — what to protect, what to let go, what to certify as recovered — to a servant who cannot answer for them. You keep those, because they were given to you. The flood is coming. Build the ark. And do it now, while it is still only a sermon and not yet a headline.
11.11 — Common Pitfalls
Pitfall: Treating a snapshot, RAID, or replica as a backup. Example: The team relies on hourly EBS snapshots in the same account; an attacker with a stolen admin key deletes the snapshots and the volumes in one API call. Fix: A backup is independent, historical, and offsite. Copy snapshots to a separate, object-locked account/bucket. RAID and replication protect against hardware failure only.
Pitfall: Never testing the restore.
Example: Nightly backups have “succeeded” for eight months; during a real outage the restore fails because the backup contained only the empty schema, not the data.
Fix: Schedule restore tests. Restore into a scratch target, verify row counts and checksums, and measure the actual RTO. See code/restore_test.sh. Until you do, the backup is Schrödinger’s.
Pitfall: Backing up the reproducible and skimping on the irreplaceable. Example: A team pays to back up multi-terabyte base checkpoints and a rebuildable HNSW index nightly, but the fine-tuned weights live only on the serving node — which dies. Fix: Classify every asset reproducible vs. irreplaceable first. Cache (don’t back up) what you can re-pull or rebuild. Spend the protection budget on what no amount of compute brings back.
Pitfall: Trusting an AI-drafted runbook without executing it.
Example: The agent’s runbook reads perfectly but its aws s3 sync runs in the wrong direction and overwrites the good backup with empty production data on the first real recovery.
Fix: AI drafts; the human verifies every command and runs the runbook in a game day before it’s “done.” Treat a restore command as destructive until you’ve proven otherwise on a scratch target.
Pitfall: Setting an RTO that ignores AI-specific recovery cost. Example: The SLA promises a 30-minute RTO, but recovery includes rebuilding a 50M-vector HNSW index that takes four hours. Fix: Recovery is bytes plus warm-up: load weights into VRAM, warm the serving engine, rebuild derived indexes. Measure each in a game day and set the RTO from the measured total, not the download time.
Pitfall: No immutability, so ransomware takes the backups too. Example: Backups sit in a normal bucket the service account can write; the ransomware crew encrypts the live data and the backups in the same sweep. Fix: Put the irreplaceable tier under object lock (Compliance mode) or a true air gap. A backup an attacker can overwrite is a second hostage, not a safety net.
11.12 — Reps
Your conditioning is in the exercises. This week’s reps are hands-on backup and recovery against real files and a real database — because the only backup that counts is one you’ve watched restore. A preview:
- Build a 3-2-1 backup of a small AI estate with the script in
code/backup_ai_estate.sh, then verify each copy lands where you intended. - Run a restore test into a scratch target and measure the RTO — predict it first, then check yourself.
- Classify an estate into reproducible vs. irreplaceable and defend each call in one sentence.
- Set object lock on a bucket and then try to delete the object — feel immutability refuse you.
- Have an AI draft a restore runbook, then find the one wrong command before you’d ever run it.
AI policy for the reps (Phase 2): AI is on, and you will use it to draft runbooks and impact analyses — but every command an agent produces is suspect until you’ve run it against a scratch target. You cannot certify a recovery you have never executed. A short “Check Your Reps” quiz sits at the bottom of this page; take it before the exercises.
11.13 — This Week’s Project
This week you build Project 11 — “DR for the AI Estate” (P11), specified in Project 11. You will take a small but realistic AI-enabled service — a ministry RAG assistant with fine-tuned weights, a pgvector store, a prompt library, and curated datasets — and design, build, and prove its disaster-recovery plan.
At a high level: the Normal tier has you classify every asset, implement a 3-2-1 backup with immutability on the irreplaceable tier, and pass a real restore test with measured RPO/RTO. The Medium tier (extra credit) adds a ransomware game day and an AI-drafted runbook you must critique and correct line by line. The Hard tier demands the thing an agent cannot do for you: a written DR architecture memo that makes the judgment calls — which assets get which tier, where you accept data loss and why, and a measured, defended estate-wide RPO/RTO recommendation you would stake your name on. As always in Phase 2, an agent-log.txt is required.
11.14 — Coach’s Final Word
Backup is the chapter students skim and seniors lose sleep over, and the reason is simple: it is the one discipline where the reward for doing it perfectly is that you never find out. Nothing happens. No applause, no incident, no story — just a quiet system that would have survived the flood that never came, or came and was beaten so cleanly nobody noticed. That invisibility is exactly why it gets neglected, and exactly why a faithful steward refuses to neglect it.
You learned the durable primitives this week — the full/incremental/differential trinity, 3-2-1 with immutability and the air gap, RPO and RTO, snapshots and replication and why none of them is a backup. And you learned the part that makes you a 2026 administrator and not a 2005 one: that the AI estate forces you to classify, to know cold which assets compute can rebuild and which represent irreplaceable human labor and money, and to spend your protection budget accordingly. You learned to let AI draft the runbook and to never trust it until you’ve run it — the dual thread one more time, the tool in one hand and the workload in the other, the human’s judgment in the middle where it belongs.
The prudent sees danger and hides himself. Joseph stored the grain. Noah built the ark before the first drop fell. You will not stop the disasters — that power was never yours. But you can be the steward who prepared, who tested the restore, who knew the difference between what can be rebuilt and what must be kept. Build the ark now. The rain has a date, and the date is not on your calendar.
See you next week.
Up next: Read the exercises and do every rep against real files — predict each restore time before you measure it. Then build Project 11 — “DR for the AI Estate.” Lean on Appendix A for the lab toolchain, Appendix B for the local + cloud AI you’ll back up, and Appendix C for the agentic-AI rules that govern your runbook drafting. Then on to Chapter 12 — Cloud Systems Administration and Counting the Cost, where the storage and recovery you priced in time gets priced in dollars.