Overview
Every WolfStack node continuously watches the SMART health of its physical disks and raises an alert when a drive starts to fail — reallocated sectors, pending sectors, failed self-tests, or a disk that has simply stopped answering. The drive-health card lives on each node’s Storage page, next to the disk layout, and carries a Lifespan graph showing where every drive sits on the 0–6 year failure curve.
Two things make this different from a plain smartctl cron job: it is standby-aware, so monitoring a spun-down array does not spin it back up; and self-tests are paced by each drive’s own age rather than a fixed calendar interval.
Spun-down disks are monitored too
This is the part most monitoring setups get wrong, and it is worth being explicit about because WolfStack got it wrong until v25.8.0.
If a rotational disk is spun down when the health watcher runs, a naive implementation skips it. On a host that spins its disks down by default — which is most NAS and homelab builds — that means the drive is never evaluated. It can accumulate reallocated and pending sectors across its entire service life and fail with no alert ever raised, while the dashboard cheerfully reports it healthy.
WolfStack now handles standby explicitly:
- Routine polls never wake a disk. A sleeping drive stays asleep, which is the whole point of spinning it down.
- One guard-free read after 24 hours. If a disk has gone a full day with no successful reading, WolfStack takes a single read that is permitted to wake it. One spin-up per day is a price worth paying to know whether a drive is dying.
- Seven days unreadable raises a warning. A drive nobody can read is not a healthy drive — “no data” must never be displayed as “healthy”.
- The read log is persisted, so those thresholds survive an agent restart rather than resetting to zero every time the service bounces.
The lifespan graph & the bathtub curve
Disk failure rates follow a bathtub curve: elevated early (manufacturing defects surface fast), low and flat through the middle of life, then climbing again as the mechanics wear out. The Lifespan graph places each drive on that curve using its SMART power-on hours, so you can see at a glance which disks are young, which are in their reliable years, and which are old enough to deserve suspicion.
| Life stage | Power-on hours | Roughly | Why it matters |
|---|---|---|---|
| Early life | under 8,760 h | first year | Infant mortality. Manufacturing defects show up early, so test often. |
| Steady state | 8,760 – 35,040 h | 1 to 4 years | The flat bottom of the curve. Failure is least likely here. |
| Wear-out | 35,040 h and up | 4 years+ | Failure probability climbs again. Time to test hard and plan replacement. |
The three zones use WolfStack’s reserved status colours, each named in a legend and mirrored by a text badge on the drive’s row — the stage is never indicated by colour alone, so the graph is readable for colour-blind operators and in both light and dark themes.
Scheduled SMART self-tests
A SMART self-test asks the drive to check itself — the deepest diagnostic available short of reading every sector back yourself. WolfStack schedules them automatically, hourly off the same loop that takes health readings, reusing readings it has already taken.
The cadence follows the drive’s own age, not the calendar. Testing a brand-new drive and a six-year-old drive on the same 30-day timer tests the new one too little and the old one too rarely:
| Stage | Self-test cadence | Test type |
|---|---|---|
| Early life | every 7 days | Short |
| Steady state | every 30 days | Short |
| Wear-out | every 7 days | Short, with every 4th escalated to an extended full-surface scan (roughly monthly) |
A short test only samples the drive. The extended test scans the full surface — the deeper diagnostic, spent precisely when failure probability is climbing again.
Crucially, the scheduler will not wake a sleeping disk to test it. Self-tests are on by default, which is safe exactly because waking is off by default: on a spun-down array, only disks that are already spinning get tested, so enabling the feature costs a sleeping array nothing. If you would rather guarantee every disk is tested on schedule, opt into waking.
Configuration
Settings live on the Storage page alongside the drive-health card, with a run-now action per disk when you want an immediate test.
| Option | Default | What it does |
|---|---|---|
enabled | on | Master switch for scheduled self-tests. |
allow_wake | off | Permit spinning a sleeping disk up in order to test it. Off by default — waking a whole array on a timer is exactly what operators spin their disks down to avoid. |
interval_days | 0 | Fixed cadence in days. 0 derives the cadence from drive age, as above. |
deep_test_in_wear_out | on | Escalate every 4th test to an extended full-surface scan once a drive reaches wear-out. |
exclude | empty | Devices never to test — e.g. drives behind enclosures that do not implement self-test and would just log a refusal every cycle. |
API
Per-disk self-test state, the schedule configuration, and the run-now action are all exposed over the REST API:
curl -s -H "X-API-Key: $WOLFSTACK_KEY" \
https://your-node:8553/api/array/smart-tests
Where alerts surface
Drive-health findings do not stay on the Storage page. A failing or unreadable disk raises an alert through the normal channels, so it reaches you the same way every other problem does:
- Predictive Inbox — the finding appears with the context needed to act on it.
- Alerting — email and webhook notification on threshold breach.
- Storage — the drive-health card and Lifespan graph, per node.
- Storage Array — pool and array-level view across the cluster.
Frequently Asked Questions
Does WolfStack spin up my disks to check their health?
Not during routine polling. Normal health polls never wake a sleeping disk. WolfStack takes one wake-permitted reading only when a disk has gone 24 hours with no successful read, because a drive nobody has read for a day is a drive whose health is genuinely unknown.
Will scheduled self-tests wake my spun-down array?
No, not unless you ask for it. Self-tests are on by default but waking is off by default, so only disks that are already spinning get tested. You can opt into waking if you would rather every disk be tested on schedule.
What does the Lifespan graph actually measure?
The drive’s own SMART power-on hours, mapped onto the failure bathtub curve with boundaries at one year (8,760 hours) and four years (35,040 hours). It is a position on a reliability curve, not a prediction of a specific failure date.
Why does an old drive get tested more often than a middle-aged one?
Because failure probability is not linear. It is elevated in the first year, lowest through the middle years, and climbs again at wear-out. Testing cadence follows that shape instead of ignoring it.
What happens if a disk cannot be read at all?
After seven days with no successful reading, WolfStack raises a warning. Missing data is reported as missing, never as healthy.
Do I need a paid tier for drive health monitoring?
Health monitoring and alerting on drive failure are part of the platform. See pricing for what each tier adds around it, and Alerting for notification routing.