nuc: second dropout rules out the cable; add the pool-health watchdog

Aug 29 16:22 the enclosure dropped again despite the new cable, pool
suspended, and ZED sent nothing (suspended pools keep the vdev ONLINE;
data-class events were muted). Enclosure replacement is now the prime
candidate and a gate before the pool hosts the ks4 off-site leg.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Julien Lutran
2026-08-30 00:33:29 +02:00
co-authored by Claude Fable 5
parent 4856010cb5
commit 058833470b
+30 -7
View File
@@ -59,15 +59,20 @@ The scrub also served as a 2.5-hour soak test of the new cable:
## Fixes, in order ## Fixes, in order
1. **Cable + port** — short quality cable, straight into a rear USB-3 1. ~~**Cable + port**~~ — replaced 2026-08-28 with a short quality
port, no hub *(done 2026-08-28; survived a 2.5 h scrub with zero cable straight into a rear USB-3 port, no hub. It survived a 2.5 h
disconnects — watch for a week before concluding)*. scrub, then **dropped again on 2026-08-29 16:22** (pool suspended,
cleared 08-30 00:32). **Cable ruled out.**
2. **Disable USB autosuspend** so power management cannot drop the 2. **Disable USB autosuspend** so power management cannot drop the
device: `usbcore.autosuspend=-1` on the kernel command line, or device: `usbcore.autosuspend=-1` on the kernel command line, or
per-device `echo on > /sys/bus/usb/devices/<dev>/power/control`. per-device `echo on > /sys/bus/usb/devices/<dev>/power/control`.
3. **Replace the enclosure** if dropouts continue — JMicron bridges are 3. **Replace the enclosure — now the prime candidate.** With the cable
the usual suspect in this failure mode; an ASMedia-based enclosure ruled out and the disk SMART-clean (0 reallocated/pending/CRC), the
is the durable fix. *Deferred: watching for a few days first.* JMicron 152d:0578 bridge is what remains. An ASMedia-based
enclosure (or a direct SATA connection) is the durable fix.
⚠️ Until this is settled, this pool is not a trustworthy home for
the ks4 off-site replica leg — treat it as a gate before seeding
over FTTH.
## Alerting (why nobody noticed for 11 days) ## Alerting (why nobody noticed for 11 days)
@@ -111,10 +116,28 @@ Two dead ends worth remembering:
in the server log) — give SMTP tests ≥30 s before concluding in the server log) — give SMTP tests ≥30 s before concluding
anything. anything.
### ZED does not report everything — hence the watchdog
The 2026-08-29 suspension produced **no email**, although the mail path
demonstrably worked (the scrub-finish notification arrived the evening
before). Two reasons:
- a suspended pool keeps its vdev marked **ONLINE**, so
`statechange-notify.sh` never fires;
- the `data`-class events ZED *did* raise were muted because
`ZED_NOTIFY_DATA` was unset (now `=1`).
Fixed 2026-08-30 by adding
[`zpool-health.sh`](https://git.lutran.fr/julien/scripts/src/branch/main/zpool-health.sh),
run every 15 min from `/etc/cron.d/zpool-health`. It mails only on
`healthy <-> problem` **transitions**, so it is silent in normal
operation and cannot spam; `-t` sends a test. Worth deploying on ks4
too — its `data` pool is single-disk and has the same blind spot.
Verify: Verify:
```sh ```sh
echo "test $(date)" | mail -s "nuc alert test" julien@lutran.fr /root/scripts/zpool-health.sh -m julien@lutran.fr -t
tail -2 /var/log/msmtp.log # expect smtpstatus=250 tail -2 /var/log/msmtp.log # expect smtpstatus=250
``` ```