Skip to main content
RunBook Academy

CephLXXX · Blocked OperationsBlocked Operations

Blocked by forgotten flags

Intermediate⏱ ~17 minceph

What you'll learn

  • State precisely what each flag prevents
  • Distinguish flags that block I/O from those that block repair
  • Audit for forgotten flags
  • Manage flags with expiry

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

Flags are set during maintenance and forgotten. Each changes cluster behaviour indefinitely, and the harm differs sharply between them.

What each flag prevents

ceph osd dump | grep flags
ceph health detail | grep OSDMAP_FLAGS
FlagPreventsBlocks client I/O?
pauseall client reads and writesyes
noupOSDs being marked upno, but they cannot rejoin
nodownOSDs being marked downno, but failures go undetected
nooutOSDs being marked outno, but recovery never starts
noinOSDs being marked inno, but new OSDs stay empty
norecoverrecoveryno — blocks repair
nobackfillall backfillno — blocks repair
norebalancemisplaced-object movementno — blocks optimisation
noscrubshallow scrub schedulingno — blocks integrity checking
nodeep-scrubdeep scrub schedulingno — blocks integrity checking

Only pause blocks client I/O. The others block repair, detection, or maintenance work — which is a different and often more insidious harm.

The harm from each when forgotten

FlagHarm if left set
pausetotal outage — noticed immediately
nodownfailure detection disabled; failed OSDs stay in the acting set
nooutrecovery never starts after a failure
norecover / nobackfillPGs stay degraded indefinitely
norebalanceimbalance grows unchecked
noscrub / nodeep-scrubcorruption goes undetected

nodown is the most dangerous of the quiet ones: a failed OSD remains in the acting set, so writes to its PGs wait for a daemon that will never respond.

Auditing

ceph osd dump | grep flags
ceph health detail | grep -A2 OSDMAP_FLAGS
# per-OSD flags, which are easier still to forget
ceph osd tree --format json | python3 -c '
import sys,json
d = json.load(sys.stdin)
for n in d["nodes"]:
    if n["type"] == "osd" and n.get("status") != "up":
        print(n["name"], n.get("status"), n.get("reweight"))'
- alert: CephOSDMapFlagsSet
  expr: ceph_health_detail{name="OSDMAP_FLAGS"} == 1
  for: 4h
  labels: { severity: ticket }
  annotations:
    summary: "OSD map flags have been set for 4 hours — verify still intended"

Managing flags with expiry

# set with an automatic clear
ceph osd set noout
( sleep 14400; ceph osd unset noout ) &
# better: tie the clear to the condition
ceph osd set noout
while ! ceph health | grep -q HEALTH_OK; do sleep 60; done
ceph osd unset noout

The scripted clear is what makes a flag temporary in practice rather than in intent.

Quiz

Knowledge check · 4 questions

  1. Q1. Which OSD map flag blocks client I/O?

  2. Q2. `nodown` is a harmless flag to leave set since it does not block client I/O.

  3. Q3. Audit a cluster for forgotten flags.

    A cluster shows OSDMAP_FLAGS in its health output. Nobody on the current team knows when or why the flags were set.

  4. Q4. How do `noout` and `norecover` differ in what they leave behind?

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

Production discipline

Script the clearing of any flag you set — tied to a condition where possible — since intent to remove it is not the same as removing it. Recognise nodown as the quiet flag that produces an outage: failed OSDs stay in acting sets and their PGs’ writes wait forever.

Cross-course references

  • Kubernetes: a forgotten cordon or a permanent silence causes the same class of harm
  • Linux: maintenance modes left enabled disable exactly what they were meant to pause