CephXCV · Maintenance FlagsMaintenance Flags
The norecover flag in depth
What you'll learn
- State exactly what norecover stops
- Distinguish it from nobackfill and norebalance
- Identify its legitimate uses
- Recognise the harm of leaving it set
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
norecover stops the mechanism that repairs degraded PGs, which is the
most consequential thing any of these flags does.
What it stops
Recovery: restoring missing object copies using the PG log
→ the primary knows which objects a returning OSD missed
→ it sends them
→ degraded objects become clean
norecover stops that entirely.
ceph osd set norecover
ceph -s | grep -E 'degraded|recovering'
With norecover set:
degraded PGs stay degraded
a returning OSD does not catch up
new degradation is not repaired
backfill continues, since it is a different mechanism
Distinguishing the three flags
| Flag | Stops | Leaves running |
|---|---|---|
norecover | log-based recovery of degraded objects | backfill |
nobackfill | all backfill, including for degraded PGs | log-based recovery |
norebalance | backfill of misplaced objects only | recovery and degraded backfill |
The distinction that matters:
norebalance stops optimisation
nobackfill and norecover stop repair
ceph osd dump | grep flags
ceph -s | grep -E 'degraded|misplaced'
Legitimate uses
| Situation | Justification |
|---|---|
| Diagnosing whether recovery is causing an impact | brief, with immediate restoration |
| A cluster-wide emergency where all movement must stop | rare |
| Investigating a recovery that is behaving unexpectedly | to freeze the state |
| Before a controlled experiment on a test cluster | not production |
# a diagnostic pause, with a scripted restore
ceph osd set norecover
sleep 300
# measure
ceph osd unset norecover
The list is short deliberately: there are very few production situations where stopping repair is the right answer.
The harm of leaving it set
norecover left set:
every subsequent failure leaves permanent degradation
the cluster accumulates degraded PGs
a second failure on a degraded PG can lose data
and the health warning is the only indication
ceph health detail | grep OSDMAP_FLAGS
ceph -s | grep degraded
- alert: CephRecoverySuppressed
expr: ceph_health_detail{name="OSDMAP_FLAGS"} == 1
for: 1h
labels: { severity: page }
annotations:
summary: "OSD map flags set for over an hour — check for norecover"
Quiz
Knowledge check · 4 questions
Q1. What continues while `norecover` is set?
Q2. `norecover` and `norebalance` have equivalent effects.
Q3. Evaluate a proposal to set norecover during a busy period.
A team proposes setting norecover during business hours to reduce background load, planning to clear it each evening.
Q4. Why do recovery and backfill need separate flags?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Reserve norecover for brief scripted diagnostics — it stops the
repair of degraded PGs, so every failure while it is set leaves permanent
degradation. When the intent is reducing background load, norebalance
and the throttles achieve it without touching redundancy.
Cross-course references
- Kubernetes: suppressing self-healing is categorically different from throttling background work
- Linux: disabling an array rebuild is not the same as limiting its rate