CephXCII · Removing Storage NodesRemoving Storage Nodes
The removal order and why it exists
What you'll learn
- State the safe removal order
- Explain what each step protects
- Recognise the consequences of skipping steps
- Recover from a removal done wrongly
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
The removal order is not convention — each step protects against a specific failure, and skipping one produces that failure.
The order
1. out → placement is recomputed without the OSD
2. wait → the data actually moves
3. verify → confirm zero PGs and HEALTH_OK
4. stop → the daemon stops with nothing depending on it
5. purge → all three registries are cleaned
6. host → the host is removed once no daemons remain
7. CRUSH → empty buckets are cleaned
What each step protects
| Step | Protects against |
|---|---|
out | removing an OSD whose PGs have nowhere else to be |
| wait | removing before the data has moved |
| verify | removing while the movement is stalled or incomplete |
| stop | removing a running daemon from under the cluster |
| purge | leaving residue in one of three registries |
| host removal | removing a host still running services |
| CRUSH cleanup | a map describing a cluster that does not exist |
The second and third are the ones that protect data. The rest protect consistency.
Consequences of skipping steps
| Skipped | Consequence |
|---|---|
out, going straight to purge | PGs lose a copy immediately; degraded, possibly below min_size |
| The wait | same, to the extent the data had not moved |
| Verification | removal during a stall; some PGs lose copies |
| Stopping the daemon | the daemon writes to an OSD the cluster has removed |
purge, using individual commands | residue in the registries |
| Host removal order | services expected but absent |
Removing three OSDs from a size=3 pool without draining:
every PG that had copies on all three loses all of them
those PGs are permanently lost
This is the case the order exists to prevent, and it is reachable in a few commands.
Recovering from a wrong removal
# an OSD removed but its data still on the device
ceph-volume lvm activate --all
ceph osd tree
If the device still holds the OSD’s data and it was purged rather than zapped, reactivating it may restore the OSD:
OSD_ID=12
OSD_FSID=3e0b2c14-9f3a-4d21-8a77-1c9f0e2b5d64
ceph-volume lvm list
ceph-volume lvm activate ${OSD_ID} ${OSD_FSID}
| Situation | Recoverable? |
|---|---|
| Purged, device untouched | often, by reactivating |
| Purged and zapped | no |
| Removed while PGs were on it, other copies exist | yes, by recovery |
| Removed while it held the only copy | no |
ceph pg dump pgs | awk '$10 ~ /incomplete|down/ {print $1, $10}'
incomplete PGs after a removal indicate copies that no longer exist
anywhere.
Quiz
Knowledge check · 4 questions
Q1. What happens if three OSDs holding a size=3 PG's copies are removed without draining?
Q2. A purged OSD whose device has not been zapped can sometimes be reactivated.
Q3. Recover from OSDs removed without draining.
An operator purged four OSDs from a healthy cluster without draining them, to save time during a decommission. Several PGs now show as incomplete.
Q4. Which two steps of the removal order protect data, and which protect consistency?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Follow the order — out, wait, verify, stop, purge, host, CRUSH — and recognise that the wait and the verification are the two steps protecting data. If OSDs were removed without draining, preserve the devices immediately; reactivation is the only recovery path and zapping closes it.
Cross-course references
- Kubernetes: forced deletion of resources bypasses the protections that ordering provides
- Linux: removing array members without confirming resync completed loses data the same way