CephXCV · Maintenance FlagsMaintenance Flags
The norebalance flag in depth
What you'll learn
- State what norebalance suppresses precisely
- Explain why it is safe during business hours
- Use it for routine pacing
- Recognise its limits
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
norebalance is the flag that can be set during a working day without
compromising anything, and understanding why makes it usable with
confidence.
What it suppresses
Misplaced objects: full copy count, in locations CRUSH no longer prefers
→ produced by expansions, CRUSH changes, balancer moves, OSDs going out
→ moving them is optimisation, not repair
norebalance stops that movement and nothing else.
ceph osd set norebalance
ceph -s | grep -E 'misplaced|degraded|recovering'
With norebalance set:
misplaced objects stay misplaced
degraded objects are still recovered
degraded PGs still backfill if their log gap requires it
no redundancy is compromised at any point
Why it is safe
A misplaced object has size copies.
Leaving it misplaced does not reduce that count.
A failure while it is misplaced is handled exactly as any other failure.
The only cost is that the cluster’s distribution stays suboptimal for
longer — capacity is less evenly used and MAX AVAIL stays lower than it
could be.
ceph df | grep MAX
ceph osd df | sort -k17 -rn | head -3
Routine pacing
# pause an expansion during business hours
0 8 * * * ceph osd set norebalance
0 20 * * * ceph osd unset norebalance
# or pause it entirely while investigating something
ceph osd set norebalance
# investigate
ceph osd unset norebalance
Legitimate routine uses:
pausing an expansion during peak hours
pausing balancer movement during an incident investigation
freezing the distribution while diagnosing a latency problem
reducing background load during a load test
The limits
| Limit | Consequence |
|---|---|
| Leaving it set indefinitely | imbalance grows unchecked |
| It does not stop recovery | degraded PGs still consume capacity |
| It does not stop scrub | scrub load continues |
| A degraded PG needing backfill still backfills | correct, but produces movement |
ceph -s | grep -E 'misplaced|degraded'
ceph osd df | awk 'NR>1 {if($17+0>m)m=$17+0; if(mn==""||$17+0<mn)mn=$17+0}
END {printf "spread %.1f\n", m-mn}'
A growing spread while norebalance is set is the signal it has been
left too long.
Quiz
Knowledge check · 4 questions
Q1. Why does a degraded PG still backfill while `norebalance` is set?
Q2. `norebalance` can be left set through an entire working day without any object losing a copy.
Q3. Pace an expansion around business hours.
An expansion rebalance is affecting client latency during peak hours. It has several days remaining.
Q4. What is the only cost of leaving `norebalance` set?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Use norebalance freely for routine pacing — it suppresses only the
movement of objects that already have their full copy count, so nothing is
compromised. Watch the utilisation spread; a growing spread is the signal
it has been left set too long.
Cross-course references
- Kubernetes: pausing optimisation-only reconciliation is likewise low-risk
- Linux: deferring defragmentation is safe where deferring a rebuild is not