参考了 @bingo_qBrWX 的文章《飞牛安装 CoolerControl 进行风扇转速自定义(含传感器驱动安装)》(出处:飞牛私有云论坛 fnOS),我也为自己系统配置了一套基于 CoolerControl 的硬盘温度控制散热方案。实际使用下来确实省心不少,但发现了一个致命问题:读取硬盘温度时会导致处于休眠状态的硬盘被唤醒,这使得我的备份盘频繁启动,无法维持休眠状态,反而得不偿失。
后来我发现,CoolerControl 支持通过读取指定文件来获取温度数据。于是,我请 AI 协助编写了一个脚本,该脚本会先判断硬盘是否处于休眠状态,仅在硬盘已唤醒的情况下才读取其温度,并将结果写入对应文件,供 CoolerControl 读取使用。


将此脚本作为系统服务运行后,效果如下:

需要注意一个关键细节:由于 CoolerControl 是以 Docker 容器方式运行的,因此必须确保写入的温度文件位于 Docker 映射的目录中,否则容器内的 CoolerControl 将无法读取到这些数据。
其余配置与 @bingo_qBrWX 原文中所述基本一致。唯一的区别是,我没有使用 drivetemp 模块来获取温度。因为有用户反馈 drivetemp 同样可能导致休眠硬盘被唤醒,所以我选择不加载该模块,而是直接通过 smartctl 命令读取硬盘 SMART 信息中的温度数据。
脚本:**
附件:hhd_cooler.zip
**
脚本使用说明:
HDD 温度监控与输出
- 作用
- 监控指定硬盘的温度,自动跳过处于休眠的硬盘
- 将多个硬盘中的最高温度写入到指定目录文件,单位为毫摄氏度(符合 sysfs 数据格式)
- 支持循环运行与可配置的检查间隔,支持系统服务方式运行
- 文件位置
- 脚本: [hdd_temp_monitor.sh]
- 服务: [hdd_temp_monitor.service]
- 输出目录: /vol1/1000/docker/CoolerControl
- 输出文件: /vol1/1000/docker/CoolerControl/max_hdd_temp.txt(单行整数,毫摄氏度)
- 日志文件: /vol1/1000/docker/CoolerControl/hdd_monitor.log
前置条件
配置
- 编辑脚本顶部参数:
- 输出格式说明
- 写入文件内容为毫摄氏度的定点整数(sysfs 标准)
- 示例:32°C -> 32000;默认 15°C -> 15000
手动运行验证
chmod +x hdd_temp_monitor.sh
sudo ./hdd_temp_monitor.sh
作为系统服务加载(systemd)
- 将脚本部署到标准路径并赋权:
sudo cp hdd_temp_monitor.sh /usr/local/bin/hdd_temp_monitor.sh
sudo chmod +x /usr/local/bin/hdd_temp_monitor.sh
- 确认服务文件中的 ExecStart 路径正确:
- 安装服务文件到 systemd:
sudo cp hdd_temp_monitor.service /etc/systemd/system/hdd_temp_monitor.service
- 加载并启用服务:
sudo systemctl daemon-reload
sudo systemctl enable hdd_temp_monitor.service
sudo systemctl start hdd_temp_monitor.service
- 查看服务状态与日志:
systemctl status hdd_temp_monitor.service
journalctl -u hdd_temp_monitor.service -f
# 或查看脚本日志
tail -f /vol1/1000/docker/CoolerControl/hdd_monitor.log
- 更新与重载:
# 修改了脚本:
sudo systemctl restart hdd_temp_monitor.service
# 修改了 service 文件:
sudo systemctl daemon-reload
sudo systemctl restart hdd_temp_monitor.service
- 停止与禁用:
sudo systemctl stop hdd_temp_monitor.service
sudo systemctl disable hdd_temp_monitor.service
说明与行为
- 休眠保护:读取前使用 hdparm -C 检查;休眠盘跳过,不唤醒
- 多盘策略:取所有活跃硬盘温度中的最高值
- 回退逻辑:全部休眠或找不到硬盘时,写入默认温度(毫摄氏度)
- 日志包含每次检查的状态与写入值,便于排查