Skip to main content
RunBook Academy

CephXCV · Maintenance FlagsMaintenance Flags

The norecover flag in depth

Advanced⏱ ~16 minceph

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

Not yet marked complete on this device.

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

FlagStopsLeaves running
norecoverlog-based recovery of degraded objectsbackfill
nobackfillall backfill, including for degraded PGslog-based recovery
norebalancebackfill of misplaced objects onlyrecovery 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

SituationJustification
Diagnosing whether recovery is causing an impactbrief, with immediate restoration
A cluster-wide emergency where all movement must stoprare
Investigating a recovery that is behaving unexpectedlyto freeze the state
Before a controlled experiment on a test clusternot 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

  1. Q1. What continues while `norecover` is set?

  2. Q2. `norecover` and `norebalance` have equivalent effects.

  3. 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.

  4. 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