Skip to main content
RunBook Academy

CephXIX · PG StatesPG States

Inactive PGs — the most urgent state in Ceph

Expert⏱ ~17 minceph

What you'll learn

  • Identify every state that renders a PG inactive
  • Diagnose the cause of an inactive PG
  • Apply the correct remedy for each cause
  • Understand what marking an OSD lost does and when it is justified

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

Every other PG state means the cluster is serving while doing something. Inactive means it is not serving, and the users of those PGs are down.

The inactive states

StateCause
peeringagreeing on history; brief normally
incompleteinsufficient history to establish authoritative content
downan OSD holding required data is unavailable
staleno report from the primary — may or may not be serving
unknownmonitors have no information, usually at startup
ceph pg dump_stuck inactive
ceph health detail | grep -E 'inactive|incomplete|down|stale'
ceph pg stat

Diagnosing each

peering — see the peering lesson. Query and find the blocker.

down — the PG needs an OSD that is currently unavailable:

# PGID: a stuck PG id from the dump_stuck output above
PGID=3.1f

ceph pg "$PGID" query | jq '.recovery_state[] | select(.name | contains("Down"))'
ceph pg "$PGID" query | jq '.down_osds_we_would_probe'

The remedy is to bring that OSD back. It usually holds the only copy of recent writes.

incomplete — the surviving OSDs cannot establish what the PG should contain, typically because OSDs holding recent history are gone:

# PGID: a stuck PG id from the dump_stuck output above
PGID=3.1f

ceph pg "$PGID" query | jq '.recovery_state'

stale — the monitors have not heard from the primary. Often the PG is fine and the reporting path is broken.

The response sequence

  1. Identify the scope. How many PGs, which pools, which clients are affected.
  2. Determine the state. Each inactive state has a different cause.
  3. Find the missing OSDs. down_osds_we_would_probe names them.
  4. Restore them. A host that will not boot, a drive in a failed enclosure, an OSD that will not start — each has recovery options short of accepting loss.
  5. Only then consider ceph osd lost, with the hardware confirmed unrecoverable.

After resolution

Once PGs return to active, establish why the redundancy was insufficient — size, min_size, failure domains, or overlapping maintenance — because inactive PGs mean the design did not cover what happened.

Quiz

Knowledge check · 4 questions

  1. Q1. What does an incomplete PG state indicate about the data?

  2. Q2. ceph osd lost is a reversible operation that can be undone if the OSD is later recovered.

  3. Q3. Six PGs are incomplete after a host loss. The host will not boot but its drives appear intact. Plan recovery.

    A host with 8 OSDs suffered a mainboard failure. Six PGs across two pools are incomplete; the rest recovered normally. The drives are physically undamaged and can be moved to another chassis. Two applications are down. Management is asking whether marking the OSDs lost would restore service faster.

  4. Q4. List the states that make a PG inactive and give the first diagnostic step for each.

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

Production discipline

Work inactive PGs first in any incident, because they are the only state where clients are actually blocked. Read ceph pg <pgid> query and down_osds_we_would_probe to name the OSDs needed, then exhaust every route to making those OSDs readable — repairing a host, moving a drive, exporting a PG with ceph-objectstore-tool. Reserve ceph osd lost for hardware confirmed unrecoverable, and be able to state which objects will lose recent writes before running it.

Cross-course references

  • Ceph: Part CXVIII (Data Integrity Incident) for the full runbook.
  • Ceph: Part XXII (PG Investigation) for reading pg query.
  • Ceph: Part CXIV (Complete Storage Node Loss) for host-level recovery.