Skip to main content
RunBook Academy

CephCXV · Cluster-Wide Capacity IncidentCluster-Wide Capacity Incident

Raising the ratios as a bridge, not a fix

Advanced⏱ ~18 minceph

What you'll learn

  • State precisely what raising each ratio permits
  • Identify the OSD-side failsafe that bounds every ratio change
  • Assess the cluster-wide blast radius of a ratio change
  • Run a threshold change with a defined revert trigger

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

Raising a ratio creates no space. It moves the line at which Ceph stops protecting you, and it does so for every OSD in the cluster at once. It is a legitimate bridge and a catastrophic destination.

What the change actually grants

ceph osd dump | grep -E 'full_ratio|nearfull_ratio'
full_ratio 0.95
backfillfull_ratio 0.9
nearfull_ratio 0.85
RaisingGrantsCosts
nearfullquietthe warning that would flag the next event
backfillfullpermission for backfill and rebalancing to resumemovement into OSDs with less remaining margin
fullpermission for clients to keep writingthe margin that keeps an OSD restartable
ceph osd set-backfillfull-ratio 0.91
ceph osd set-full-ratio 0.96

The monitors enforce ordering: nearfull below backfillfull below full. A change that inverts them is rejected, which is why the backfillfull raise usually has to come with a full raise behind it.

The ceiling you cannot raise

ceph config get osd osd_failsafe_full_ratio
0.970000

Each OSD refuses writes at its own failsafe regardless of the monitor ratio. Setting full_ratio to 0.98 grants nothing above 0.97 — the OSD stops on its own, from its own view of its own device.

The blast radius is every OSD

ceph osd df | sort -k17 -n | tail -8
The ratios are cluster-wide. There is no per-pool or per-class full
ratio, so raising the line to unblock one pool removes the same margin
from every OSD serving every other pool.
Before the changeAfter a raise to 0.96
one OSD blocked at 95%that OSD writable, with 1% of margin left
forty OSDs protected at 95%forty OSDs now permitted to reach 96%
the incident visible in healththe incident silent until the new line

The bookkeeping

RecordExample
Original valuesfull 0.95 backfillfull 0.90 nearfull 0.85
New valuesfull 0.96 backfillfull 0.91
Reasonunblock backfill onto twelve new OSDs
Revert triggerfullest OSD below 85%
Owner and deadlineon-call lead, revert within 24 hours
# write the revert before running the raise
cat > /root/incident/revert-ratios.sh <<'EOF'
ceph osd set-full-ratio 0.95
ceph osd set-backfillfull-ratio 0.90
ceph osd set-nearfull-ratio 0.85
EOF
chmod +x /root/incident/revert-ratios.sh
bash /root/incident/revert-ratios.sh
ceph osd dump | grep -E 'full_ratio|nearfull_ratio'

Quiz

Knowledge check · 4 questions

  1. Q1. What does raising `full_ratio` from 0.95 to 0.98 achieve?

  2. Q2. The last few percent the full ratio protects exists to keep the OSD operable, not to reserve space for data.

  3. Q3. Decide whether to raise the ratios during an incident.

    Twelve new OSDs are deployed and empty because the cluster is above backfillfull. The fullest existing OSD is at 91%. Deletion has freed nothing so far and the inflow is stopped.

  4. Q4. Why is raising a ratio to unblock one pool a cluster-wide decision?

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

Production discipline

Write the revert script before running the raise and state the revert trigger as a measured condition, not as a time of day. Never raise a ratio while the inflow is still running — the margin is consumed and you arrive at the same crisis with less protection — and never raise full_ratio toward osd_failsafe_full_ratio, because an OSD that fills completely stops being a capacity problem and becomes a repair.

Cross-course references

  • Kubernetes: raising a resource quota to unblock a deploy removes the limit that would catch the next one
  • Linux: tune2fs reserved blocks exist to keep the filesystem repairable, not to store data