跳转到内容

温度监控与风扇控制 ​

完成后,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 Temp8.2.2
openmediavault-tempmon任意多个传感器,每个传感器一个脚本,可分组,有仪表盘和图表服务 → 温度监控(Services → Temp Monitor),图表在 诊断 → 性能统计 → Temp Monitor8.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/temp
sh
#!/bin/sh
# 硬盘温度,已经是摄氏度,除数填 1。设备名用 by-id 路径,避免重启后盘符变化
smartctl -A /dev/disk/by-id/<硬盘的 by-id 名称> | awk '/Temperature_Celsius/ { print $10 }'

SSD 和 NVMe 的属性名不一样,先手动运行 smartctl -A <设备> 看输出再改 awk。

配置步骤 ​

  1. 服务 → 温度监控(或 服务 → CPU Temp)→ 创建传感器,填上面的字段,保存。
  2. 点黄色提示条上的应用。插件会把脚本写到你指定的路径,并重新生成 collectd 的配置、仪表盘小部件和图表页。
  3. 在仪表盘右上角的设置里添加对应的小部件。
  4. 图表页等第一个数据点要最多一分钟,没出现时强制刷新浏览器(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% 内时跳过二分查找。所以每次开机、每次重启服务,风扇都会短暂停转或全速一次。首次启用要选硬盘空闲、环境凉爽的时候,并守在机器旁。

检查结果 ​

  1. 仪表盘出现温度小部件,诊断 → 性能统计 里出现对应的图表页,曲线有数据。
  2. 在 OMV 的 shell(root)里只读确认:
sh
# 在 OMV 的 shell 里执行(root)
systemctl status collectd                      # 温度图表靠它采集
systemctl status omv-hddfanctrl                # 只在启用了风扇控制时
journalctl -u omv-hddfanctrl -n 50 --no-pager  # 校准过程和 hddfancontrol 的输出
  1. 风扇控制:给硬盘持续读写一阵(例如拷一个大文件),观察温度升高时转速是否随之上升,停止后回落;同时对照 存储器 → S.M.A.R.T. 里硬盘的温度,确认读数一致。
  2. 重启 NAS,确认风扇控制自动恢复,没有长时间停转。

备份与维护 ​

  • 传感器脚本和设置在 OMV 的配置数据库里,记在你的配置文档里,见 OMV 配置怎么留底。
  • 脚本落盘的位置由 Salt 生成,不要手改,改动在界面里做。
  • 换了风扇,下次启动时最高转速和缓存对不上,插件会自动重新校准;想强制重做,先停服务,再删除 /var/cache/omv-hddfanctrl/fan-cache。
  • 卸载 hddfanctrl 后,/opt/omv-hddfanctrl 下的 Python 环境和缓存不一定会清理,确认不用了再手动处理。

常见问题 ​

风扇列表是空的。 内核没有识别到 PWM 风扇,见上面「前提」里的 sensors-detect。笔记本、品牌整机和一部分 NAS 专用主板的风扇由固件接管,Linux 读不到。

图表页是空白或一直没有数据。 先点过应用;等一分钟;强制刷新浏览器;确认 collectd 在运行;手动运行一下你的传感器脚本,应只打印一个数字。

温度读数是 -。 脚本文件不存在、没有执行权限,或者输出的不只是一个数字。

风扇一直全速。 硬盘温度高于「最高转速温度」,或硬盘没被勾选成参与控制,或服务没有启动,看 journalctl 的输出。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。