Skip to main content
RunBook Academy

CephLXXVII · AlertingAlerting

Degraded PG alerts and their triage

Advanced⏱ ~17 minceph

What you'll learn

  • Triage a degraded PG alert
  • Distinguish handled from unhandled degradation
  • Establish the exposure precisely
  • Decide whether to intervene

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

Degradation during an active recovery is the cluster working. Degradation with nothing recovering is a stuck condition. The triage separates them in under a minute.

The triage

ceph -s
  pgs:  3891 active+clean
        102  active+recovering+degraded
# is anything recovering?
ceph -s | grep -E 'recovering|backfilling'

# is the count falling?
ceph -s | grep -o '[0-9]*/[0-9]* objects degraded'
sleep 300
ceph -s | grep -o '[0-9]*/[0-9]* objects degraded'
ObservationReading
Degraded, recovering, count fallinghandled; monitor
Degraded, recovering, count staticstalled; investigate
Degraded, not recoveringstuck; investigate immediately
Degraded and undersizedfewer OSDs than size available
Degraded and backfill_toofullcapacity-blocked

Establishing the exposure

# how many copies do the degraded PGs actually have?
ceph pg dump pgs | awk '$10 ~ /degraded/ {print $1, $10, $15, $17}' | head

# any PG below min_size?
ceph pg dump pgs | awk '$10 !~ /active/ {print $1, $10}' | head

The distinction that determines urgency:

degraded but active     → serving I/O with fewer copies; a further failure risks loss
degraded and inactive   → below min_size; I/O already blocked
ceph osd pool get rbd-vms size
ceph osd pool get rbd-vms min_size

A size=3, min_size=2 pool with PGs at two copies tolerates no further loss in the affected set without blocking I/O — that is the exposure to state.

Deciding whether to intervene

SituationAction
Recovery progressing normallynone; let it complete
Recovery slower than acceptableraise the mClock profile toward recovery
Recovery stalled on capacityfree space
Recovery stalled on a missing OSDrestore or replace it
PGs below min_sizerestore the missing OSDs, or accept risk and lower min_size
# accelerate, when the exposure justifies it
ceph config set osd osd_mclock_profile high_recovery_ops

What not to do

# do not restart OSDs to "kick" recovery
# do not lower min_size without recording and restoring it
# do not mark additional OSDs out while degraded

Each of these has been done in an attempt to help and each extends the exposure.

Quiz

Knowledge check · 4 questions

  1. Q1. What is the difference between a degraded PG and an undersized one?

  2. Q2. Restarting OSDs is a reasonable way to restart a recovery that appears slow.

  3. Q3. Triage a degraded PG alert.

    An alert reports degraded PGs. The cluster is serving I/O normally. The responder must decide whether to act.

  4. Q4. What exposure does a size=3, min_size=2 pool with PGs at two copies have?

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

Production discipline

Sample the degraded object count over five minutes before acting — a falling count means the cluster is handling it and intervening extends the exposure. Distinguish degraded from undersized: the first needs time and the second needs a placement change.

Cross-course references

  • Kubernetes: a rollout in progress differs from one that is stuck
  • Linux: an array rebuilding differs from one that cannot rebuild