继上一篇[《Linux根据硬盘温度调节风扇转速第二篇》](https://www.tianlingzi.top/archives/190/),由于这个脚本可能会唤醒休眠中的硬盘,因此需要用其他工具针对性的监控指定硬盘。 先上脚本: ``` #!/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还是 Loading... 继上一篇[《Linux根据硬盘温度调节风扇转速第二篇》](https://www.tianlingzi.top/archives/190/),由于这个脚本可能会唤醒休眠中的硬盘,因此需要用其他工具针对性的监控指定硬盘。 先上脚本: ``` #!/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还是 最后修改:2025 年 07 月 04 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏