CephLXV · Why Full Clusters Are DangerousWhy Full Clusters Are Dangerous
Recovering a cluster after a full event
What you'll learn
- Sequence the recovery from a full event
- Verify each stage before proceeding
- Restore temporary changes
- Address the causes rather than the symptom
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
Getting writes flowing again is the first half. The second half — restoring the margins, clearing the degradation, and fixing what allowed it — is what determines whether it happens again next quarter.
The sequence
1. reduce consumption below the full ratio → writes resume
2. reduce below backfillfull → recovery resumes
3. let recovery complete → degradation clears
4. rebalance → capacity recovered from imbalance
5. restore any raised ratios → margins restored
6. restore any lowered pool sizes → durability restored
7. expand → durable headroom
8. fix the detection gap → prevention
Verifying each stage
# 1 — writes resumed
ceph health detail | grep -E 'OSD_FULL|POOL_FULL' || echo 'clear'
ceph osd df | sort -k17 -rn | head -3
# 2 — recovery resumed
ceph -s | grep -E 'degraded|recovery'
ceph pg dump pgs | grep -c toofull
# 3 — degradation cleared
ceph -s | grep 'active+clean'
ceph health detail | grep PG_DEGRADED || echo 'clear'
# 4 — rebalance
ceph balancer status
ceph osd df | awk 'NR>1 {print $17}' | sort -n | sed -n '1p;$p'
Do not proceed past step 3 while any PG remains degraded; the cluster’s redundancy matters more than its balance.
Restoring temporary changes
# ratios
ceph osd set-full-ratio 0.95
ceph osd set-backfillfull-ratio 0.90
ceph osd set-nearfull-ratio 0.85
ceph osd dump | grep ratio
# pool sizes — this is a backfill, so plan it
ceph osd pool set backups size 3
watch -n 30 'ceph -s | grep misplaced'
Restoring a pool’s size moves a full copy of it and should be scheduled
rather than run immediately after an incident, when the cluster has other
work.
# a checklist of everything changed during the incident
ceph config dump | grep -E 'full_ratio|backfill'
ceph osd pool ls detail | grep -E 'size|min_size'
Addressing the causes
| Cause | Fix |
|---|---|
| Alert fired too late | projection alerting with a longer horizon |
| Balancer not enabled | enable it in upmap mode |
| Snapshots accumulating | retention policy with automation |
| RGW multipart uploads accumulating | lifecycle rule |
| No reclamation list | write one with owners and estimates |
| Growth rate unknown | track it and review quarterly |
ceph balancer on
ceph balancer mode upmap
The post-incident record
Full event, prod-ceph-01, 2026-08-18
Trigger: growth outpaced the 85% nearfull alert; procurement lead 6 weeks
Detection: application ENOSPC reports, 40 minutes before the nearfull page
Duration: writes blocked 2h14m; degraded a further 9h
Actions: lowered backups size to 2; removed 340 RBD snapshots; raised
backfillfull to 0.92 temporarily
Restored: ratios 2026-08-18; backups size restored 2026-08-21
Fixes: projection alert at 60 days; balancer enabled; snapshot retention
automation; reclamation list written
Quiz
Knowledge check · 4 questions
Q1. Why should rebalancing wait until degraded PGs have cleared?
Q2. Restoring a pool's size from 2 back to 3 should be done immediately after writes resume.
Q3. Complete the recovery after a full event.
Writes resumed two hours ago after snapshot deletion and a temporary backfillfull ratio increase to 0.92. A non-critical pool was lowered to size=2. Recovery is running and 600K objects remain degraded.
Q4. Which temporary changes made during a full event must be tracked for restoration?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Let recovery reach active+clean before rebalancing — durability
first, efficiency second. Track every temporary change made during the
incident with an owner and a restoration date, and schedule the pool
size restoration for a quiet window since it is a pool-sized backfill
that consumes the space just recovered.
Cross-course references
- Kubernetes: restoring resource limits relaxed during an incident needs the same tracking
- Linux: temporary tuning applied under pressure becomes permanent without a restoration list