Blog
硬盘健康监控:smartctl 与预警脚本
盘不会挑你方便的时候坏。五月把实验室所有数据盘的 SMART 巡检串起来之后,告警终于在灾难前响过一次。这篇不用「属性百科」体例,而用几起真实(和差点真实)的坏盘与误判案例,说明看什么、怎么报、何时下手换盘。读完你应该能给自己的 cron 写出可执行的阈值,而不是再搜一遍参数表。
案例 A:待定扇区从 0 到「不能赌」
一块服役三年的 4TB SATA,某次周检:
sudo smartctl -a /dev/sde | egrep 'Reallocated|Pending|Offline_Uncorrectable|Temperature'
Current_Pending_Sector 从上周的 0 变成 8,Reallocated_Sector_Ct 仍为 0。没有报 I/O error,ZFS 也还没叫。很多人会「再观察观察」——我们没有:当天把该盘所在 mirror 的数据确认冗余健康,采购同容量盘,按池流程替换。换下来后做长测,pending 继续爬。若拖到出现 Offline_Uncorrectable 且另一侧同时咳嗽,故事会难写得多。
教训: pending 持续非零且增长,就是换盘信号,不是装饰性告警。SMART 的价值正在于它能在文件系统惨叫之前给你窗口。
案例 B:温度偶发 vs 重分配趋势
夏季机柜角落一块盘 raw 温度到过 48°C,智能告警推了 Telegram。查负载是白天 scrub 与游戏服存档备份叠在一起。加了简单导风、把 scrub 错开高峰后,稳态回到 38–40°C。此后两周 重分配计数始终为 0。
对比案例 A:温度尖峰往往可逆;重分配与待定的单调上升基本不可逆。告警规则里两者都要报,但响应优先级不同——温度先查风道、机箱布局与任务叠峰;扇区类指标直接进入换盘决策,不要和「再跑一周看看」谈判。
案例 C:USB 盒「看起来很健康」
外接 USB 3 盒里的冷备盘,smartctl -a 有时只给出残缺属性,或通电后才短暂可见。有一次盒子供电不稳,系统只见 I/O error,SMART 读到的却是「旧快照」般的正常值,差点误判为线材问题。关键数据盘改为主板 SATA 或 HBA 直通后,属性与自检日志才可信。
教训: USB 硬盘盒不一定完整传 SMART;关键池不要建在「盒子滤镜」后面。硬件 RAID 卡上的虚拟盘同样常让你看不到成员盘真相——这也是我偏向 HBA 直通加 ZFS 的原因之一。冷备盘若只能 USB,至少接受「SMART 仅供参考」,备份校验用实际恢复,而不是 PASSED 字样。
案例 D:SSD 寿命百分比骗人,也救人
一块 SATA SSD 做系统盘,Percentage Used 一类指标到 85% 时,随机写开始抖,SMART 总体仍显示 PASSED。按容量与写入模型评估后提前换盘,旧盘降级做无关实验。PASSED 只表示「还没到厂商判定失效」,不表示「你还能安心再写一年」。消费级盘的寿命估算常偏乐观,实验室若有大量日志与容器层写入,更要看趋势而不是及格线。
另有一次 NVMe 在某次断电后出现介质错误计数跳变,厂商工具与 smartctl -x 都能看到;没有冗余的系统盘场景下,当天就做了完整镜像再换盘,避免「还能开机所以再等等」。
日常命令与自动化骨架
sudo smartctl -a /dev/sdX
sudo smartctl -t short /dev/sdX
sudo smartctl -l selftest /dev/sdX
# 长测放在维护窗口:sudo smartctl -t long /dev/sdX
关注趋势而非单个 magic number(厂商属性编号不同):
- Reallocated_Sector_Ct、Current_Pending_Sector、Offline_Uncorrectable
- 温度是否长期偏高,而不是单次尖峰
- SSD 剩余寿命与累计写入量
- 错误日志与自检是否出现 FAILED
smartd 或 cron 加脚本:异常推 Telegram 或邮件(邮件务必走外部 SMTP,别绑在自家摇摇欲坠的邮件栈上)。ZFS 用户务必并行 scrub——SMART 是盘视角,scrub 是池视角,一个报介质,一个报校验,互补。巡检结果落一份简单历史(哪怕是 csv),否则你看不见「从 0 到 8」这种斜率。
换盘原则(写进备忘录那种)
- 待定或重分配持续增长 → 准备换盘,不赌运气
- 有冗余:先确认另一侧健康,再按池的 replace 流程操作
- 无冗余:先完整备份并校验,再动物理盘
- 告警二十四小时内完成「备份确认加采购或上架决策」,禁止无限观察
- 换下的盘标注故障现象与日期,勿当正常盘回流到别的机器
无聊的巡检第一次立功之后,你会感激它一直很无聊。健康监控的目标不是制造紧张感,而是让换盘发生在你还有选择的时候。
补一句采购与备件:常用容量的盘尽量同规格备一块冷备,真正换盘时少等快递两天。冷备也要偶尔通电做短测,避免「备件本是坏的」这种黑色幽默。告警通道至少两条(例如即时通讯加邮件),单一通道静音的那晚往往就是盘开始咳嗽的时候。