Skip to content
Oznog

2.2 · monitoring and alerting · as-is

A drive can be physically gone for nine minutes and every health check stays green

date
20260907
what happened
On 20260907 a healthy hard disk was deliberately pulled from a running Ceph cluster, with no drain, to time how long the cluster would take to notice. For at least nine minutes every health check reported the storage daemon up and healthy.
what it cost
A demonstrated blind window measured in days, because the same mechanism had let a different disk on a different host sit dead for 38 hours three days earlier.
what changed
A hardware-level check was added that resolves each storage daemon's data device back to the physical device node and asserts it still exists, alongside enclosure bay-presence and SAS link error counters. None of it needs any disk I/O to fire.
the check now
For every storage daemon on every Ceph host, the data device is resolved through its logical volume to the backing physical device; the enclosure slot must not report itself as empty; SAS link error counters must be zero.

The cluster is built the way most performance-minded Ceph clusters are built. Each storage daemon keeps its bulk object data on a spinning disk and its metadata database on a fast solid-state device. That split has a consequence nobody had connected to the earlier 38-hour blind disk. The routine health signals a storage daemon emits, its own up or down state, its heartbeat with its peers, the completion of a shallow scrub, are all satisfied by the metadata. Pull the platter out and the metadata is untouched. The daemon carries on reporting itself healthy, and a shallow scrub of the affected placement groups completes cleanly, because a shallow scrub validates metadata rather than object data.

The team proved this rather than reasoning about it. They pulled a healthy disk out of a live cluster and timed the silence. Nine minutes in, every check was still green. The fix does not ask the storage software for its opinion at all. It follows the daemon’s data device symlink down through the logical volume to the physical device node and checks that the node still exists, reads the drive enclosure’s own slot-presence status, and reads the SAS link error counters, none of which requires issuing a single read to the disk.

Any system that separates data from metadata for speed has this trap, and it is not limited to Ceph: database engines with separate write-ahead logs, caching tiers, and tiered filesystems all get to look healthy from the fast device while the slow one is missing. The durable fix is a check written underneath the software’s own reporting, at the layer where the hardware either exists or does not.

Source: node0 lessons v0.1, lesson 2.2. Sanitized: checklist v0.1, 20260921; host paths genericised; voice pass 20260921. Part of oznog.com/node0.