Description
snapraidd tracks norm-value changes for all attributes smartctl reports as type: prefail and emits a warning report on any degradation. On Seagate drives this causes recurring false "degraded" warnings for attribute 1 (Raw_Read_Error_Rate) and attribute 7 (Seek_Error_Rate) even though the drives have zero real read errors.
Observed behavior (ST8000VN004, ~45k power-on hours):
Disk data2:
Raw_Read_Error_Rate
norm degraded to 71 (-29)
worst 64 thresh 44
The raw value on Seagate drives is vendor-packed as errors << 32 | sectors_read - smartctl renders it as 0/113191894: 0 actual errors, 113M sectors read. Seagate derives the normalized value from that ratio, so it drifts with read workload and bounces up and down over the drive's life. WD drives report plain counters, so their norms are stable - this is vendor-specific encoding, not degradation.
Relevant code
daemon/parser.c (~line 1201): norm history is tracked for all prefail-typed attributes; attr 1/7 have no entry in the SMART_ENTRIES table in daemon/smart.c, so there is no kind/format awareness for their raw layout.
- Precedent already exists in-repo: the attr
188 Command_Timeout entries carry the comment "adjusted from 48 to 16 to avoid Seagate packed values" (smartmontools ticket 551). Same class of problem, solved for that one attribute only.
sys_smartignore suppresses the notification but still prints the change tagged (ignored) in reports, and doesn't address the underlying misinterpretation.
Proposed fix (one or both):
- Add vendor-aware handling for attrs 1/7: split the 48-bit raw as 16-bit error count (upper) + 32-bit sector count (lower), track the error component as a COUNT attribute, and exclude workload-derived norm drift for these attributes from warning reports. smartmontools'
drivedb.h -v formats are the reference implementation.
- Alternatively/additionally: let sys_smartignore fully suppress an ignored attribute from report output (currently it only tags the line (ignored)), giving users a config-level escape hatch without code changes.
Health is not affected in my case (norm 71 vs threshold 44, all real failure counters at 0), but the daily reports train the eye to dismiss warnings - which is the opposite of what a monitor should do.
Description
snapraidd tracks norm-value changes for all attributes smartctl reports as type: prefail and emits a warning report on any degradation. On Seagate drives this causes recurring false "degraded" warnings for attribute 1 (Raw_Read_Error_Rate) and attribute 7 (Seek_Error_Rate) even though the drives have zero real read errors.
Observed behavior (ST8000VN004, ~45k power-on hours):
The raw value on Seagate drives is vendor-packed as
errors << 32 | sectors_read- smartctl renders it as0/113191894: 0 actual errors, 113M sectors read. Seagate derives the normalized value from that ratio, so it drifts with read workload and bounces up and down over the drive's life. WD drives report plain counters, so their norms are stable - this is vendor-specific encoding, not degradation.Relevant code
daemon/parser.c(~line 1201): norm history is tracked for all prefail-typed attributes; attr 1/7 have no entry in the SMART_ENTRIES table in daemon/smart.c, so there is no kind/format awareness for their raw layout.188 Command_Timeoutentries carry the comment "adjusted from 48 to 16 to avoid Seagate packed values" (smartmontools ticket 551). Same class of problem, solved for that one attribute only.sys_smartignoresuppresses the notification but still prints the change tagged (ignored) in reports, and doesn't address the underlying misinterpretation.Proposed fix (one or both):
drivedb.h -vformats are the reference implementation.Health is not affected in my case (norm 71 vs threshold 44, all real failure counters at 0), but the daily reports train the eye to dismiss warnings - which is the opposite of what a monitor should do.