Skip to main content
RunBook Academy

CephCIX · Disaster RecoveryDisaster Recovery

Writing a DR plan people can actually execute

Intermediate⏱ ~18 minceph

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

Not yet marked complete on this device.

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
SectionContent
Recognitionthe exact commands and their expected output
Impactdegraded, unavailable, or lost
Stepsnumbered, with the literal commands
Verificationhow to know the step succeeded
Communicationwho, what, and when
Escalationthe 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

PropertyWhy
Literal commands, not descriptionsno translation under stress
Expected output shownthe reader can confirm
One action per stepno ambiguity about what was done
Explicit stop conditions“if X, stop and escalate”
No assumed contextthe reader may not be the author
Testeda 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

TriggerUpdate
A cluster changeaffected scenarios
A drill findingthe step that was wrong
A real incidenteverything the incident touched
A personnel changethe contact lists
Quarterlya 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

  1. Q1. Why organise a DR plan by scenario rather than by component?

  2. Q2. Storing the DR plan in the internal wiki is sufficient.

  3. 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".

  4. 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