网心云OES 刷飞牛后:散热风扇的智能控制方法
前言
网心云OES自带三个2.5硬盘位,由于其设计存在缺陷,造成运行中硬盘温度很高,后面官方第二代虽然改进增加了散热风扇。但是刷了第三方固件后,风扇不能调用,现在折腾方法分享出来。
智能风扇温控脚本安装指南
一、创建智能温控脚本(根据温度自动调整风扇速度)
1. 使用 cat 命令直接创建(推荐)
# 方法:使用 sudo 直接创建到 /usr/local/bin
sudo tee /usr/local/bin/fan_control.sh << 'EOF'
将以下脚本内容粘贴进去,然后输入大写的 EOF 并回车完成创建:
#!/bin/bash
# /usr/local/bin/smart_fan_control.sh
# 智能温控:根据温度自动调整风扇速度
FAN_HWMON="/sys/class/hwmon/hwmon2"
TEMP_SOURCE="/sys/class/hwmon/hwmon0/temp1_input" # 或 thermal_zone0/temp
# 温度-速度对应表(摄氏度 -> PWM值 0-255)
# 格式:温度阈值:PWM值
TEMP_MAP=(
"40:0" # 40°C以下:停止
"50:80" # 40-50°C:低速
"60:120" # 50-60°C:中低速
"65:160" # 60-65°C:中速
"70:200" # 65-70°C:中高速
"75:230" # 70-75°C:高速
"80:255" # 75°C以上:全速
)
# 获取当前温度(摄氏度)
get_temp() {
if [ -f "$TEMP_SOURCE" ]; then
echo $(($(cat "$TEMP_SOURCE") / 1000))
elif [ -f "/sys/class/thermal/thermal_zone0/temp" ]; then
echo $(($(cat /sys/class/thermal/thermal_zone0/temp) / 1000))
else
echo "无法获取温度" >&2
exit 1
fi
}
# 根据温度计算PWM值
calc_pwm() {
local temp=$1
local pwm=0
local last_pwm=0 # 默认值
for mapping in "${TEMP_MAP[@]}"; do
local threshold="${mapping%:*}"
local speed="${mapping#*:}"
if [ "$temp" -lt "$threshold" ]; then
pwm=$last_pwm
break
fi
last_pwm=$speed
done
# 如果温度超过所有阈值,使用最后一个值
if [ "$pwm" -eq 0 ] && [ "$last_pwm" -ne 0 ]; then
pwm=$last_pwm
fi
echo $pwm
}
# 主程序
echo "启动智能风扇温控系统..."
echo "温度-PWM映射:"
for mapping in "${TEMP_MAP[@]}"; do
echo " ${mapping%:*}: ${mapping#*:}/255"
done
# 设置手动模式
if [ -f "${FAN_HWMON}/pwm1_enable" ]; then
echo 1 | sudo tee "${FAN_HWMON}/pwm1_enable" > /dev/null
fi
last_pwm=-1
while true; do
temp=$(get_temp)
pwm=$(calc_pwm $temp)
# 只在PWM值变化时更新
if [ "$pwm" -ne "$last_pwm" ]; then
echo "$(date '+%H:%M:%S') 温度: ${temp}°C -> PWM: ${pwm}/255"
echo $pwm | sudo tee "${FAN_HWMON}/pwm1" > /dev/null
last_pwm=$pwm
fi
# 每30秒显示一次转速(可选)
if [ $(( $(date +%s) % 30 )) -eq 0 ]; then
if [ -f "${FAN_HWMON}/fan1_input" ]; then
rpm=$(cat "${FAN_HWMON}/fan1_input")
echo " 当前转速: ${rpm}RPM"
fi
fi
sleep 5 # 5秒检查一次
done
注意:粘贴完脚本后,在新的一行输入 EOF(大写)并按回车完成创建。
二、设置脚本权限
# 添加执行权限
sudo chmod +x /usr/local/bin/fan_control.sh
# 验证权限
ls -l /usr/local/bin/fan_control.sh
# 应该显示: -rwxr-xr-x
三、创建系统服务
1. 创建服务文件
sudo tee /etc/systemd/system/fan-control.service << 'EOF'
粘贴以下内容,然后输入大写的 EOF 并回车:
[Unit]
Description=Temperature Controlled Fan Service
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/local/bin/fan_control.sh
Restart=always
RestartSec=10
User=root
[Install]
WantedBy=multi-user.target
四、启动并启用服务
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 启用开机自启动
sudo systemctl enable fan-control.service
# 立即启动服务
sudo systemctl start fan-control.service
# 查看服务状态
sudo systemctl status fan-control.service
五、测试风扇是否正常工作
使用 stress 进行 CPU 压力测试
stress 是一个简单直接的压力测试工具,可以快速创建 CPU、内存、IO 等负载。
1. 安装 stress
sudo apt update
sudo apt install stress
2. 常用命令示例
# 压测所有 CPU 核心(持续 300 秒)
stress -c $(nproc) -t 300s
参数说明:
-c $(nproc):创建与 CPU 核心数量相等的工作线程-t 300s:测试持续 300 秒(可调整:如 120s、10m)
中止测试: 按 Ctrl+C
注意事项
- 硬件路径检查:脚本中的
FAN_HWMON和TEMP_SOURCE路径可能需要根据实际硬件调整 - 温度阈值:可根据需要修改
TEMP_MAP中的温度-PWM对应关系 - 权限问题:确保脚本有正确的执行权限
- 日志查看:可使用
sudo journalctl -u fan-control.service -f实时查看服务日志
安装完成后,运行 stress 测试,观察风扇转速是否随温度升高而增加。
