外观
S.M.A.R.T.:监控硬盘健康
读完这一篇,你的每块数据盘都开了监控,每周自动跑一次短自检,出现坏扇区或过热时会发邮件,并且你看得懂界面上的「好」「警告」「损坏」「未知」分别在说什么。
SMART 能做什么,不能做什么
S.M.A.R.T. 是硬盘自己记录的一组健康数据,OMV 用 smartmontools 读取并监控它。它能让你在盘彻底坏之前看到征兆,但不能保证提前预警。Backblaze 2016 年对自家硬盘的统计里,五个关键属性(5、187、188、197、198)至少有一项原始值大于零的,在已经坏掉的盘里占 76.7%,在仍正常运转的盘里只占 4.2%,说明它们确实是征兆。但同时有 23.3% 的坏盘,这五项一直都是零,坏之前没有任何预警。
所以 SMART 全绿不等于安全。它是早期预警,替代不了独立备份。
开始之前
- 配好邮件通知。 SMART 告警靠邮件发出,需要先在
系统 → 通知(System → Notification)配置 SMTP,见配置邮件通知。 - 虚拟磁盘没有 SMART。 虚拟机里的 VirtIO 虚拟盘不会出现在列表里,要在宿主机上监控物理盘。
- RAID 卡后面的盘读不到。 官方文档说明 OMV 只支持直通(HBA 模式)接入的磁盘。
操作步骤
一、启用 SMART 服务
打开 存储器 → S.M.A.R.T. → 设置(Storage → S.M.A.R.T. → Settings):
| 字段 | 默认 | 建议 |
|---|---|---|
| 已启动(Enabled) | 关 | 勾选,不勾则后面的监控和计划任务都不会运行 |
| 检查间隔时间(Check interval) | 1800 秒 | 保持默认。间隔超过 60 分钟会让轮询和自检时间对不上 |
| 电源模式(Power mode) | 新装系统通常是「永不」,以界面为准 | 改成「待机」,这样 smartd 轮询时不会把休眠的盘唤醒 |
| 温度监测:差异(Difference) | 禁用 | 可选,温度比上次报告变化达到这个值时记一条日志 |
| 温度监测:最大(Maximum) | 禁用 | 见下面的说明 |
电源模式四个选项的意思:「永不」不管盘睡没睡都检查;「睡眠」「待机」「闲置」分别表示盘处于该状态或更深状态时跳过检查。
温度「最大」怎么设。 先观察一周日常温度,再设成高出日常约 10 °C 的值(这是经验值,以你的硬盘规格书为准)。有一点容易误会:OMV 生成的 smartd 配置里,「最大」对应的只是写日志的阈值,邮件要等温度达到「最大」加 5 °C 才发。
保存后点页面顶部黄色提示条上的应用。
二、为每块盘开启监控
打开 存储器 → S.M.A.R.T. → 设备(Devices),选中一块盘,点编辑:
- 勾选监控已启用(Monitoring enabled)。
- 两个温度字段默认是「使用全局设置」,需要单独设阈值时再改。
- 保存,对每块盘重复。最后点应用。
只有开了监控的盘才会出现在仪表盘的「S.M.A.R.T. 状态」小部件和计划任务的设备列表里。已经有计划任务的盘不能关监控。
三、安排定期自检
打开 存储器 → S.M.A.R.T. → 计划任务(Scheduled Tasks),点创建:
| 字段 | 说明 |
|---|---|
| 已启动 | 默认勾选 |
| 设备 | 只列出已开启监控的盘 |
| 类型 | 短暂自检、长时自检、传输时自检、离线即使测试 |
| 小时、月内第几天、月、周内第几天 | * 表示每一个。例如每周日 02 点:小时选 02,周内第几天选 7(周日),其余保持 * |
| 标签 | 自己看的备注 |
四种自检的区别,按 smartctl 手册:短暂通常不到十分钟;长时要几十分钟到数小时,读遍整个盘面;传输时只要几分钟,用来发现运输中造成的损伤;离线即使测试只更新属性值。所有自检都在后台进行,不用卸载文件系统,但会拖慢这块盘的读写。
一个常见的安排:每周一次短暂自检,每月一次长时自检,不同盘的时间错开,避开有人用或在备份的时段。
排程的细节:
- 自检在 smartd 每次轮询之后启动,所以实际开始时间可能比设定晚几十分钟。
- 同一块盘,同一个小时内只会启动一个自检。长时和短暂撞在同一小时,长时优先。别把两种自检排在同一小时。
- 设了电源模式「待机」时,如果计划时间盘在休眠,自检不会被丢掉,盘被唤醒后会补跑最长的那一个。
表格里选中一条任务点运行(Run),会立刻对这块盘执行一次自检(相当于 smartctl --xall --test=类型),不用等排程。
怎么读结果
状态列
设备 页最后一列状态,以及仪表盘小部件里每块盘的颜色,来自 OMV 对属性的评估:
| 显示 | 含义 | 该怎么做 |
|---|---|---|
| 好(Good) | 没发现问题 | 继续观察 |
| 警告(Warning) | 有少量坏扇区:5 号或 197 号属性的原始值大于等于 1 | 看是否在增长,增长就准备换盘 |
| 损坏(Bad) | 有属性正在或曾经跌到阈值以下,有大量坏扇区,或 187 号属性原始值大于 0 | 尽快备份并换盘 |
| 未知(Unknown) | 读不到 SMART 数据;或硬盘自评估失败、NVMe 报了严重警告 | 别当成没事,点详情看原因 |
状态是 OMV 按属性判断的。想看硬盘自己给的整体评估,到详情的扩展信息页签(smartctl 的完整输出)里找 overall-health self-assessment。
详情页
选中一块盘,点显示详情,有四个页签:设备信息(型号、序号、固件、开机时间、温度)、属性、自检日志、扩展信息。
五个要盯的属性
| ID | 名称 | 含义 | 怎么看 |
|---|---|---|---|
| 5 | Reallocated_Sector_Ct | 已被重映射的扇区数 | 大于零说明盘面已有坏点;一两个且不再增长可观察,持续增长就换盘 |
| 187 | Reported_Uncorrect | 硬件 ECC 都纠正不了的读错误数 | 大于零要重视 |
| 197 | Current_Pending_Sector | 等待重映射的扇区数 | 这些扇区读不出来,要等到下次写入才会被重映射;反复出现就换盘 |
| 198 | Offline_Uncorrectable | 读写扇区时无法纠正的错误总数 | 常和 197 同时出现 |
| 199 | UDMA_CRC_Error_Count | UDMA 传输的 CRC 错误数 | 多半是数据线、接口或供电问题,不是盘本身,换线后看是否还增长 |
Backblaze 的清单里还有 188 号(Command_Timeout)。单个计数没有意义,关键是看它有没有在增长,以及增长得多快:一天内从 0 涨到 20 比五年里涨 60 更值得警惕。
OMV 默认让 smartd 监控 5 号和 197 号属性的原始值变化,198 号增加时也会告警。这个默认值可以用环境变量 OMV_SMARTMONTOOLS_DEFAULTDIRECTIVES 调整,见环境变量。
固态盘和 NVMe 没有上面的属性表。OMV 对 NVMe 改看严重警告、可用备用块、已用寿命百分比和介质错误数。固态盘的磨损与寿命,见 SSD、NVMe 与 TRIM。
检查结果
- 仪表盘上的「S.M.A.R.T. 状态」小部件里,每块被监控的盘显示为绿色(没有这个小部件的话,在仪表盘的设置里添加)。
- 在
计划任务页对一块盘点运行,几分钟后到设备页选中这块盘,点显示详情,在自检日志页签里,最新一条应该是自检完成且没有错误。 - 想直接在命令行看,在 OMV 的 shell(SSH 或本机控制台,以 root 身份)执行:
sh
smartctl -H /dev/<磁盘>
smartctl -l selftest /dev/<磁盘>-H 输出硬盘自己的整体评估,-l selftest 列出自检日志。两条都是只读的。
- 邮件是否真的能发出去,用
系统 → 通知 → 设置(System → Notification → Settings)里的测试邮件验证,见配置邮件通知。
常见问题
USB 硬盘盒读不到 SMART。 OMV 完全依赖 smartmontools 的自动识别,并且每周自动更新一次它的设备数据库。可以先在 shell 里手动更新:
sh
update-smart-drivedb仍然不行时,在 shell 里试 smartctl -d sat -a /dev/<磁盘> 看这个盒子能不能透传。OMV 界面里没有选择设备类型的入口,只有少数盒子(如 QNAP TR-004)会被自动指定类型,所以命令行能读到不代表界面也能读到。如果是新型号盒子,可以向 smartmontools 项目提交设备条目。
状态一直是「未知」。 先看详情里有没有读到属性:没有,多半是盒子或控制器不透传;有,再看扩展信息里硬盘自评估是否通过。
计划任务没有按时跑。 依次确认:设置 里的已启动勾上了;这块盘的监控已启用勾上了;改完都点过应用;这个小时里没有别的自检;盘在休眠时会推迟到唤醒后。
收到邮件但不知道严不严重。 邮件里会写明是哪个属性变了。5、197、198 号变化最值得认真对待:先确认数据已有备份,再决定是否换盘。
温度告警总是触发。 检查散热和风扇;也可能是「最大」设得太低。
参考资料
- OMV 文档:S.M.A.R.T.
- smartctl(8) 与 smartd.conf(5) 手册
- Backblaze:哪些 SMART 指标预示硬盘故障(2016,英文)
- OMV 源码:
smartinformation.inc(状态评估)、smartmontoolsSalt 状态(smartd 配置)