外观
硬盘故障预警
硬盘迟早会坏,区别只在于你是提前知道,还是数据读不出来的时候才知道。OMV 有好几条互相独立的告警渠道,但它们要逐项打开才有效。读完这一篇,你能确认每一条渠道都已开启并测试过,也知道收到告警之后该按什么顺序处理。
开始之前
- 邮件通知已经配置好并能收到测试邮件,见 配置邮件通知。下面所有告警都通过邮件发出,也可以再转发到手机,见 通知扩展:Telegram 等第三方通知。
- 命令在 OMV 的 shell(SSH 或本机控制台,root 身份)里执行。
预警不是预测
S.M.A.R.T. 和其他告警能提前发现一部分故障,但不少硬盘会毫无征兆地突然死亡。冗余(RAID、Btrfs 镜像)解决的是坏一块盘还能继续用,不能替代备份。 告警是最后一道提醒,不是安全保证,数据的保险只能是独立的备份,见 备份策略:冗余不是备份。
告警渠道一览
OMV 对硬盘问题的告警来自下面几条独立的渠道:
| 渠道 | 监测什么 | 在哪里打开 |
|---|---|---|
| S.M.A.R.T. | 硬盘自检的健康结论、关键属性变化、自检失败、温度 | 存储器 → S.M.A.R.T.(Storage → S.M.A.R.T.),加上事件里的 S.M.A.R.T. |
| 软 RAID(md) | 阵列降级、成员盘故障、备用盘缺失、设备消失 | 事件里的 RAID 管理 (软 RAID),英文是 Multiple Device (Software RAID),以界面显示为准 |
| Btrfs 设备错误 | Btrfs 记录的读写、校验错误计数 | 事件里的杂项(Miscellaneous) |
| 块设备 I/O 错误 | 内核日志里的 I/O error, dev ... sector | 事件里的杂项,8.5.10 起 |
| 文件系统 | 使用率超过阈值、文件系统掉线 | 事件里的监测 - 文件系统(Monitoring - File systems) |
事件开关在 系统 → 通知 → 事件(System → Notification → Events),页面上是一组复选框。全新安装的数据库里这些事件默认都是启用的,但你的系统以界面上显示的为准。
逐项配置与确认
S.M.A.R.T.
S.M.A.R.T. 监测由三层开关组成,缺一不可:
存储器 → S.M.A.R.T. → 设置(Storage → S.M.A.R.T. → Settings)里勾选已启动(Enabled)。同一页还有检查间隔时间(Check interval)、电源模式(Power mode)和温度监测的差异(Difference)、最大(Maximum)。电源模式建议选待机(Standby),避免检查把已休眠的硬盘叫醒,见 低功耗与静音。存储器 → S.M.A.R.T. → 设备(Devices)里,对每块要监控的盘,编辑并勾选监控已启用(Monitoring enabled)。列表里的已监听(Monitored)一栏会显示结果。系统 → 通知 → 事件里勾选 S.M.A.R.T.。
OMV 生成的 smartd 配置里,所有被监控的盘共用一组默认指令,核心是:
| 指令 | 含义 |
|---|---|
-a | ATA 硬盘的默认集合:检查健康状态、错误日志和自检日志等 |
-o on、-S on | 启用自动离线测试和属性自动保存 |
-R 5!、-R 197! | 重映射扇区(5)和待处理扇区(197)的原始值一旦变化,就按严重级别记录并发邮件 |
-U 198+ | 离线无法修复的扇区数(198)增加时报告 |
-W <差异>,<提示>,<严重> | 温度变化、达到提示值、达到严重值时报告,数值来自界面里的温度设置,严重值比最大值高 5 |
-n <电源模式>,q | 硬盘处于所选的低功耗状态时跳过本次检查 |
-m <主邮箱>[,<备用邮箱>] -M exec …/smartd-runner | 检测到故障时发邮件,只在邮件通知和 S.M.A.R.T. 事件都启用时才有 |
自检计划在 存储器 → S.M.A.R.T. → 计划任务(Scheduled Tasks)里设置,类型有短暂自检、长时自检、传输时自检和离线即使测试。常见做法是每周一次短暂自检、每月一次长时自检,并让不同硬盘错开时间。自检本身也会占用磁盘,避开业务高峰。
确认配置已经生成,下面是只读命令:
sh
grep -c -- "-M exec" /etc/smartd.conf # 大于 0 说明邮件告警已写入 smartd 配置
smartctl -H /dev/<磁盘> # 读取这块盘的健康结论软 RAID
软 RAID 的监控由 mdmonitor 服务完成。邮件通知和 RAID 事件都启用时,OMV 在 /etc/mdadm/mdadm.conf 里写入主邮箱,由 mdadm 发邮件;没有启用时,事件只会通过 logger 记到系统日志,标签是 mdmonitor。按 mdadm 手册,邮件只为这几类事件发送:成员盘故障(Fail)、备用盘故障(FailSpare)、阵列降级(DegradedArray)、备用盘缺失(SparesMissing)和测试消息(TestMessage)。重建开始、重建完成这类事件不发邮件,只出现在日志里。
这是少数可以安全地实测的渠道,让 mdadm 对每个阵列发一封测试告警,不会改动阵列:
sh
mdadm --monitor --scan --oneshot --test收到邮件说明这条通路是通的。
md 插件在 存储器 → RAID 管理(Storage → Multiple Device)的维护(Maintenance)菜单里提供了检查(Check)和修复(Repair),对有冗余的级别可用(8.1.5 起)。8.1.7 起这个插件会禁用 mdadm 自带的 systemd 定时器,具体哪些定时检查受影响,用 systemctl list-timers 看你的系统。没有定期检查的话,建议自己安排,让阵列有机会在平时发现坏扇区。
8.5.9 修了一类误报
Debian 13 的 mdadm 有一个回归,会在每日监控时产生虚假的 DeviceDisappeared 和 NewArray 事件。OMV 8.5.9 加入了一条 udev 规则绕过它。OMV 的更新记录把它们称为误报。按 mdadm 手册,邮件只为 Fail 等五类事件发送,这两类事件不在其中,所以你更可能在系统日志里看到它们,具体表现以你的系统为准。如果遇到,先确认 OMV 已经更新到 8.5.9 或更新的版本。
Btrfs 设备错误
系统每天运行一次 Btrfs 错误检查,对所有已挂载的 Btrfs 文件系统执行 btrfs device stats --check --reset。有错误计数时,如果邮件通知和杂项事件都启用了,会发一封邮件,主题是 Errors were detected on the file system mounted at <挂载点> [UUID=…],正文是各设备的错误计数。注意 --reset 会在读取后清零计数,所以邮件里的数字是上次检查之后新增的。
每月(或每周)的 scrub 完成后,同样会把报告发给 root。检查和 scrub 的开关与周期用环境变量调整,见 环境变量:调整界面里没有的选项。Btrfs 的维护见 Btrfs 维护:scrub、balance 与换盘。
块设备 I/O 错误(8.5.10 起)
OMV 8.5.10 起会监控系统日志里的块设备 I/O 错误。杂项事件启用时,OMV 在 rsyslog 里加入一条规则:匹配到内核日志里形如 I/O error, dev sdb, sector … 的消息,就给 root 发一封邮件:
- 主题:
I/O error detected on device '<设备>' - 正文:设备名、发生时间、原始日志,以及一句「请立即检查硬盘健康状况,避免数据丢失」。
- 限频:同一条规则每 300 秒最多发一封,所以硬盘持续出错时不会刷屏。
这条规则只有在杂项事件启用的情况下才会生成。更改事件设置后,要点击应用让它生效。
文件系统容量与掉线
监测 - 文件系统 事件启用后,OMV 会对每个已挂载文件系统检查:
- 使用率:超过阈值并持续一段时间就告警。数据盘的阈值在
存储器 → 文件系统(Storage → File Systems)里编辑文件系统,用用量警告阈值(Usage Warning Threshold)设置,默认 85%,可以选「禁用」;系统盘的阈值默认也是 85%,用环境变量调整。 - 是否还挂载着:发现文件系统不在了,会先告警,持续两个周期后还会尝试自动挂载。
收到告警之后
无论哪一类告警,处理顺序都是确认、保全、更换:
- 确认:是哪块盘,用型号和序列号确认,不要只看
/dev/sdX。症状是一次性的还是持续的。 - 保全:先确认有可用的备份。没有的话,先把最重要的数据备份出来,再做别的。
- 更换:有冗余的系统按换盘流程操作,单盘系统准备新盘并复制数据。
下面是常见告警的具体判断:
| 告警 | 先做什么 | 判断 |
|---|---|---|
| S.M.A.R.T. 自检的健康结论失败 | 立刻备份,然后换盘 | 硬盘自己认为快坏了,不要继续使用 |
| 待处理扇区(197)、离线无法修复扇区(198)出现或增加 | 备份;运行一次长时自检;有冗余时让阵列做一次检查或 scrub | 这些扇区上的数据已经读不出来。数量持续增长就应该换盘 |
| 重映射扇区(5)的原始值变化 | 记录数值,一周后再看 | 个别新增可以观察,持续增长就换盘 |
| 温度告警 | 检查风扇、风道、机箱积灰 | 长期高温会缩短寿命,见 温度监控与风扇控制 |
| 软 RAID 降级 | cat /proc/mdstat 看状态,备份,换盘(用 RAID 管理 里的恢复把新盘加进阵列) | 降级期间失去冗余,不要重启或随意改动,见 软件 RAID 维护:换盘、扩容与重建、RAID 降级 |
| Btrfs 设备错误 | btrfs device stats <挂载点>,然后做 scrub | 有校验错误说明数据已经出现损坏,有冗余时 scrub 可以修复 |
| I/O error | 看内核日志,区分线缆问题和硬盘问题 | 见下面 |
| 使用率超过阈值 | 清理或扩容 | 文件系统接近写满时性能会下降,Btrfs 和 ZFS 尤其明显 |
| 文件系统掉线 | 看硬盘是否还在,线缆、供电 | 见 磁盘或文件系统不见了 |
处理 I/O error
I/O error 不一定是硬盘坏了,SATA 线松动、供电不稳、USB 硬盘盒掉线都会触发。先看内核日志,找出是同一块盘还是多块盘一起出错:
sh
journalctl -k -g "I/O error" # 内核日志里的 I/O 错误
dmesg -T | grep -E "I/O error|ata[0-9]+" # 带时间的内核消息,包括 SATA 链路重置
smartctl -a /dev/<磁盘> # 这块盘的完整 S.M.A.R.T. 信息链路重置(ata… link reset)的记录很多、但 S.M.A.R.T. 属性正常,多半是线缆或接口的问题,先重新插拔、换线再观察;错误集中在一块盘并且伴随待处理扇区增长,才是盘本身的问题。USB 硬盘盒读不到 S.M.A.R.T. 是常见情况,见 S.M.A.R.T.:监控硬盘健康。
检查结果
对照下面的清单,确认每条渠道都是通的:
- 邮件通知的测试邮件能收到。
系统 → 通知 → 事件里 S.M.A.R.T.、软 RAID、监测 - 文件系统、杂项都已勾选,并且点击过应用。存储器 → S.M.A.R.T. → 设置已启动,每块要监控的盘都显示为已监听。- 每块盘都有自检计划,且最近有执行记录。
mdadm --monitor --scan --oneshot --test能收到测试邮件(有软 RAID 时)。- 数据盘的用量警告阈值符合你的预期。
- 告警邮件也能转发到你平时会看的地方(手机、聊天软件)。
常见问题
勾选了事件,却从来没有收到过告警。 好事,说明没有出过问题,但不能证明通路是通的。用上面清单里能安全实测的项目(测试邮件、mdadm --test)验证。S.M.A.R.T. 和 I/O 错误没有安全的实测办法,不要为了测试去拔盘或制造坏扇区,改为定期人工检查 smartctl -H 和界面里的状态。
USB 硬盘盒里的盘没有 S.M.A.R.T. 告警。 许多 USB 桥接芯片不转发 S.M.A.R.T. 命令,这类盘无法被监控,只能依赖文件系统层面的错误告警和定期备份。
温度告警总是在夏天频繁出现。 先解决散热。不得已时再调高界面里的温度阈值,但不要调到超过硬盘手册标明的上限。
同一个问题一直在发邮件。 对 I/O 错误是每 300 秒一封,是预期行为。要处理的是硬盘本身,而不是关闭告警。