Removing a Ceph OSD retires one storage daemon and the disk capacity it contributes to placement groups. In a planned removal, Ceph moves placement groups away from the target before its record is purged, so cluster redundancy is not cut while data is still assigned to that device.

Cephadm manages normal OSD retirement with ceph orch osd rm. The orchestrator schedules the drain, tracks the placement group count, and removes the OSD only after it is safe to destroy; ceph orch osd rm status shows the queue while the operation is active.

Start from an administration host with a working cluster config, a keyring with orchestrator permissions, and enough free capacity on the remaining OSDs to absorb the data. Replace 12 and ceph-node2 with the target OSD ID and host from cluster output, and use --replace only when the same OSD ID will be claimed by a replacement disk.

Steps to safely remove a Ceph OSD with cephadm:

  1. Check cluster health before removing capacity.
    $ ceph -s
      cluster:
        id:     11111111-2222-3333-4444-555555555555
        health: HEALTH_OK
    
      services:
        mon: 3 daemons, quorum ceph-admin,ceph-node1,ceph-node2 (age 2h)
        mgr: ceph-admin.abc123(active, since 2h)
        osd: 6 osds: 6 up, 6 in
    
      data:
        pools:   4 pools, 256 pgs
        objects: 3.42M objects, 8.1 TiB
        usage:   24 TiB used, 76 TiB / 100 TiB avail
        pgs:     256 active+clean

    Start with a named health state and enough remaining capacity. Do not retire an OSD while the cluster is near its full ratio or already recovering from an unrelated placement-group issue.
    Related: How to check Ceph cluster health

  2. Identify the target OSD and its host in the CRUSH tree.
    $ ceph osd tree
    ID  CLASS  WEIGHT    TYPE NAME             STATUS  REWEIGHT  PRI-AFF
    -1         36.00000  root default
    -3         12.00000      host ceph-node1
     4    hdd   6.00000          osd.4             up   1.00000  1.00000
     5    hdd   6.00000          osd.5             up   1.00000  1.00000
    -5         12.00000      host ceph-node2
    12    hdd   6.00000          osd.12            up   1.00000  1.00000
    13    hdd   6.00000          osd.13            up   1.00000  1.00000
    -7         12.00000      host ceph-node3
    20    hdd   6.00000          osd.20            up   1.00000  1.00000
    21    hdd   6.00000          osd.21            up   1.00000  1.00000

    Confirm the OSD ID from cluster output and hardware records before removing anything. A wrong ID can trigger unnecessary backfill and may reduce redundancy while the intended disk remains in service.

  3. Refresh the cephadm daemon record for the target OSD.
    $ ceph orch ps --daemon_type osd --daemon_id 12 --refresh
    NAME    HOST        PORTS  STATUS   REFRESHED  AGE  MEM USE  MEM LIM  VERSION  IMAGE ID      CONTAINER ID
    osd.12  ceph-node2         running  6s ago     30d     2.0G        -  20.2.0   1a2b3c4d5e6f  aa11bb22cc33
  4. Review matching OSD service specs if the disk will remain in the host.
    $ ceph orch ls --service_type osd
    NAME                       PORTS  RUNNING  REFRESHED  AGE  PLACEMENT
    osd.all-available-devices         6/6      3m ago     90d  *

    If a drivegroup or all-available-devices spec still matches the removed disk after it becomes blank, cephadm can redeploy it as a new OSD. Set the matching spec unmanaged or change the selector before removal when the disk should stay unused.

  5. Schedule the target OSD for removal.
    $ ceph orch osd rm 12
    Scheduled OSD(s) for removal

    Add --zap only when the underlying device should be wiped. Use ceph orch osd rm 12 --replace instead when the goal is to replace a failed disk and keep the same OSD ID.
    Related: How to replace a failed Ceph OSD

  6. Monitor the removal queue while placement groups drain.
    $ ceph orch osd rm status
    OSD_ID  HOST        STATE     PG_COUNT  REPLACE  FORCE  STARTED_AT
    12      ceph-node2  draining  48        False    False  2026-06-29 08:20:31.123456

    Use ceph orch osd rm stop 12 if the wrong OSD was queued and the operation must be cancelled before purge.

  7. Confirm the target reaches zero placement groups before purge.
    $ ceph orch osd rm status
    OSD_ID  HOST        STATE                    PG_COUNT  REPLACE  FORCE  STARTED_AT
    12      ceph-node2  done, waiting for purge  0         False    False  2026-06-29 08:20:31.123456
  8. Check that Ceph considers the drained OSD safe to destroy.
    $ ceph osd safe-to-destroy osd.12
    OSD(s) 12 are safe to destroy without reducing data durability.

    Stop if safe-to-destroy reports that the OSD is not safe. Wait for recovery or investigate degraded placement groups before forcing removal.

  9. Verify that the removed OSD no longer appears in the CRUSH tree.
    $ ceph osd tree
    ID  CLASS  WEIGHT    TYPE NAME             STATUS  REWEIGHT  PRI-AFF
    -1         30.00000  root default
    -3         12.00000      host ceph-node1
     4    hdd   6.00000          osd.4             up   1.00000  1.00000
     5    hdd   6.00000          osd.5             up   1.00000  1.00000
    -5          6.00000      host ceph-node2
    13    hdd   6.00000          osd.13            up   1.00000  1.00000
    -7         12.00000      host ceph-node3
    20    hdd   6.00000          osd.20            up   1.00000  1.00000
    21    hdd   6.00000          osd.21            up   1.00000  1.00000
  10. Check final cluster health after the removal settles.
    $ ceph -s
      cluster:
        id:     11111111-2222-3333-4444-555555555555
        health: HEALTH_OK
    
      services:
        mon: 3 daemons, quorum ceph-admin,ceph-node1,ceph-node2 (age 2h)
        mgr: ceph-admin.abc123(active, since 2h)
        osd: 5 osds: 5 up, 5 in
    
      data:
        pools:   4 pools, 256 pgs
        objects: 3.42M objects, 8.1 TiB
        usage:   24 TiB used, 70 TiB / 94 TiB avail
        pgs:     256 active+clean

    If the final health state reports HEALTH_WARN or HEALTH_ERR, keep the removed OSD ID in the change record and troubleshoot the named health checks before retiring another disk.