
Scrutiny 跨平台支持矩阵与社区测试验证指南从测试者名录到源码级构建体系【免费下载链接】scrutinyHard Drive S.M.A.R.T Monitoring, Historical Trends Real World Failure Thresholds项目地址: https://gitcode.com/GitHub_Trending/sc/scrutinyScrutiny 是一款面向 S.M.A.R.T. 硬盘监控的现代工具其显著特点是同时支持多种操作系统、CPU 架构与运行环境。本文以仓库内的 docs/TESTERS.md 为骨架完整呈现社区测试者验证过的平台矩阵并结合仓库源码OS 特定设备探测实现、Makefile 交叉编译规则、Docker 多架构构建文件与 README.md 的官方支持表格深入解析为什么需要测试各平台差异在哪里如何参与测试验证三个核心问题帮助读者快速判断自己的平台是否受支持并掌握在陌生平台上验证 Scrutiny 的方法。背景一个硬盘监控工具为什么要依赖社区测试Scrutiny 的架构决定了它天然面临巨大的兼容性挑战。从 README.md 可以看到Scrutiny 由三个组件构成负责采集 S.M.A.R.T 数据的 Collector、负责 Web UI 与 API 的后端服务以及用于持久化时序数据的 InfluxDB。Collector 需要直接与底层存储设备交互、解析smartctl的输出而这部分行为与操作系统内核、设备接口ATA/SATA/NVMe/SCSI/RAID、CPU 架构乃至容器运行时都高度耦合。正如 docs/TESTERS.md 开头所述Scrutiny supports many operating systems, CPU architectures and runtime environments. Unfortunately that makes it incredibly difficult to test.Scrutiny 支持许多操作系统、CPU 架构和运行时环境遗憾的是这使测试变得极其困难。由于项目维护者无法穷尽所有软硬件组合Scrutiny 采用了一条务实的路线依靠社区用户在真实硬件上验证并回报结果由这些验证记录汇聚成一份已在以下平台上验证可用的清单。如果你希望在自己的平台上验证 Scrutiny 的 beta 构建docs/TESTERS.md 明确给出了参与方式在仓库的 Issues 页面提交一条 issue说明你的系统环境与验证结果即可。仓库内 CONTRIBUTING.md 则提供了完整的开发、构建与测试环境搭建指南可作为参与测试的技术准备。社区验证矩阵测试者名录TESTERS.md 全文以下表格是 docs/TESTERS.md 的核心内容记录了社区成员在其平台上对 Scrutiny 二进制Binaries与 Docker 镜像两种交付形态的验证情况。--表示该形态在该架构上尚无测试者回报Architecture NameBinariesDockerlinux-amd64--feroxy rshxyzlinux-arm-5--linux-arm-6--linux-arm-7Zorlinmartini1992linux-arm64SiM22 ZorlinViRb3 agneevX benamajinfreebsd-amd64BadCo-NZ varunsridharan martadinata666 KenwoodFox FingerlessGlov3smacos-amd64----macos-arm64----windows-amd64gabrielv33--windows-arm64----从这张表可以提炼出几个值得注意的事实覆盖范围极广从常见的linux-amd64到小众的linux-arm-5ARMv5、freebsd-amd64、windows-arm64都被纳入验证范围。FreeBSD 是纯二进制验证平台freebsd-amd64的 Binaries 列有 5 位测试者是所有平台中回报人数最多的但 Docker 列空白——这与 Scrutiny 的官方 Docker 镜像未覆盖 FreeBSD 的运行形态一致。Windows 上优先验证二进制windows-amd64已有 gabrielv33 验证这与 docs/INSTALL_MANUAL_WINDOWS.md 描述的通过 Windows 任务计划程序运行scrutiny-collector-metrics-windows-amd64.exe的手动安装路径吻合而 Windows 的 Docker 支持在 README.md 中仍标记为 WIP进行中。ARM 系列是社区验证的重灾区ARMv5/ARMv6 尚无任何回报ARMv7 只有二进制与 Docker 各一位测试者说明低端 ARM 平台是兼容性风险最高的区域。官方支持矩阵与社区验证的对照README.md 的 Supported Architectures 一节给出了官方维护的架构支持声明可以作为社区验证表的补充参照✓ 表示官方支持Architecture NameBinariesDockerlinux-amd64✓✓linux-arm-5✓linux-arm-6✓linux-arm-7✓web/collector onlylinux-arm64✓✓freebsd-amd64✓macos-amd64✓✓macos-arm64✓✓windows-amd64✓WIPwindows-arm64✓将两张表对照可以发现官方支持矩阵与社区验证覆盖并不完全同步。例如macos-amd64、macos-arm64在官方表中同时支持二进制与 Docker但 TESTERS.md 中尚无 macOS 测试者回报而linux-arm64则是官方支持 社区验证双确认的最成熟组合。这种对照关系正是 TESTERS.md 存在的价值——它把官方声称支持和实际被验证可用区分开来是用户评估平台风险的直接依据。各平台差异的源码级解析平台矩阵背后是 Collector 在 collector/pkg/detect/ 目录下按操作系统拆分的设备探测实现。理解这些差异有助于测试者在回报结果时提供更有针对性的信息。Linuxudev 设备元数据增强Linux 实现位于 collector/pkg/detect/devices_linux.go其Start()流程为先通过smartctl --scan扫描设备再对每个设备调用SmartCtlInfo与populateUdevInfo补充信息。其中populateUdevInfocollector/pkg/detect/devices_linux.go是 Linux 特有的逻辑它读取/sys/class/block/设备名/dev获取设备主次设备号再以b主:次为键查询 udev 运行时数据库/run/udev/data/从中提取ID_FS_LABEL文件系统标签、ID_FS_UUID文件系统 UUID和ID_SERIAL序列号填充到设备模型中。这正是 README.md 中 Docker 运行需要挂载/run/udev:/run/udev:ro的原因——缺失该目录会丢失设备元数据。macOSsmartctl --scan 的 NVMe 盲区Darwin 实现位于 collector/pkg/detect/devices_darwin.go其核心差异在于Start()中多了一步findMissingDevices。该函数针对一个已知问题做了补偿smartctl --scan在 macOS 上无法检测到 NVMe 磁盘代码注释明确写道 smartctl --scan doesnt seem to detect mac nvme drives。补偿逻辑借助ghw.Block()枚举所有块设备并依次排除光驱/软驱DRIVE_TYPE_FDD/DRIVE_TYPE_ODD、可移动磁盘、VirtIO/MMC 虚拟控制器和未知存储控制器的设备再将未被smartctl扫描到的磁盘补充进设备列表collector/pkg/detect/devices_darwin.go。因此在 macOS 上测试时NVMe 磁盘是否被正确识别是重点观察项。FreeBSD最简实现FreeBSD 实现位于 collector/pkg/detect/devices_freebsd.go是所有平台中最直接的版本仅执行smartctl --scan与SmartCtlInfo没有额外的设备补全或 udev 增强逻辑。FreeBSD 的测试者较多说明这套基础流程在该平台上工作稳定。Windows无 /dev 前缀的设备名Windows 实现位于 collector/pkg/detect/devices_windows.go唯一的结构性差异是DevicePrefix()返回空字符串Linux/FreeBSD/macOS 均返回/dev/用于在拼接设备路径时兼容 Windows 的盘符命名。该实现同样只依赖smartctl --scan加SmartCtlInfo的简单流程。跨平台一致的 WWN 生成与回退策略无论哪个平台设备唯一标识WWN的生成逻辑都收敛到 collector/pkg/detect/detect.go 的SmartCtlInfo与 collector/pkg/detect/wwn.go 中。当smartctl --info返回的 NAA/OUI/ID 字段可用时按 IEEE NAA5 格式重组 WWNcollector/pkg/detect/wwn.go否则调用各平台实现的wwnFallback最终兜底方案是使用设备序列号并统一转为小写。这个链路在所有 OS 上一致是测试中判断设备是否成功注册的关键依据。多架构构建体系交叉编译与 Docker社区测试者拿到的二进制与镜像来自仓库的两套构建体系。Makefile 交叉编译Makefile 通过环境变量GOOS、GOARCH、GOARM控制交叉编译并联动修改产物命名GOOS设定后二进制更名为scrutiny-collector-metrics-$(GOOS)GOARCH追加-$(GOARCH)后缀GOARM再追加版本号由此可推导出linux-arm-7对应GOOSlinux GOARCHarm GOARM7的构建组合STATIC1时设置CGO_ENABLED0并附加-extldflags-static与static netgo编译标签产出静态二进制这正是 FreeBSD 等平台可以脱离容器直接运行的保证在 Windows 环境构建时产物自动追加.exe后缀Makefile与 docs/INSTALL_MANUAL_WINDOWS.md 中提到的scrutiny-collector-metrics-windows-amd64.exe命名完全对应。Docker 多架构镜像仓库提供两个 Docker 构建文件docker/Dockerfileomnibus 一体镜像与 docker/Dockerfile.collector纯 Collector 镜像。构建时通过--build-arg TARGETARCH注入目标架构Makefile 中由TARGETARCH变量驱动运行时镜像根据架构选择对应的 s6-overlay 包与 InfluxDB 2.2 安装包docker/Dockerfile。这也解释了为什么官方 Docker 表只覆盖linux-amd64与linux-arm64——多架构镜像的构建与验证成本显著高于单一二进制。Hub/Spoke 部署中 Collector 独立成容器其运行依赖可见 docker/example.hubspoke.docker-compose.yml需要SYS_RAWIO权限、挂载/run/udev并通过devices显式传入硬盘设备。在 ARM 设备如树莓派上测试时这些参数同样适用。如何参与测试实操路径1. 手动运行 Collector 验证设备采集在不使用 Docker 的情况下可先安装 smartmontools再以调试模式运行 Collector参考 CONTRIBUTING.mdbrew install smartmontools # macOSLinux 发行版请用对应包管理器 go run collector/cmd/collector-metrics/collector-metrics.go run --debug--debug会输出smartctl扫描、WWN 生成等全过程日志是判断设备是否被正确识别的最直接手段。若需将日志写入文件可用环境变量COLLECTOR_LOG_FILE/tmp/collector.log在 Docker 容器内可用docker cp将日志拷出见 CONTRIBUTING.md 的 Debugging 一节。2. 通过 Docker 运行并触发一次采集官方镜像默认通过 cron 每天午夜运行一次采集调度定义见 rootfs/etc/cron.d/scrutiny默认0 0 * * *可用COLLECTOR_CRON_SCHEDULE环境变量覆盖。手动触发一次采集docker exec scrutiny /opt/scrutiny/bin/scrutiny-collector-metrics run也可以直接运行镜像内二进制验证容器权限是否到位/opt/scrutiny/bin/scrutiny-collector-metrics run3. 运行仓库测试套件在本地完整验证需要先准备一个 InfluxDB 2.2 实例参考 CONTRIBUTING.md 的 Running Tests 一节docker run -p 8086:8086 -d --rm \ -e DOCKER_INFLUXDB_INIT_MODEsetup \ -e DOCKER_INFLUXDB_INIT_USERNAMEadmin \ -e DOCKER_INFLUXDB_INIT_PASSWORDpassword12345 \ -e DOCKER_INFLUXDB_INIT_ORGscrutiny \ -e DOCKER_INFLUXDB_INIT_BUCKETmetrics \ -e DOCKER_INFLUXDB_INIT_ADMIN_TOKENmy-super-secret-auth-token \ influxdb:2.2 go test ./...仓库的单元测试覆盖了设备探测如 collector/pkg/detect/detect_test.go、collector/pkg/detect/devices_linux_test.go、配置解析collector/pkg/config/config_test.go与后端仓储层webapp/backend/pkg/database/scrutiny_repository_tasks_test.go等模块测试通过可以排除通用逻辑层面的回归但无法替代真实硬件上的端到端验证——这正是 TESTERS.md 社区验证不可替代的原因。4. 回报验证结果完成上述任一路径的验证后按 docs/TESTERS.md 的指引在仓库 Issues 中提交一条 issue注明操作系统版本、CPU 架构、交付形态二进制/Docker、存储接口类型ATA/NVMe/SCSI/RAID与验证结论。如果是测试 beta 构建建议同时附上--debug模式的 Collector 日志便于维护者定位问题。总结docs/TESTERS.md 虽然篇幅简短却是评估 Scrutiny 多平台兼容性的第一手资料它用一张表格清晰标出了每个平台官方支持与社区实测之间的差距其中linux-amd64、linux-arm64是验证最充分的组合FreeBSD 依赖纯二进制形态而 ARMv5/v6 与 macOS 系列仍存在验证空白。结合 collector/pkg/detect/ 下按 OS 拆分的探测实现、Makefile 的交叉编译规则以及 docker/Dockerfile 的多架构构建逻辑测试者既能理解平台差异的根源也能按本文给出的路径亲手验证并贡献自己平台的测试记录让这张兼容性地图随着社区参与不断补全。【免费下载链接】scrutinyHard Drive S.M.A.R.T Monitoring, Historical Trends Real World Failure Thresholds项目地址: https://gitcode.com/GitHub_Trending/sc/scrutiny创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考