技术笔记

Scrutiny:让硬盘在真的坏掉之前就告诉你

yaobingbin yaobingbin · · 约 7 分钟 · 0 条评论
Scrutiny:让硬盘在真的坏掉之前就告诉你

一句话结论

NAS 系统自带的 SMART 界面通常只能看个”正常/不正常”,而硬盘出事前的关键信号往往藏在具体属性里。Scrutiny 做的是把 SMART 数据长期存下来、画出趋势、并在越线时主动通知你。它最有价值的一点:能在硬盘自己的 SMART 总体评估仍显示”通过”时,就根据会预示故障的具体属性把它标记出来。

它比系统自带 SMART 强在哪

能力 系统自带 Scrutiny
看到当前 SMART 值 能 能
历史趋势 基本没有 有,按周按月看曲线
多块硬盘集中看 分散 一屏全览
故障预判 只报”已坏” 按属性阈值提前预警
主动通知 部分系统有 支持 Telegram / 邮件 / Webhook 等
多台机器汇总 不支持 支持(收集器模式)

最关键的是”趋势”这一项。 单次看数值意义有限,真正能预警的是”这个值在持续变差”。没有历史数据,你根本看不出趋势。

部署(单机全合一版)

一台 NAS 用一个容器搞定,官方叫 omnibus 版:

services:
  scrutiny:
    image: ghcr.io/analogj/scrutiny:master-omnibus
    container_name: scrutiny
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - /run/udev:/run/udev:ro
      - ./config:/opt/scrutiny/config
      - ./influxdb:/opt/scrutiny/influxdb
    cap_add:
      - SYS_RAWIO
      - SYS_ADMIN
    devices:
      - /dev/sda
      - /dev/sdb
    environment:
      - TZ=Asia/Shanghai

启动后访问 `http://NAS的IP:8080`。

几个参数为什么必须这么写

这段是部署里最容易出错的部分,值得单独说:

`devices` 要显式列出每块盘。 Scrutiny 底层靠 smartctl 读盘,需要打开原始设备句柄,所以每块要监控的盘都得列出来。盘多的话可以用 `privileged: true` 加 `/dev:/dev` 映射代替,但显式列出更安全,建议坚持显式。

`cap_add: SYS_RAWIO` 必须有。 这是读取 SMART 数据所需的能力。`SYS_ADMIN` 只在有 NVMe 盘时才需要。

`/run/udev` 只读挂载。 用来获取硬盘序列号等硬件元数据,没有它仪表盘上的设备信息会不完整。

两个目录要备份:`config`(配置)和 `influxdb`(历史数据)。历史趋势数据全在 influxdb 里,这个目录丢了趋势就断了。

怎么看你该盯哪几个值

Scrutiny 会给每块盘一个状态:Passed(正常)、Failed (SMART)(硬盘自己报失败)、Failed (Scrutiny)(硬盘自评正常,但 Scrutiny 判断有风险)。

第三种状态是它最有价值的输出。日常真正需要盯的属性,按与故障的相关程度排:

属性 ID 该怎么看
Reallocated Sector Count 5 任何非零值都值得关注,持续上升是很强的信号
Current Pending Sector Count 197 疑似坏道但还没重映射,持续不清零是坏信号
Reported Uncorrectable Errors 187 纠错都救不回来的读取失败
Uncorrectable Sector Count 198 同上,盘在打一场赢不了的仗
Command Timeout 188 响应超时。偶发可能是线材或供电问题,不一定是盘坏了

一条重要经验:看这些值要看趋势和组合,不要看到非零就立刻换盘。比如 5 号属性稳定在个位数不增长,通常是早期已经处理过的问题;而 197 持续存在且多次采集都不清零,才真的要紧张。

采集频率:默认是每天一次

容器起来后默认每天采集一次。想改频率,加环境变量:

    environment:
      - COLLECTOR_CRON_SCHEDULE=0 */6 * * *

不想等的话可以手动跑一次:

docker exec scrutiny /opt/scrutiny/bin/scrutiny-collector-metrics run

第一次部署完建议手动跑一次,这样立刻能看到盘,不用等到第二天。

通知一定要配,否则等于没装

跟所有监控类应用一样:不配通知,你不会天天去打开仪表盘看。

在 `config/scrutiny.yaml` 里配置,它用的是 apprise 风格的 URL,一条搞定一种渠道:

notify:
  urls:
    - "tgram://你的bottoken/chatid"

配完建议测一下:温度超过阈值或 Pending Sector 增加时,你会立刻收到消息。一次没响过的告警,先怀疑通知没配通,而不是怀疑硬盘太健康。

多台 NAS 怎么处理

如果你有不止一台机器,用收集器模式更合理:一台机器跑 Web 界面做中心,其他机器只跑收集器,把数据推到中心。

其他机器上只需要跑收集器容器,配 `COLLECTOR_API_ENDPOINT` 指向中心机的地址,并列出本机的硬盘设备。这样所有盘在一张仪表盘上看,不用挨个 SSH 进去跑 smartctl。

常见坑

仪表盘是空的。 先手动跑一次采集命令,再等一两分钟刷新。omnibus 版第一次启动会自动跑,但如果设备没列对就不会有数据。

看不到盘或看不到温度。 大概率是 `devices` 没列全,或者 `SYS_RAWIO` 没加。NVMe 盘还额外需要 `SYS_ADMIN`。

容器起不来。 检查 `devices` 里写的设备路径是否真实存在,可以用 `lsblk` 先确认盘符。

权限不足。 它需要直接读块设备,权限给不到位就读不到数据。安全原则上是只给它需要的设备,不要图省事直接开 privileged。

小结

硬盘是 NAS 上唯一会”物理性死亡”的部件,而它的死法通常是渐进的——SMART 值在几周甚至几个月里慢慢恶化。Scrutiny 的价值就是把这条恶化曲线画出来,并在越线时喊你一声。 装它的成本不高,但它可能是你 NAS 上唯一一个能在数据丢失前救你一次的应用。

微信搜一搜 纳思Note
评论经后台审核通过后显示 · 请勿发布广告、外链或无关内容

发表评论

邮箱地址不会被公开。填写昵称与邮箱后方可评论。