飞牛OS在CoolerControl中添加SAS硬盘温度实现风扇与硬盘温度联动

看了大佬的文章有所启发,大佬提到无法检测到直通卡连接硬盘的温度,正好我使用的是sas硬盘,想利用smartctl工具将sas硬盘的数据提供给CoolerControl来实现。本人不懂编程,内容主要借助deepseek完成。ssh软件是Finalshell。

下面开始正文吧。
一、CoolerControl环境安装,参考大佬链接。
二、安装smartctl
sudo apt update
sudo apt install smartmontools jq lm-sensors # smartmontools 包含 smartctl, jq 用于解析 JSON (可选), lm-sensors 用于检查 hwmon
三、确定温度数据来源
①确定 SAS 硬盘设备路径
SAS 硬盘通常使用 /dev/sgX (SCSI Generic) 或 /dev/bsg/* (Block SCSI Generic) 设备节点。/dev/sdX 节点可能无法用于 smartctl 的 SAS 查询。
使用以下命令查找你的 SAS 硬盘:
sudo smartctl –scan

sudo smartctl --scan-open

ls /dev/sg* # 查看 SCSI Generic 设备
ls /dev/bsg/ # 查看 Block SCSI Generic 设备
找到你的目标 SAS 硬盘对应的设备,例如 /dev/sg2 或 /dev/bsg/6:0:0:0。记录下这个路径。
②测试 smartctl 读取 SAS 温度
使用 smartctl 的 -A (所有属性) 或 -d sat / -d scsi 等参数尝试读取。对于 SAS,-d scsi 通常是需要的:
sudo smartctl -a -d scsi /dev/sg0 # “sg0”替换为你的设备

在输出信息中搜索温度值。关键词通常是 Temperature 或 Current Drive Temperature(我显示的是Current Drive Temperature)。注意: SAS 温度的单位通常是 Celsius,并且值可能直接是摄氏度数值(如 40),或者是以 40 (Min/Max ...) 这样的形式出现。找到确切的温度数值行及其格式非常重要。
我的输出是“Current Drive Temperature”,目前我们知道了温度数字的来源了。
利用下面的代码测试一下是不是能把温度数字提取出来,多试后续脚本用的就是这个数据。
sudo smartctl -A -d scsi /dev/sg0 | grep -i "Current Drive Temperature" | awk '{print $4}'
其中grep -i "Current Drive Temperature”":查找包含 "Temperature" 的行(不区分大小写)。
awk '{print $4}':打印该行的第4个字段(空格分隔)。你需要根据你的 smartctl -A 实际输出调整 $4 这个列号! 观察输出,确定温度数值所在的列位置。
输出41和上一个代码的中反馈的温度信息对应,证明代码没问题。三、创建文件给CoolerControl作为温度数据来源
CoolerControl 支持从文件读取温度数据,这是更简单且更安全的方法。
①创建温度数据文件
sudo mkdir -p /var/run/sensors/
sudo touch /var/run/sensors/sas_hdd0_temp
sudo chmod 666 /var/run/sensors/sas_hdd0_temp # 确保所有用户可读写

其中“sas_hdd_temp”为温度文件,多个sas硬盘可以创建多个“sas_hddX_temp”,一个文件对应一个自定义传感器
②编写更新脚本
创建sudo nano /usr/local/bin/update_sas_temp.sh,脚本代码如下:
#!/bin/bash
# SAS 硬盘设备路径 (根据您的实际设备修改,和前面第三节有关)
SAS_DEVICE="/dev/sg0"
# 温度数据文件(和上一步创建的温度数据文件有关)
TEMP_FILE="/var/run/sensors/sas_hdd0_temp"
# 获取温度值(摄氏度)-和第三节②测试的内容一致"Current Drive Temperature"和print $4按测试成功的数据调整。
TEMP_C=$(sudo smartctl -A -d scsi "$SAS_DEVICE" | grep -i "Current Drive Temperature" | awk '{print $4}')
# 检查是否成功获取温度
# 将温度值转换为毫摄氏度(在数值后加三个零,因为CoolerControl识别的毫摄氏度)
TEMP_MILLIC="${TEMP_C}000"
# 将温度值写入文件(单位:摄氏度)
echo "$TEMP_MILLIC" > "$TEMP_FILE"
else
echo "无法读取 SAS 硬盘温度" >&2
fi

ctrl+x再输入yes保存再按回车返回上一层
给脚本执行权限
sudo chmod +x /usr/local/bin/update_sas_temp.sh

可以运行下面代码,看脚本有没有错误
sudo /usr/local/bin/update_sas_temp.sh
有条件的可以看一下/var/run/sensors/sas_hdd0_temp有没有生成数据,输出41000也就是41度。

③设置定时任务
编辑 root 的 cron 任务
sudo crontab -e
添加以下内容(每分钟更新一次)
* * * * * /usr/local/bin/update_sas_temp.sh

四、配置 CoolerControl
打开 CoolerControl
转到左边栏“+” > 自定义传感器

点击"自定义传感器"
选择类型为"文件"

配置参数:
文件路径:/var/run/sensors/sas_hdd0_temp
传感器名称:SAS HDD Temperature
保存配置
最终效果五、总结
有多个硬盘就根据上述步骤创建多个温度来源文件添加在多个CoolerControl添加多个自定义传感器。
风扇与硬盘联动请参考大佬的文章,图形化的截面还是挺直观地。
最后说一下deepseek真强,让小白也可以尝试,还有许多不足请大神指教,大家也可以自己尝试一下,配置过程中有问题也可以问一下deepseek。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

值友9138786268
校验提示文案
值友1542384354
校验提示文案
值友9138786268
校验提示文案
值友1542384354
校验提示文案