v0.95.0: SMART coverage — union-path drives + LVM/dm root + device model

Implements SPIKE-smart-coverage-2026-07-25 fixes B+A (additive; MinAgent unchanged).
Fix B: storage.SmartReader.SMARTForBacking wired into the /disks union path (localapi
Smart seam) so registry/USB drives get a real SMART read (watchdog Known stays
enrich-free). Fix A: smartDeviceFor resolves dm/LVM to the whole disk via
/sys/block/<dm>/slaves (recursive; skips >1-disk); the builtin local dir on the LVM
root gets a SMART-only device from its containing filesystem (never touches
backing/durable_id). SmartSummary.ModelName captured from smartctl. Fix C (-d sat)
stays rejected. Tests + red-proofs (dm multi-disk skip, enrich smartHint, union
routing); Known-path-never-SMARTs asserted.
This commit is contained in:
2026-07-25 08:21:45 +02:00
parent 643899c191
commit ed97232598
13 changed files with 579 additions and 74 deletions
+5
View File
@@ -316,6 +316,11 @@ type ThinPoolFill struct {
type SmartSummary struct {
Health string `json:"health"`
// ModelName is smartctl's own device model (v0.95.0), captured from the JSON already parsed, so
// the UI can show a human label ("TOSHIBA MQ04ABF100") instead of a raw UUID. omitempty +
// pointer: absent on an old agent or a device that reports no model.
ModelName *string `json:"model_name,omitempty"`
TemperatureC *int `json:"temperature_c"`
PowerOnHours *int `json:"power_on_hours"`