Skip to main content
RunBook Academy

CephLIII · Cluster HealthCluster Health

A reference for the health checks you will actually see

Intermediate⏱ ~18 minceph

What you'll learn

  • Recognise the commonly-encountered health checks
  • Know the first command for each
  • Distinguish similar-sounding checks
  • Build a runbook from the reference

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

There are many possible health checks and a much shorter list that actually appears. Having the first command for each in one place is what makes the first minute of a response productive.

OSD and device

CheckMeansFirst command
OSD_DOWNan OSD is not respondingceph osd tree | grep down
OSD_HOST_DOWNevery OSD on a host is downcheck the host
OSD_NEARFULLabove nearfull_ratioceph osd df | sort -k17 -rn
OSD_BACKFILLFULLrecovery cannot target itas above
OSD_FULLwrites refusedas above, urgently
OSD_FLAGSa flag such as noout is setceph osd dump | grep flags
DEVICE_HEALTHfailure predictedceph device get-health-metrics
DEVICE_HEALTH_TOOMANYtoo many predicted to replace safelycapacity review

Placement group

CheckMeansFirst command
PG_AVAILABILITYPGs not serving I/Oceph pg dump_stuck inactive
PG_DEGRADEDreduced redundancyceph health detail
PG_BACKFILL_FULLrecovery blocked by capacityceph osd df
PG_DAMAGEDinconsistency foundrados list-inconsistent-pg
PG_RECOVERY_FULLrecovery blockedceph osd df
PG_NOT_SCRUBBEDscrub overdueceph pg dump | grep scrub
PG_NOT_DEEP_SCRUBBEDdeep scrub overdueas above
PG_SLOW_SNAP_TRIMMINGsnapshot removal laggingceph pg dump

Monitor and manager

CheckMeansFirst command
MON_DOWNa monitor is downceph mon stat
MON_CLOCK_SKEWclocks disagreeceph time-sync-status
MON_DISK_LOWmonitor store spacedf -h /var/lib/ceph
MON_DISK_CRITcritically lowas above, urgently
MGR_DOWNno active managerceph mgr stat
MGR_MODULE_ERRORa module failedceph crash ls

Pool and capacity

CheckMeansFirst command
POOL_NEARFULLpool approaching quota or capacityceph df
POOL_FULLpool at its limitceph df detail
POOL_TOO_FEW_PGSbelow the autoscaler targetceph osd pool autoscale-status
POOL_TOO_MANY_PGSabove itas above
TOO_MANY_PGSper-OSD PG count highceph osd df
POOL_APP_NOT_ENABLEDno application tagceph osd pool application enable

CephFS

CheckMeansFirst command
FS_DEGRADEDa rank has no MDSceph fs status
MDS_ALL_DOWNno MDS at allceph orch ps --daemon-type mds
MDS_INSUFFICIENT_STANDBYfewer standbys than wantedceph fs status
MDS_CLIENT_RECALLa client is not releasing capsceph tell mds.a client ls
MDS_CACHE_OVERSIZEDcache above its limitceph daemon mds.a cache status
MDS_SLOW_REQUESTrequests blockedceph daemon mds.a dump_blocked_ops

Similar-sounding checks worth distinguishing

PairDifference
OSD_NEARFULL / OSD_BACKFILLFULL / OSD_FULLthree thresholds: warn, recovery blocked, writes refused
PG_NOT_SCRUBBED / PG_NOT_DEEP_SCRUBBEDshallow compares metadata, deep compares contents
POOL_TOO_MANY_PGS / TOO_MANY_PGSper pool versus per OSD
MON_DISK_LOW / MON_DISK_CRITwarning versus imminent monitor failure

Quiz

Knowledge check · 4 questions

  1. Q1. What is the difference between POOL_TOO_MANY_PGS and TOO_MANY_PGS?

  2. Q2. The three OSD capacity thresholds each protect a different capability.

  3. Q3. Build an incident runbook for a cluster.

    A team wants to reduce the time spent recalling what each health check means during incidents. Their cluster has produced about a dozen distinct checks over two years.

  4. Q4. What is the difference between PG_NOT_SCRUBBED and PG_NOT_DEEP_SCRUBBED?

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

Production discipline

Build a one-page runbook from the checks your cluster has actually produced, with the first command and expected response for each; the list is short and stable and a lookup beats recall at 03:00. Distinguish the similar-sounding pairs explicitly, since choosing the wrong response for the wrong threshold is a real failure mode.

Cross-course references

  • Kubernetes: a runbook per alert is the standard practice for the same reason
  • Linux: documented first-response commands per condition is general on-call discipline