Skip to main content
RunBook Academy

CephXXXIX · RBD TroubleshootingRBD Troubleshooting

Blocked requests and full-cluster conditions

Advanced⏱ ~18 minceph

What you'll learn

  • Interpret slow ops and blocked request warnings
  • Identify the OSD and stage responsible
  • Handle nearfull, backfillfull, and full conditions
  • Restore service when writes are blocked by capacity

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

Blocked requests mean clients are waiting, and the capacity thresholds that most often cause them are a graduated series that ends with the cluster refusing all writes. Recognising which threshold you have crossed determines how much time you have.

Reading the warning

ceph health detail
[WRN] SLOW_OPS: 12 slow ops, oldest one blocked for 94 sec,
      osd.31 has slow ops

The OSD is named. That is usually the whole diagnosis:

ceph daemon osd.31 dump_blocked_ops
ceph daemon osd.31 dump_historic_ops

The stage the operations are stuck at tells you where to look:

StageMeaning
waiting for rw lockscontention on the same objects
waiting for subops from [...]a peer OSD is slow — investigate those
waiting for degraded objectrecovery must complete first
waiting for scruba scrub holds the chunk
no progress past queued_for_pgthe OSD is saturated or wedged

The capacity thresholds

ceph osd df | sort -k17 -rn | head
ceph health detail | grep -i full
ThresholdDefaultEffect
nearfull_ratio0.85warning only; latency already degrading
backfillfull_ratio0.90backfill refuses this OSD as a destination
full_ratio0.95writes to affected PGs are refused

Crossing full blocks writes to every PG on that OSD, which for a well-distributed pool means effectively all writes.

ceph osd set-nearfull-ratio 0.85
ceph osd set-backfillfull-ratio 0.90
ceph osd set-full-ratio 0.95

Restoring service when full

In order of preference:

# 1. rebalance away from the fullest OSDs — no capacity added, no risk
POOL=rbd-vms
IMAGE=vm-disk-01
ceph osd reweight-by-utilization 110
ceph balancer status
ceph balancer on

# 2. reclaim space
rbd snap ls ${POOL}/${IMAGE}          # old snapshots
rbd trash ls ${POOL}                 # deleted images awaiting purge
rbd trash purge ${POOL}

# 3. temporary threshold increase — buys hours, not a solution
ceph osd set-full-ratio 0.96

# 4. add capacity
ceph orch apply osd --all-available-devices

Raising the full ratio is a stopgap that consumes the safety margin. Each increment leaves less room before the OSD is genuinely out of space, at which point recovery itself cannot proceed.

Quiz

Knowledge check · 4 questions

  1. Q1. One OSD out of 200 crosses full_ratio. What is the effect on client writes?

  2. Q2. Repeatedly raising full_ratio is an acceptable way to manage a cluster approaching capacity.

  3. Q3. Restore writes on a cluster where an OSD has crossed full.

    Production writes have stopped. `ceph health detail` shows osd.117 above full_ratio at 95.4%; the cluster average is 79%. Additional capacity is two weeks away.

  4. Q4. Why is the full threshold set at 0.95 rather than closer to 1.0?

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

Production discipline

Alert on per-OSD utilisation variance alongside the cluster average; one OSD crossing full stops the workload while the average looks healthy. Keep the balancer enabled and verify it is keeping pace, since distribution is what determines effective capacity rather than the aggregate figure.

Cross-course references

  • Kubernetes: a single node at disk pressure evicts pods while the cluster shows spare capacity
  • Linux: a filesystem at 100% halts writers regardless of free space on other mounts