孙亮亮
返回 NAS 系统

NAS 系统

NAS 硬盘健康监控实战:用 smartmontools + Scrutiny 提前发现坏盘与温度预警

2026年10月8日

用 smartctl 与 Scrutiny 提前发现坏盘预警,守护 NAS 数据安全

NAS硬盘健康SMARTScrutiny

NAS 硬盘健康监控实战:用 smartmontools + Scrutiny 提前发现坏盘与温度预警

对于把照片、视频、备份都压在 NAS 上的家庭和小企业来说,硬盘是系统的命门。RAID 能扛住一块盘掉,却扛不住两块盘在同一周先后暴毙,更扛不住"亚健康"盘悄悄把静默错误写进阵列。真正稳妥的做法是在坏盘之前就看到征兆——靠 SMART 健康监控提前几周甚至几个月发现隐患。本文以飞牛/群晖/任意 Linux NAS 为例,讲清楚怎么用 smartmontools 做命令行体检,怎么用 smartd 后台定时自检并告警,以及怎么用 Scrutiny 把多块盘的健康状态做成一块可视看板。

为什么要监控硬盘健康

机械硬盘在彻底失效前,SMART 属性里通常会出现可观测的劣化:重分配扇区(Reallocated Sector)增多、待映射扇区(Current Pending Sector)不为零、离线不可纠正错误(Offline Uncorrectable)上升、温度长期偏高导致马达老化。这些问题刚出现时读写还正常,但已经在累积坏道。等系统开始报错、阵列降级,往往已经晚了。监控的目的就是抢在这之前换盘、迁移、重建,把风险消灭在"还能正常读"的阶段。

smartmontools 基础:smartctl 常用命令

smartmontools 是 Linux 下读取 SMART 的标准工具。先确认硬盘支持 SMART 并开启:

# 列出所有磁盘
ls /dev/sd*
# 查看某块盘的整体健康(-H 是健康摘要)
smartctl -H /dev/sda
# 输出全部属性(-A 是属性表)
smartctl -A /dev/sda
# 对 SATA 盘启用 SMART 与离线自检
smartctl -s on -o on /dev/sda
# 触发一次短时自检(后台跑,几分钟)
smartctl -t short /dev/sda
# 查看自检结果
smartctl -l selftest /dev/sda

smartctl -H 返回 PASSED 不代表绝对安全,它只反映厂商预设阈值的综合判断;真正要看的是下面这些具体属性的原始值。

重点看哪些 SMART 属性

不同品牌(希捷、西数、东芝)属性号略有差异,但以下几项最关键:

  • 05 Reallocated Sector Count(重分配扇区):出厂备用扇区被用掉的数量。一旦从 0 开始增长,说明盘体已经出现物理坏道,且会持续恶化,应尽快备份并安排换盘。
  • 197 Current Pending Sector(待映射扇区):读到的数据有问题、还没决定重映射的扇区数。非 0 即代表已有不可靠数据块。
  • 198 Offline Uncorrectable(离线不可纠正错误):离线扫描都修不了的坏块,最危险。
  • 194 Temperature(温度):长期超过 45℃ 会明显加速老化,建议保持在 30–40℃ 区间。
  • 199 UDMA CRC Error:若猛涨多是 SATA 线或供电接触不良,不是盘本身问题,先换线。

经验法则:05/197/198 任一非 0,就要把这块盘列为重点关注对象,每周跟踪趋势;持续增长就立即换。

配置 smartd 后台定时自检与告警

手动敲命令不够,需要后台自动跑。编辑 /etc/smartd.conf,让 smartd 每天做短自检、异常时执行脚本:

# DEVICESCAN 自动扫描所有盘;-a 监控全部属性;-o 开离线自检
# -s 设定调度:(S/../.././02) 表示每天 02 点做 short 自检
# -M exec 触发告警脚本,可推企业微信或 Bark
DEVICESCAN -a -o on -S on -s (S/../.././02) -m admin@example.com -M exec /usr/local/bin/smart_alert.sh

smart_alert.sh 可以简单地把告警内容推到企业微信机器人或 Bark,实现手机实时提醒。改完 systemctl restart smartd 即可。

用 Scrutiny 做可视化看板

命令行适合排查,但家里十几块盘、企业几十块盘时,一块集中看板更高效。Scrutiny 是个开源的硬盘健康监控面板,底层仍调用 smartd,把每块盘的 SMART 数据拉进时序库,用颜色标出健康分:

# docker-compose.yml 核心片段
services:
  scrutiny:
    image: ghcr.io/analogj/scrutiny:latest
    ports: ["8080:8080"]
    volumes:
      - /run/smartd:/run/smartd:ro
      - ./scrutiny:/opt/scrutiny/config
    devices:
      - /dev/sda:/dev/sda
      - /dev/sdb:/dev/sdb

部署后访问 8080 端口,能看到每块盘的温度曲线、重分配扇区趋势、以及综合健康分。Scrutiny 内置了类似 Backblaze 的故障模型,会直接提示"这块盘有 N% 概率即将失败",比只看阈值直观得多。

预警后的处置流程

监控发现隐患后,按这个顺序处理:1)立刻确认重要数据已有异地备份(3-2-1);2)把该盘标记为"即将退役",不要再写入新数据;3)阵列内直接热插拔换盘并触发重建,重建期间避免大流量读写;4)换下的盘做全盘读写擦除(badblocks -w)确认是否真坏,再决定留作冷备还是报废。千万别等阵列已经降级才动手——那是把数据赌在剩下几块盘的运气上。

小结

硬盘健康监控不是可选项,而是 NAS 数据安全的"预警雷达"。命令行用 smartctl 做定期体检、smartd 做后台自检与告警,盘子多就上 Scrutiny 集中看板;判断标准盯死 05/197/198 三项是否非 0、温度是否长期偏高。把"提前换盘"变成习惯,你的阵列才真正扛得住意外。

本模块其他文章

NAS 硬盘健康监控实战:用 smartmontools + Scrutiny 提前发现坏盘与温度预警 · 孙亮亮