继上一篇《Linux根据硬盘温度调节风扇转速第二篇》,由于这个脚本可能会唤醒休眠中的硬盘,因此需要用其他工具针对性的监控指定硬盘。
先上脚本:
#!/bin/bash
# 硬盘温度控制风扇转速脚本
# 风扇控制路径,需要根据自己的机器文件位置进行设置
FAN_PATH="/sys/devices/platform/nct6775.656/hwmon/hwmon5/pwm4"
# 高温阈值(摄氏度)
TEMP_THRESHOLD=42
# 指定要监控的硬盘
DISK_LIST=("/dev/sda" "/dev/sdb" "/dev/sdd" "/dev/sde" "/dev/sdf" "/dev/sdg")
# 检查硬盘是否活动并获取温度
for disk in "${DISK_LIST[@]}"; do
# 检查硬盘是否存在
if [ ! -e "$disk" ]; then
echo "硬盘 $disk 不存在,跳过..."
continue
fi
# 使用hdparm检查硬盘电源模式
power_mode=$(hdparm -C "$disk" 2>/dev/null | grep -i 'power mode' | awk '{print $3}')
if [ "$power_mode" != "active" ]; then
echo "硬盘 $disk 当前状态为 $power_mode,跳过温度检测..."
continue
fi
# 获取硬盘温度
temp=$(smartctl -A "$disk" 2>/dev/null | grep -i 'temperature' | awk '{print $10}')
# 检查是否成功获取温度
if [[ -z "$temp" || ! "$temp" =~ ^[0-9]+$ ]]; then
echo "无法获取硬盘 $disk 的温度,跳过..."
continue
fi
echo "硬盘 $disk 温度: $temp°C"
# 检查温度是否超过阈值
if [ "$temp" -gt "$TEMP_THRESHOLD" ]; then
# 高温,设置高风扇转速
echo "硬盘 $disk 温度超过阈值 $TEMP_THRESHOLD°C,设置风扇转速为 180"
echo 180 > "$FAN_PATH"
exit 0 # 一旦发现高温硬盘,立即设置风扇转速并退出
fi
done
# 如果所有硬盘温度都低于阈值,设置低风扇转速
echo "所有指定硬盘温度均低于 $TEMP_THRESHOLD°C,设置风扇转速为 0"
echo 0 > "$FAN_PATH"一、脚本说明
- 使用脚本前,需要设置:PWM风扇的控制文件路径、温度阈值和要监控的硬盘。
- 脚本先使用hdparm工具检测硬盘状态,确认硬盘是active还是