外观
温度监控与风扇控制
完成后,OMV 的仪表盘和 诊断 → 性能统计(Diagnostics → Performance Statistics)里能看到 CPU、硬盘、主板等传感器的温度曲线;如果你的机器有可调速的风扇,还可以让它按硬盘温度自动升降速。
适合谁
- 想在仪表盘上一眼看到 CPU 或机箱温度。
- 机箱风扇接在主板的 PWM 接口上,想要安静又不让硬盘过热。
先看系统自带的:硬盘温度在 存储器 → S.M.A.R.T.(Storage → S.M.A.R.T.)里已有,仪表盘也有磁盘温度小部件,见 S.M.A.R.T.。这篇的插件补的是 CPU 等其他传感器,以及风扇控制。
| 插件 | 做什么 | 菜单位置 | 截至 2026-10-22 的版本 |
|---|---|---|---|
openmediavault-cputemp | 最多 4 个温度传感器,默认读 CPU 的 thermal_zone0,有仪表盘和图表 | 服务 → CPU Temp(Services → CPU Temp),图表在 诊断 → 性能统计 → CPU Temp | 8.2.2 |
openmediavault-tempmon | 任意多个传感器,每个传感器一个脚本,可分组,有仪表盘和图表 | 服务 → 温度监控(Services → Temp Monitor),图表在 诊断 → 性能统计 → Temp Monitor | 8.0.4 |
openmediavault-hddfanctrl | 按硬盘温度控制风扇转速 | 存储器 → 磁盘风扇控制(Storage → HDD Fan Control) | 8.0.3 |
三个都来自 omv-extras,amd64 和 arm64 均有,先装 omv-extras。只看一个 CPU 温度,cputemp 开箱就能用;要多个传感器、分组、硬盘或 NVMe 的温度,用 tempmon。tempmon 的仓库已有 8.0.5(新增每个传感器可选的单位),软件源里还是 8.0.4,字段以界面显示为准。
风扇控制设置不当会让硬盘过热
- 影响范围:hddfanctrl 会接管主板风扇的转速。设置不当、传感器读数不准,或者风扇被调到停转,会导致硬盘和机箱过热,缩短硬盘寿命甚至造成损坏。上游项目 hddfancontrol 的作者也提醒:配置不当会让系统无法正确散热,可能损坏部件或缩短寿命,长期无人值守前要保留一个最低转速,并确认温度在预期范围内。截至 2026-10-22,插件仓库里还有一个未关闭的问题,反映服务崩溃、生成了不正确的配置文件。
- 前置条件:先装 cputemp 或 tempmon,确认硬盘温度读数准确;首次启用时守在机器旁,硬盘处于空闲状态;设置一个不为零的最低转速;有告警,见 硬盘故障预警。
- 怎么回退:取消勾选 启用(Enable),保存并应用,服务停止,插件给上游程序传了恢复风扇设置的参数,风扇应回到主板原来的控制方式。仍然不放心,卸载插件,并在 BIOS 里重新设置风扇曲线。
温度监控:cputemp 和 tempmon
传感器是怎么读出来的
两个插件的做法相同:每个传感器是一个脚本,脚本向标准输出打印一个原始数值,插件再用 除数(Divisor)换算成摄氏度,并通过 collectd 记录成图表。
| 字段 | 说明 |
|---|---|
| 脚本路径(Script path) | 脚本落盘的位置,必须是 root 可写的路径,例如 /usr/sbin/cputemp1 |
| 脚本(Script) | 打印一个数值的 shell 脚本,要有 #!/bin/sh |
| 除数(Divisor) | 内核热区(thermal zone)返回的是毫摄氏度,用 1000;脚本已经输出摄氏度,用 1 |
| 仪表盘小部件、性能图表 | tempmon 里可以分别勾选;cputemp 提供现成的小部件和图表页 |
| 名称(Name) | tempmon 特有,创建后不能修改,要改名只能删除重建 |
cputemp 的默认传感器 1 读 /sys/devices/virtual/thermal/thermal_zone0/temp,除数 1000,装上就有 CPU 温度,不需要写脚本。
找到正确的传感器
在 OMV 的 shell(root)里,只读列出内核提供的热区:
sh
# 在 OMV 的 shell 里执行(root),只读
for z in /sys/devices/virtual/thermal/thermal_zone*/; do
echo "$z: $(cat ${z}type) = $(cat ${z}temp)"
done输出里 type 和温度对得上的就是你要的那一个,把它的路径写进脚本。没有热区的主板,可以装 lm-sensors,用 sensors -u 找原始数值。示例脚本(改成你机器上的名字和路径):
sh
#!/bin/sh
# 内核热区,毫摄氏度,除数填 1000
cat /sys/devices/virtual/thermal/thermal_zone0/tempsh
#!/bin/sh
# 硬盘温度,已经是摄氏度,除数填 1。设备名用 by-id 路径,避免重启后盘符变化
smartctl -A /dev/disk/by-id/<硬盘的 by-id 名称> | awk '/Temperature_Celsius/ { print $10 }'SSD 和 NVMe 的属性名不一样,先手动运行 smartctl -A <设备> 看输出再改 awk。
配置步骤
服务 → 温度监控(或服务 → CPU Temp)→ 创建传感器,填上面的字段,保存。- 点黄色提示条上的应用。插件会把脚本写到你指定的路径,并重新生成 collectd 的配置、仪表盘小部件和图表页。
- 在仪表盘右上角的设置里添加对应的小部件。
- 图表页等第一个数据点要最多一分钟,没出现时强制刷新浏览器(Ctrl+Shift+R)。
安全提示
脚本由 collectd 调用。按 tempmon 8.0.3 的变更记录,它以 nobody 身份运行 collectd,再通过一条 sudo 规则以管理员权限执行传感器脚本,也就是说脚本等同于 root 在跑。只写你读懂的脚本,也不要让不信任的人拥有 OMV 管理员账号。
风扇控制:hddfanctrl
前提
- 风扇接在主板的 PWM 风扇接口上,Linux 能识别,也就是
/sys/class/hwmon/hwmon*/下有fan*_input和对应的pwm*、pwm*_enable。很多主板需要先加载对应的传感器内核模块。 - 插件依赖
lm-sensors,但目前不会替你探测传感器。风扇列表是空的,先在 shell 里运行sensors-detect,仔细读它的提示,再按建议加载模块。 - 硬盘温度由内核的
drivetemp模块提供,插件会把它设为开机加载。 - 安装时插件会在
/opt/omv-hddfanctrl/venv里用pip从 PyPI 下载hddfancontrol,需要联网,而且没有固定版本。截至 2026-10-22 查到的最新发布版是 1.6.2(2024-06);上游以后换了命令行参数,插件可能不兼容。
配置
存储器 → 磁盘风扇控制 有三个标签:
风扇(Fans):列出系统里找到的风扇,选中后点 Toggle HDD Fan,把要受控的风扇标记为「HDD Fan」。
硬盘(Drives):列出硬盘的序列号、路径和温度,选中后点 Toggle Cooled,标记哪些硬盘的温度参与风扇控制。
配置(Config):
| 字段 | 默认值 | 说明 |
|---|---|---|
| 启用 HDD 风扇控制(Enable HDD Fan Control) | 关 | |
| Spindown Time (Minutes, 0=disabled) | 0 | 让上游程序在硬盘空闲这么多分钟后令其停转。保持 0,硬盘休眠用 OMV 自己的设置,见 磁盘管理 |
| Temperature Update Interval (Seconds) | 60 | 多久读一次温度 |
| Minimum Speed Temperature (C) | 30 | 低于它,风扇保持最低转速 |
| Maximum Speed Temperature (C) | 45 | 高于它,风扇全速,两者之间的转速随温度变化,具体曲线由上游程序决定 |
| Minimum Speed (%) | 10 | 最低转速。默认值在表单里是 10,数据模型里是 15,以界面显示为准 |
至少要选一个风扇和一块硬盘,否则服务不会启动。保存并应用。
每次启动服务,风扇都会被先设为 0 再设为最高,首次校准最久
服务启动时,插件会对每个选中的风扇测试 PWM 的响应,找出它开始转和停转的数值:先把风扇设为 0,再设为最高(255),每一步最多等 60 秒,这期间风扇可能停转。第一次还要继续二分查找,整个过程可能持续几分钟。结果缓存在 /var/cache/omv-hddfanctrl/fan-cache,之后每次启动仍然会先测 0 和最高两步,只是风扇最高转速与缓存相差在 2.5% 内时跳过二分查找。所以每次开机、每次重启服务,风扇都会短暂停转或全速一次。首次启用要选硬盘空闲、环境凉爽的时候,并守在机器旁。
检查结果
- 仪表盘出现温度小部件,
诊断 → 性能统计里出现对应的图表页,曲线有数据。 - 在 OMV 的 shell(root)里只读确认:
sh
# 在 OMV 的 shell 里执行(root)
systemctl status collectd # 温度图表靠它采集
systemctl status omv-hddfanctrl # 只在启用了风扇控制时
journalctl -u omv-hddfanctrl -n 50 --no-pager # 校准过程和 hddfancontrol 的输出- 风扇控制:给硬盘持续读写一阵(例如拷一个大文件),观察温度升高时转速是否随之上升,停止后回落;同时对照
存储器 → S.M.A.R.T.里硬盘的温度,确认读数一致。 - 重启 NAS,确认风扇控制自动恢复,没有长时间停转。
备份与维护
- 传感器脚本和设置在 OMV 的配置数据库里,记在你的配置文档里,见 OMV 配置怎么留底。
- 脚本落盘的位置由 Salt 生成,不要手改,改动在界面里做。
- 换了风扇,下次启动时最高转速和缓存对不上,插件会自动重新校准;想强制重做,先停服务,再删除
/var/cache/omv-hddfanctrl/fan-cache。 - 卸载 hddfanctrl 后,
/opt/omv-hddfanctrl下的 Python 环境和缓存不一定会清理,确认不用了再手动处理。
常见问题
风扇列表是空的。 内核没有识别到 PWM 风扇,见上面「前提」里的 sensors-detect。笔记本、品牌整机和一部分 NAS 专用主板的风扇由固件接管,Linux 读不到。
图表页是空白或一直没有数据。 先点过应用;等一分钟;强制刷新浏览器;确认 collectd 在运行;手动运行一下你的传感器脚本,应只打印一个数字。
温度读数是 -。 脚本文件不存在、没有执行权限,或者输出的不只是一个数字。
风扇一直全速。 硬盘温度高于「最高转速温度」,或硬盘没被勾选成参与控制,或服务没有启动,看 journalctl 的输出。
参考资料
- omv-extras wiki:Temp Monitor(含各种传感器脚本示例)
- 插件源码:openmediavault-cputemp、openmediavault-tempmon、openmediavault-hddfancontrol
- 上游项目:hddfancontrol,README 里有关于配置不当的警告