Skip to main content
RunBook Academy

CephXCV · Maintenance FlagsMaintenance Flags

The norebalance flag in depth

Intermediate⏱ ~16 minceph

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

Not yet marked complete on this device.

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

LimitConsequence
Leaving it set indefinitelyimbalance grows unchecked
It does not stop recoverydegraded PGs still consume capacity
It does not stop scrubscrub load continues
A degraded PG needing backfill still backfillscorrect, 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

  1. Q1. Why does a degraded PG still backfill while `norebalance` is set?

  2. Q2. `norebalance` can be left set through an entire working day without any object losing a copy.

  3. Q3. Pace an expansion around business hours.

    An expansion rebalance is affecting client latency during peak hours. It has several days remaining.

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