CephCXIV · Complete Storage Node LossComplete Storage Node Loss
Bringing the replacement into the cluster
What you'll learn
- Choose between removing now and holding for the replacement
- Verify replacement hardware parity before it takes placement
- Add the host and its OSDs through the orchestrator
- Phase in CRUSH weight so backfill is paced deliberately
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
Losing a node costs one full re-replication. Replacing it costs a second one, in the other direction. Whether you pay once or twice is decided in the first hour, before any hardware arrives.
Two migrations, or one
| Choice | Data movement | Redundancy exposure |
|---|---|---|
| Purge now, add the replacement later | two full migrations | short — hours |
Hold noout, add within the window | one migration | long — the whole wait |
Hold noout, hardware slips | one migration, eventually | unbounded, and unplanned |
ceph osd set noout # only against a committed, short delivery date
ceph osd unset noout
Holding noout is a bet that hardware arrives when someone said it would.
For a permanent loss the bet is usually wrong, and the cost of losing it
is running on two copies for as long as the slip lasts.
Parity checks before it takes placement
ceph cephadm check-host stor-07r 10.20.0.27
ceph orch host add stor-07r 10.20.0.27
ceph orch device ls stor-07r --refresh
| Property | Why it matters |
|---|---|
| Device count | fewer devices means the host holds less than its predecessor |
| Device size | CRUSH weight is derived from capacity, so size changes placement share |
| Device class | an ssd class where hdd is expected silently excludes it from rules |
| Network path | a 10G replacement in a 25G cluster becomes the recovery bottleneck |
| Kernel and Ceph version | a mismatched host deploys but behaves differently under load |
ceph orch device ls stor-07r --format json | python3 -c '
import sys,json
for h in json.load(sys.stdin):
for d in h.get("devices", []):
print("%-12s %-10s %6.1f TiB available=%s" %
(d.get("path"), d.get("human_readable_type"),
d.get("sys_api", {}).get("size", 0)/1024**4, d.get("available")))'
Adding the OSDs
ceph orch apply -i /root/osd-spec.yaml --dry-run
ceph orch apply -i /root/osd-spec.yaml
ceph orch ps --daemon-type osd --hostname stor-07r
# or one device at a time when you want to watch each one land
ceph orch daemon add osd stor-07r:/dev/sdb
ceph osd tree | grep -A9 stor-07r
ceph osd metadata 48 | python3 -c '
import sys,json
d = json.load(sys.stdin)
print(d.get("hostname"), d.get("bluestore_bdev_type"), d.get("osd_objectstore"))'
Phasing in the weight
# create them with zero weight so nothing moves until you say so
ceph config set osd osd_crush_initial_weight 0
for id in 48 49 50 51 52 53 54 55; do
ceph osd crush reweight "osd.$id" 3.0
done
ceph -s | grep misplaced
| Stage | Weight per 10 TiB device | Purpose |
|---|---|---|
| 1 | 3.0 | confirm the OSDs take IO and stay up |
| 2 | 6.0 | measure client impact at half load |
| 3 | 9.095 | full weight, matching the surviving hosts |
ceph config rm osd osd_crush_initial_weight
ceph balancer status
ceph osd df tree | tail -12
Quiz
Knowledge check · 4 questions
Q1. A node is rebuilt with 18 TiB devices in a cluster otherwise running 10 TiB devices. What follows?
Q2. Reusing the destroyed OSD IDs avoids the backfill that fresh IDs would cause.
Q3. Decide how to handle a permanently lost node with replacement hardware ordered.
A node is destroyed. The vendor quotes replacement hardware in ten to fifteen working days. The cluster has four other hosts, replicated pools at `size=3`, and 38% used.
Q4. What should be verified about replacement hardware before it takes placement?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Do not hold noout against a delivery estimate — a range is not a date,
and the cost of the bet is two-copy exposure for its whole duration. Bring
replacement OSDs in at zero weight and raise them in stages, so a
misconfigured device class or a slow network path shows up while only a
fraction of the data has moved.
Cross-course references
- Kubernetes: a replacement node with different resources changes scheduling across the cluster
- Linux: adding a larger member to a striped set redistributes more than the new member