CephLXXVII · AlertingAlerting
Degraded PG alerts and their triage
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
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'
| Observation | Reading |
|---|---|
| Degraded, recovering, count falling | handled; monitor |
| Degraded, recovering, count static | stalled; investigate |
| Degraded, not recovering | stuck; investigate immediately |
| Degraded and undersized | fewer OSDs than size available |
Degraded and backfill_toofull | capacity-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
| Situation | Action |
|---|---|
| Recovery progressing normally | none; let it complete |
| Recovery slower than acceptable | raise the mClock profile toward recovery |
| Recovery stalled on capacity | free space |
| Recovery stalled on a missing OSD | restore or replace it |
PGs below min_size | restore 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
Q1. What is the difference between a degraded PG and an undersized one?
Q2. Restarting OSDs is a reasonable way to restart a recovery that appears slow.
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.
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