在 Linux 系统中,有的时候我们需要根据实际需要调节风扇转速,特别是私人存储服务的场景中,要保证硬盘正常运行的同时,有效降低噪音并节约能源要兼顾安静又需要兼顾硬盘散热,。 在现有的工具中,已经有fancontrol、HDDFanControl可以控制风扇转速,后者可以直接根据硬盘温度调节特定风扇。已经很方便了。 但是我是用的存储系统是OpenMediaVault,不知道为什么我安装的HDDFanControl就不起作用,明明也能识别到风扇。试了很多种方法还是不行,因此有了本篇文章这种另辟蹊径的方法:通过脚本来控制。 ## 一、所需应用及工具 1. **sensors** :用于获取硬件传感器数据,包括硬盘温度等。 2. **bc** :命令行计算器,用于进行浮点数比较。 3. **cron** :用于定时执行脚本。 ## 二、脚本编写 ```bash #!/bin/bash # 定义温度阈值(摄氏度) TEMP_THRESHOLD=42 # 定义风扇控制文件路径 FAN_CONTROL_PATH="/sys/devices/platform/nct6775.656/hwmon/hwmon5/pwm4" # 定义日志文件路径 LOG_FILE="/var/log/temperature_monitor.log" # 函数:获取所有drivetemp-scsi的温度 get_scsi_temps() { sensors | grep "drivetemp-scsi" -A 2 | grep "temp1:" | awk '{print $2}' | tr -d '+°C' } # 主逻辑 get_scsi_temps >/dev/null 2>&1 if [ $? -ne 0 ]; then echo "$(date +'%Y-%m-%d %H:%M:%S') - Failed to get temperature data." >> "$LOG_FILE" exit 1 fi TEMPS=$(get_scsi_temps) OVER_THRESHOLD="0" for temp in $TEMPS; do if (( $(echo "$temp > $TEMP_THRESHOLD" | bc -l) )); then OVER_THRESHOLD="1" break fi done if [ "$OVER_THRESHOLD" = "1" ]; then echo "180" > "$FAN_CONTROL_PATH" echo "$(date +'%Y-%m-%d %H:%M:%S') - Temperature over threshold ($TEMP_THRESHOLD°C). Setting fan speed to 180." >> "$LOG_FILE" else echo "0" > "$FAN_CONTROL_PATH" echo "$(date +'%Y-%m-%d %H:%M:%S') - All temperatures below threshold ($TEMP_THRESHOLD°C). Setting fan speed to 0." >> "$LOG_FILE" fi ``` ## 三、脚本说明 1. 脚本首先定义了温度阈值、风扇控制文件路径和日志文件路径。 2. `get_scsi_temps` 函数用于获取所有 `drivetemp-scsi` 设备的温度。 3. 主逻辑部分检查每个温度是否超过阈值,根据检查结果设置风扇速度并记录日志。 ## 四、使用 cron 定时执行脚本 1. 编辑 `crontab`: ```bash crontab -e ``` 2. 添加以下行来每 5 分钟运行一次脚本: ```bash */5 * * * * /bin/bash /root/monitor_temps.sh ``` ## 五、总结 通过上述步骤,我们成功实现了根据硬盘温度动态调整风扇转速的功能。这有助于在保证硬盘正常运行的同时,降低噪音并节约能源。在实际应用中,你可以根据需要调整温度阈值、风扇控制文件路径等参数,以适应不同的系统环境。 不过这个脚本适合硬盘24小时待机的情况,因为在获取温度信息的时候会有可能唤醒硬盘。后面另外再附上适合硬盘休眠的脚本,可以只针对唤醒的硬盘进行监控。 [post cid="193" cover="" size=""/] Loading... 在 Linux 系统中,有的时候我们需要根据实际需要调节风扇转速,特别是私人存储服务的场景中,要保证硬盘正常运行的同时,有效降低噪音并节约能源要兼顾安静又需要兼顾硬盘散热,。 在现有的工具中,已经有fancontrol、HDDFanControl可以控制风扇转速,后者可以直接根据硬盘温度调节特定风扇。已经很方便了。 但是我是用的存储系统是OpenMediaVault,不知道为什么我安装的HDDFanControl就不起作用,明明也能识别到风扇。试了很多种方法还是不行,因此有了本篇文章这种另辟蹊径的方法:通过脚本来控制。 ## 一、所需应用及工具 1. **sensors** :用于获取硬件传感器数据,包括硬盘温度等。 2. **bc** :命令行计算器,用于进行浮点数比较。 3. **cron** :用于定时执行脚本。 ## 二、脚本编写 ```bash #!/bin/bash # 定义温度阈值(摄氏度) TEMP_THRESHOLD=42 # 定义风扇控制文件路径 FAN_CONTROL_PATH="/sys/devices/platform/nct6775.656/hwmon/hwmon5/pwm4" # 定义日志文件路径 LOG_FILE="/var/log/temperature_monitor.log" # 函数:获取所有drivetemp-scsi的温度 get_scsi_temps() { sensors | grep "drivetemp-scsi" -A 2 | grep "temp1:" | awk '{print $2}' | tr -d '+°C' } # 主逻辑 get_scsi_temps >/dev/null 2>&1 if [ $? -ne 0 ]; then echo "$(date +'%Y-%m-%d %H:%M:%S') - Failed to get temperature data." >> "$LOG_FILE" exit 1 fi TEMPS=$(get_scsi_temps) OVER_THRESHOLD="0" for temp in $TEMPS; do if (( $(echo "$temp > $TEMP_THRESHOLD" | bc -l) )); then OVER_THRESHOLD="1" break fi done if [ "$OVER_THRESHOLD" = "1" ]; then echo "180" > "$FAN_CONTROL_PATH" echo "$(date +'%Y-%m-%d %H:%M:%S') - Temperature over threshold ($TEMP_THRESHOLD°C). Setting fan speed to 180." >> "$LOG_FILE" else echo "0" > "$FAN_CONTROL_PATH" echo "$(date +'%Y-%m-%d %H:%M:%S') - All temperatures below threshold ($TEMP_THRESHOLD°C). Setting fan speed to 0." >> "$LOG_FILE" fi ``` ## 三、脚本说明 1. 脚本首先定义了温度阈值、风扇控制文件路径和日志文件路径。 2. `get_scsi_temps` 函数用于获取所有 `drivetemp-scsi` 设备的温度。 3. 主逻辑部分检查每个温度是否超过阈值,根据检查结果设置风扇速度并记录日志。 ## 四、使用 cron 定时执行脚本 1. 编辑 `crontab`: ```bash crontab -e ``` 2. 添加以下行来每 5 分钟运行一次脚本: ```bash */5 * * * * /bin/bash /root/monitor_temps.sh ``` ## 五、总结 通过上述步骤,我们成功实现了根据硬盘温度动态调整风扇转速的功能。这有助于在保证硬盘正常运行的同时,降低噪音并节约能源。在实际应用中,你可以根据需要调整温度阈值、风扇控制文件路径等参数,以适应不同的系统环境。 不过这个脚本适合硬盘24小时待机的情况,因为在获取温度信息的时候会有可能唤醒硬盘。后面另外再附上适合硬盘休眠的脚本,可以只针对唤醒的硬盘进行监控。 <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://www.tianlingzi.top/archives/193/" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://www.tianlingzi.top/usr/themes/handsome/assets/img/sj/2.jpg);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">Linux根据硬盘温度调节风扇转速第二篇</p> <div class="inster-summary text-muted"> 继上一篇《Linux根据硬盘温度调节风扇转速第二篇》,由于这个脚本可能会唤醒休眠中的硬盘,因此需要用其他工具针对性... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> 最后修改:2025 年 07 月 04 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏
1 条评论
[...]Linux根据硬盘温度调节风扇转速[...]