CephLXXX · Blocked OperationsBlocked Operations
Blocked by forgotten flags
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
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
| Flag | Prevents | Blocks client I/O? |
|---|---|---|
pause | all client reads and writes | yes |
noup | OSDs being marked up | no, but they cannot rejoin |
nodown | OSDs being marked down | no, but failures go undetected |
noout | OSDs being marked out | no, but recovery never starts |
noin | OSDs being marked in | no, but new OSDs stay empty |
norecover | recovery | no — blocks repair |
nobackfill | all backfill | no — blocks repair |
norebalance | misplaced-object movement | no — blocks optimisation |
noscrub | shallow scrub scheduling | no — blocks integrity checking |
nodeep-scrub | deep scrub scheduling | no — 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
| Flag | Harm if left set |
|---|---|
pause | total outage — noticed immediately |
nodown | failure detection disabled; failed OSDs stay in the acting set |
noout | recovery never starts after a failure |
norecover / nobackfill | PGs stay degraded indefinitely |
norebalance | imbalance grows unchecked |
noscrub / nodeep-scrub | corruption 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
Q1. Which OSD map flag blocks client I/O?
Q2. `nodown` is a harmless flag to leave set since it does not block client I/O.
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.
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