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


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

需要注意一个关键细节:由于 CoolerControl 是以 Docker 容器方式运行的,因此必须确保写入的温度文件位于 Docker 映射的目录中,否则容器内的 CoolerControl 将无法读取到这些数据。
其余配置与 @bingo_qBrWX 原文中所述基本一致。唯一的区别是,我没有使用 drivetemp 模块来获取温度。因为有用户反馈 drivetemp 同样可能导致休眠硬盘被唤醒,所以我选择不加载该模块,而是直接通过 smartctl 命令读取硬盘 SMART 信息中的温度数据。
没法上传文件,脚本丢github上吧:https://github.com/foxhound1227/max_hdd_temp
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
前置条件
以 root 权限运行(hdparm / smartctl 需要)
安装依赖:
apt install hdparm smartmontools确保输出目录可写,脚本会自动创建
配置
编辑脚本顶部参数:
监控硬盘列表:
DRIVES=("/dev/sda" "/dev/sdb")检查间隔(支持 s=秒, m=分, h=小时):
CHECK_INTERVAL="10m"默认温度(摄氏度,写入时自动换算为毫摄氏度):
DEFAULT_TEMP=15
输出格式说明
写入文件内容为毫摄氏度的定点整数(sysfs 标准)
示例:32°C -> 32000;默认 15°C -> 15000
手动运行验证
chmod +x hdd_temp_monitor.sh
sudo ./hdd_temp_monitor.sh
验证输出文件:
cat /vol1/1000/docker/CoolerControl/max_hdd_temp.txt # 应看到形如 32000 的整数查看运行日志:
tail -f /vol1/1000/docker/CoolerControl/hdd_monitor.log
作为系统服务加载(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 路径正确:
打开文件: [hdd_temp_monitor.service]
关键配置:
ExecStart=/usr/local/bin/hdd_temp_monitor.sh User=root
安装服务文件到 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 检查;休眠盘跳过,不唤醒
多盘策略:取所有活跃硬盘温度中的最高值
回退逻辑:全部休眠或找不到硬盘时,写入默认温度(毫摄氏度)
日志包含每次检查的状态与写入值,便于排查
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

小小小tiny
校验提示文案
小小小tiny
校验提示文案