收起左侧

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

5
回复
545
查看
[ 复制链接 ]

10

主题

54

回帖

0

牛值

初出茅庐

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

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

image.png

image.png

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

image.png

需要注意一个关键细节:由于 CoolerControl 是以 Docker 容器方式运行的,因此必须确保写入的温度文件位于 Docker 映射的目录中,否则容器内的 CoolerControl 将无法读取到这些数据。

其余配置与 @bingo_qBrWX 原文中所述基本一致。唯一的区别是,我没有使用 drivetemp 模块来获取温度。因为有用户反馈 drivetemp 同样可能导致休眠硬盘被唤醒,所以我选择不加载该模块,而是直接通过 smartctl 命令读取硬盘 SMART 信息中的温度数据。

脚本:**upload 附件: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

前置条件

  • 以 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 检查;休眠盘跳过,不唤醒
  • 多盘策略:取所有活跃硬盘温度中的最高值
  • 回退逻辑:全部休眠或找不到硬盘时,写入默认温度(毫摄氏度)
  • 日志包含每次检查的状态与写入值,便于排查
收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

5

回帖

0

牛值

江湖小虾

我的主板是nct6798,我观察了几天好像没这个问题

我的硬盘一直被唤醒!  详情 回复
3 天前

10

主题

54

回帖

0

牛值

初出茅庐

3 天前 楼主 显示全部楼层
uio 发表于 2026-1-4 16:44
我的主板是nct6798,我观察了几天好像没这个问题

我的硬盘一直被唤醒!

10

主题

54

回帖

0

牛值

初出茅庐

前天 14:54 楼主 显示全部楼层

脚本用服务启动,稳定运行了2天,备份盘再没有被无缘无故的唤醒了! 读取硬盘温度调节风扇功能正常!

2

主题

23

回帖

0

牛值

江湖小虾

怎么看自己主机支持不支持软件调节风扇速度?

看这个文章 里面讲的很清晰了! 我照着弄得! 主要就是看驱动能不能加载上 飞牛安装CoolerControl进行风扇转速自定义(含传感器驱动安装) https://club.fnnas.com/forum.php?mod=viewthread&tid=32626 (出处: 飞牛私  详情 回复
前天 17:30

10

主题

54

回帖

0

牛值

初出茅庐

前天 17:30 楼主 显示全部楼层
斑马鱼 发表于 2026-1-5 16:49
怎么看自己主机支持不支持软件调节风扇速度?

看这个文章 里面讲的很清晰了! 我照着弄得! 主要就是看驱动能不能加载上
飞牛安装CoolerControl进行风扇转速自定义(含传感器驱动安装)
https://club.fnnas.com/forum.php?mod=viewthread&tid=32626
(出处: 飞牛私有云论坛 fnOS)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则