CephCIX · Disaster RecoveryDisaster Recovery
Writing a DR plan people can actually execute
What you'll learn
- Structure a DR plan by scenario
- Write steps that work under pressure
- Include the non-technical elements
- Keep the plan current
Prerequisites
None — start here.
Verified against Ceph Tentacle 20.2.x · Ceph Squid 19.2.x (supported previous) · cephadm matches the verified Ceph release · podman 4.x · csi-rbd and csi-cephfs current · RBD / CephFS / RGW current (matches Ceph release) · Linux kernel 5.15+ (5.10 minimum) · Ubuntu 24.04 LTS (Ceph host baseline) · Debian 12 (Bookworm) (Ceph host baseline) · Rocky Linux / RHEL / AlmaLinux 9.x (Ceph host baseline) · Proxmox VE 9.x (cross-course integration) · Kubernetes 1.31+ (cross-course integration) · 2026-08-18
Why this matters in production
Most DR plans are written to satisfy a requirement and are unusable by the person holding a pager at 03:00.
Structure by scenario
For each scenario in the model:
how to recognise it
what it means for data
what to do, as ordered steps
how to verify each step worked
what to tell whom
when to escalate and to whom
| Section | Content |
|---|---|
| Recognition | the exact commands and their expected output |
| Impact | degraded, unavailable, or lost |
| Steps | numbered, with the literal commands |
| Verification | how to know the step succeeded |
| Communication | who, what, and when |
| Escalation | the point at which this plan stops being enough |
A plan organised by scenario is navigable. A plan organised by
component is a reference document, and nobody reads a reference document
during an incident.
Steps that work under pressure
| Property | Why |
|---|---|
| Literal commands, not descriptions | no translation under stress |
| Expected output shown | the reader can confirm |
| One action per step | no ambiguity about what was done |
| Explicit stop conditions | “if X, stop and escalate” |
| No assumed context | the reader may not be the author |
| Tested | a step that has never run is a guess |
# a step written usefully
# Step 4: confirm monitor quorum
# Run: ceph quorum_status --format json | python3 -c # 'import sys,json; d=json.load(sys.stdin); print(d["quorum_names"])'
# Expect: at least 2 of 3 monitor names listed
# If fewer: STOP. Go to scenario "Lost monitor quorum".
"Verify the cluster is healthy" is not a step. "Run ceph -s; expect
HEALTH_OK; if HEALTH_WARN, record the warning and continue; if
HEALTH_ERR, stop and escalate" is a step.
Non-technical elements
Frequently missing and frequently needed:
who has authority to declare a disaster
who can authorise a destructive action
where the credentials are, and how to get them
who to contact at the hardware vendor and the facility
where the backups physically are
what to tell users, and who says it
how to work if the usual chat and ticketing systems are down
# credentials access is the one that stops recoveries
# document: which secret manager, which break-glass procedure,
# who holds the second factor
A plan that assumes the wiki, the chat system, and the ticket system are
available has assumed away the scenarios where they are not.
Keeping it current
| Trigger | Update |
|---|---|
| A cluster change | affected scenarios |
| A drill finding | the step that was wrong |
| A real incident | everything the incident touched |
| A personnel change | the contact lists |
| Quarterly | a read-through, whether or not anything changed |
# the plan should reference commands that still exist
grep -oE 'ceph [a-z-]+ [a-z-]+' /docs/dr-plan.md | sort -u | \
while read -r c; do
$c --help >/dev/null 2>&1 || echo "check: $c"
done
Quiz
Knowledge check · 4 questions
Q1. Why organise a DR plan by scenario rather than by component?
Q2. Storing the DR plan in the internal wiki is sufficient.
Q3. Improve a DR plan.
A DR plan exists as a wiki page organised by component, with steps like "verify the cluster is healthy" and "restore from backup as appropriate".
Q4. Which non-technical elements are most often missing from DR plans?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Organise the plan by scenario and write literal commands with expected output — a reader woken by a page has a symptom, not a diagnosis. Keep an offline copy; the scenarios covered include ones where the wiki runs on the infrastructure being recovered.
Cross-course references
- Kubernetes: runbooks stored in the cluster they recover are unavailable when needed
- Linux: a plan is usable to the extent it starts from a symptom