CephLVIII · RecoveryRecovery
Knowing when recovery is finished
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
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
| Signal | Confirms |
|---|---|
All PGs active+clean | no PG is degraded or misplaced |
HEALTH_OK | no check is firing |
No recovery rate in ceph -s | nothing is moving |
ceph progress empty | no 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
| Check | Catches |
|---|---|
crash ls | a daemon that crashed during the recovery |
osd tree | an OSD still down or out |
osd df | uneven distribution left by the recovery |
health detail | anything 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
Q1. The cluster reports all PGs active+clean after a recovery. What else should be checked before closing the work?
Q2. A recovery reaching active+clean guarantees even utilisation across OSDs.
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.
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