Skip to main content
RunBook Academy

CephLVIII · RecoveryRecovery

Knowing when recovery is finished

Intermediate⏱ ~15 minceph

What you'll learn

  • Identify the signals that recovery has completed
  • Use the progress module for estimates
  • Verify completion rather than assuming it
  • Recognise a recovery that completed with residue

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

Recovery finishing is what closes an incident and what unblocks other maintenance. Confirming it properly means checking that nothing was left behind, which the headline signal does not cover.

The signals

ceph -s
# pgs: 4353 active+clean

ceph health detail
# HEALTH_OK

ceph pg stat
# 4353 pgs: 4353 active+clean

ceph progress
# no events
SignalConfirms
All PGs active+cleanno PG is degraded or misplaced
HEALTH_OKno check is firing
No recovery rate in ceph -snothing is moving
ceph progress emptyno tracked event outstanding

Why active+clean alone is not enough

ceph -s
# pgs: 4353 active+clean
# health: HEALTH_WARN
#         2 pgs not deep-scrubbed in time
#         1 daemons have recently crashed

Clean PGs with an outstanding warning means the recovery finished and something else needs attention. Checking health as well as PG state is what catches it.

More specifically:

ceph health detail
ceph crash ls
ceph osd tree | grep -E 'down|out'
ceph osd df | sort -k17 -rn | head -3
CheckCatches
crash lsa daemon that crashed during the recovery
osd treean OSD still down or out
osd dfuneven distribution left by the recovery
health detailanything else outstanding

The progress module

ceph mgr module enable progress
ceph progress
ceph progress json | jq -r '.events[] | "\(.message) \(.progress)"'
ceph progress clear

It tracks recovery events with estimates and reports when they complete, which is more directly useful than inferring completion from counts.

Closing the work

# the full confirmation
ceph -s
ceph health detail
ceph osd tree | grep -vE 'up +1'
ceph crash ls
ceph osd df | awk 'NR>1 {print $17}' | sort -n | tail -3

Five commands, and together they confirm the cluster returned to a state you would be content to leave it in.

Quiz

Knowledge check · 4 questions

  1. Q1. The cluster reports all PGs active+clean after a recovery. What else should be checked before closing the work?

  2. Q2. A recovery reaching active+clean guarantees even utilisation across OSDs.

  3. Q3. Close out a recovery properly.

    A recovery following two OSD failures has reached active+clean after 14 hours. The team is preparing to resume deferred maintenance.

  4. Q4. What does the progress module add over inferring completion from counts?

Passing score: 75%. Answers are checked in this browser.

Production discipline

Confirm health, crashes, OSD states, and utilisation distribution alongside PG state before closing a recovery; active+clean says the PGs settled and nothing about what else happened during the window. Run the balancer afterwards if the distribution is uneven — recovery satisfies CRUSH rather than evenness.

Cross-course references

  • Kubernetes: a completed rollout still warrants checking for events and resource pressure
  • Linux: verifying a completed maintenance rather than assuming it is general practice