Skip to main content
RunBook Academy

CephLV · OSD StatesOSD States

The four OSD states and what each means

Intermediate⏱ ~16 minceph

What you'll learn

  • Interpret each of the four state combinations
  • Identify the normal transitions between them
  • Recognise an unexpected combination
  • Choose the correct response for each

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

Two independent axes give four states, and each is a different situation. Reading both flags rather than one is what distinguishes “a disk failed” from “someone is draining this OSD”.

The four states

StateMeaningData on itResponse
up / innormal operationservingnone
up / outrunning, excluded from placementbeing drainedcomplete the drain or bring it in
down / inabsent, still in placementinaccessible, PGs degradedrestore or let the interval expire
down / outabsent and excludedirrelevantremove, or restore and bring in
ceph osd stat
# 120 osds: 118 up, 117 in

ceph osd tree
ceph osd dump | grep '^osd' | awk '{print $1, $2, $3, $4}'

up / out

The OSD is running and CRUSH ignores it. Its data is being copied elsewhere, and once that completes the OSD holds nothing that is needed.

This is the state during a planned drain:

ceph osd out 13
ceph -s                    # misplaced objects falling
# once clean, the OSD is empty and can be removed

An OSD sitting in up/out indefinitely is either a drain someone forgot to finish or an OSD marked out during an incident and never brought back.

down / in

The OSD is absent and CRUSH still places on it. PGs are undersized and degraded, and nothing is moving.

This is the state immediately after a failure and before the down-out interval expires. It is also the state a noout flag holds an OSD in deliberately.

down / out

The OSD is absent and excluded. Its data has been redistributed and the cluster is repairing or repaired.

ceph osd tree | grep -E 'down'
ceph osd dump | grep '^osd' | grep 'down' | grep 'out'

An OSD here can be removed cleanly, or restored and brought back in — the latter costing a rebalance.

The normal transitions

graph LR
    A[up / in] -->|daemon fails| B[down / in]
    B -->|down-out interval| C[down / out]
    B -->|daemon restored| A
    A -->|ceph osd out| D[up / out]
    D -->|drain completes, daemon stopped| C
    D -->|ceph osd in| A
    C -->|purge| E[removed]

Unexpected combinations

ObservationLikely explanation
up/out for daysforgotten drain
down/in for hoursnoout is set
Many down/outa host or rack was lost and processed
up/in with zero PGsreweight 0, or a CRUSH rule that excludes it

That last one is worth knowing: an OSD can be up, in, and holding nothing because its reweight is zero or its CRUSH rule places nothing there.

Quiz

Knowledge check · 4 questions

  1. Q1. An OSD has been in the up/out state for three days. What does this indicate?

  2. Q2. An OSD that is up and in necessarily holds data.

  3. Q3. Audit unexpected OSD states across a cluster.

    `ceph osd stat` reports `200 osds: 196 up, 193 in`. The team expects all 200 to be up and in. Nobody recalls any planned maintenance.

  4. Q4. What does the state down/in mean about data movement?

Passing score: 75%. Answers are checked in this browser.

Production discipline

Read both the up and in counts and resolve them to per-OSD combinations; the aggregate numbers conceal whether a discrepancy is one failure or several distinct situations. Audit for OSDs persisting in up/out — forgotten drains are common and leave capacity unused.

Cross-course references

  • Kubernetes: node conditions and taints are similarly independent axes
  • Linux: distinguishing a stopped service from a disabled one is the same two-flag reading