飞牛风扇调速优化 CoolerControl 实现休眠硬盘不被唤醒

2026-01-04 18:19:32 2点赞 12收藏 2评论

参考了 @bingo_qBrWX 的文章《飞牛安装 CoolerControl 进行风扇转速自定义(含传感器驱动安装)》(出处:飞牛私有云论坛 fnOS),我也为自己系统配置了一套基于 CoolerControl 的硬盘温度控制散热方案。实际使用下来确实省心不少,但发现了一个致命问题:读取硬盘温度时会导致处于休眠状态的硬盘被唤醒,这使得我的备份盘频繁启动,无法维持休眠状态,反而得不偿失。

后来我发现,CoolerControl 支持通过读取指定文件来获取温度数据。于是,我请 AI 协助编写了一个脚本,该脚本会先判断硬盘是否处于休眠状态,仅在硬盘已唤醒的情况下才读取其温度,并将结果写入对应文件,供 CoolerControl 读取使用。

飞牛风扇调速优化 CoolerControl 实现休眠硬盘不被唤醒

飞牛风扇调速优化 CoolerControl 实现休眠硬盘不被唤醒

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

飞牛风扇调速优化 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​ 检查;休眠盘跳过,不唤醒

  • 多盘策略:取所有活跃硬盘温度中的最高值

  • 回退逻辑:全部休眠或找不到硬盘时,写入默认温度(毫摄氏度)

  • 日志包含每次检查的状态与写入值,便于排查

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
2评论

  • 精彩
  • 最新
  • 好东西,期待能在应用中心看到

    校验提示文案

    提交
    期待飞牛系统能把风扇控制集成

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
12
扫一下,分享更方便,购买更轻松