Пользователь sksbir с соседнего форума https://forum.asustor.com/viewtopic.php?f=97&t=8948 обновил скрипт управления оборотов вентилятора. Добавил поддержку многовентиляторных NAS и NVME носителей.
Содержание скрипта управлением вентиляторами:
Код: Выделить всё
#!/bin/sh
# designed by sksbir
# https://forum.asustor.com/viewtopic.php?f=97&t=8948
# 20220422 : added nvme device, using smartctl --scan for device recognition , managing multiple fans, more agressive fan reaction in case of temperature elevation.
if [ "$1" = "-v" ]
then
VERBOSE=1
fi
DEF_DESIREDPOWER=75 # from about 30 to 255
CYCLETEMPCHECK=12 # every how many 10" cycles we check for temp changes. 6 = every mn
#
# temperature to power grid : GRIDxx=yy : we want power of yy if temp is xx
GRID15=30 ; GRID16=30 ; GRID17=30 ; GRID18=31 ; GRID19=33
GRID20=35 ; GRID21=37 ; GRID22=39 ; GRID23=41 ; GRID24=44
GRID25=47 ; GRID26=50 ; GRID27=54 ; GRID28=59 ; GRID29=65
GRID30=68 ; GRID31=70 ; GRID32=72 ; GRID33=74 ; GRID34=75
GRID35=77 ; GRID36=79 ; GRID37=82 ; GRID38=84 ; GRID39=85
GRID40=86 ; GRID41=88 ; GRID42=90 ; GRID43=92 ; GRID44=94
GRID45=96 ; GRID46=105 ; GRID47=110 ; GRID48=135 ; GRID49=160
GRID50=170 ; GRID51=175 ; GRID52=180 ; GRID53=185 ; GRID54=190
GRID55=195 ; GRID56=200 ; GRID57=210 ; GRID58=220 ; GRID59=230
GRID60=250 ; GRID61=250 ; GRID62=250 ; GRID63=250 ; GRID64=250
#
# let's learn devices which have temperature sensors
#
HOTTESTDISKTEMP=15
LSTDEVICES=""
for DSKDEV in `smartctl --scan|awk ' { print $1 } ' `
do
echo $DSKDEV|grep nvm >/dev/null 2>&1
if [ $? -eq 0 ]
then
TSTTEMP=`smartctl --all $DSKDEV|awk '/^Temperature:.*Celsius/ { print $2 } '`
else
TSTTEMP=`smartctl --all $DSKDEV|awk '/^194/ { print $10 } '`
fi
if [ "$TSTTEMP" != "" ]
then
if [ \( "$TSTTEMP" -gt 15 \) -a \( "$TSTTEMP" -lt 70 \) ]
then
[ $VERBOSE ] && echo $DSKDEV added to list with recognized temp of $TSTTEMP
LSTDEVICES="$LSTDEVICES $DSKDEV"
fi
fi
done
[ $VERBOSE ] && echo Retained devices for temperature check : $LSTDEVICES
FANLIST=`fanctrl -getfanspeed|awk ' { print $1 } '`
[ $VERBOSE ] && echo valid fanlist : $FANLIST
# DESIREDPOWER=$DEF_DESIREDPOWER # from about 30 to 255
DESIREDPOWER=`fanctrl -getfanspeed|awk ' { print $NF } '|head -1`
COUNTDWN=0
CPT=0
DELAY=1 # initial loop = no delay
while :
do
#
# temperature check
#
if [ $COUNTDWN -le 0 ]
then
COUNTDWN=$CYCLETEMPCHECK
# we almost cancel pause because this loop consumes time.
DELAY=1
NEW_HOTTESTDISKTEMP=15
for DSKDEV in $LSTDEVICES
do
echo $DSKDEV|grep nvm >/dev/null 2>&1
if [ $? -eq 0 ]
then
TSTTEMP=`smartctl --all $DSKDEV|awk '/^Temperature:.*Celsius/ { print $2 } '`
else
TSTTEMP=`smartctl --all $DSKDEV|awk '/^194/ { print $10 } '`
fi
if [ "$TSTTEMP" -gt $NEW_HOTTESTDISKTEMP ]
then
NEW_HOTTESTDISKTEMP=$TSTTEMP
fi
done
NEW_DESIREDPOWER=`eval echo \\\$GRID$NEW_HOTTESTDISKTEMP`
if [ "$NEW_DESIREDPOWER" = "" ]
then
NEW_DESIREDPOWER=$DEF_DESIREDPOWER
fi
if [ $HOTTESTDISKTEMP != $NEW_HOTTESTDISKTEMP ]
then
if [ $DESIREDPOWER != $NEW_DESIREDPOWER ]
then
[ $VERBOSE ] && echo `date +%Y%m%d_%T` hottest disk changed from $HOTTESTDISKTEMP to $NEW_HOTTESTDISKTEMP,raising fanpower from $DESIREDPOWER to $NEW_DESIREDPOWER
DESIREDPOWER=$NEW_DESIREDPOWER
else
[ $VERBOSE ] && echo `date +%Y%m%d_%T` hottest disk changed from $HOTTESTDISKTEMP to $NEW_HOTTESTDISKTEMP,fanpower leaved unchanged at $DESIREDPOWER
fi
HOTTESTDISKTEMP=$NEW_HOTTESTDISKTEMP
## else
## [ $VERBOSE ] && echo `date +%Y%m%d_%T` hottest disk leaved unchanged at $HOTTESTDISKTEMP ,fanpower leaved unchanged at $DESIREDPOWER
fi
fi
#
# fan override loop
#
CURRPOWER=`fanctrl -getfanspeed|awk ' { print $NF } ' `
if [ $DESIREDPOWER -ne $CURRPOWER ]
then
for FANID in $FANLIST
do
fanctrl -setfanpwm $FANID $DESIREDPOWER
done
## echo $CURRPOWER to $DESIREDPOWER CPT : $CPT
CPT=0
COUNTDWN=`expr $COUNTDWN - 1`
sleep $DELAY
DELAY=9
else
sleep 0.1
CPT=`expr $CPT + 1`
fi
done
Код: Выделить всё
GRID15=31 ; GRID16=31 ; GRID17=31 ; GRID18=31 ; GRID19=31
GRID20=31 ; GRID21=31 ; GRID22=31 ; GRID23=32 ; GRID24=32
GRID25=32 ; GRID26=33 ; GRID27=34 ; GRID28=36 ; GRID29=38
GRID30=40 ; GRID31=42 ; GRID32=44 ; GRID33=46 ; GRID34=48
GRID35=50 ; GRID36=52 ; GRID37=54 ; GRID38=56 ; GRID39=58
GRID40=60 ; GRID41=62 ; GRID42=64 ; GRID43=66 ; GRID44=68
GRID45=70 ; GRID46=75 ; GRID47=80 ; GRID48=85 ; GRID49=90
GRID50=100 ; GRID51=110 ; GRID52=120 ; GRID53=130 ; GRID54=140
GRID55=150 ; GRID56=160 ; GRID57=170 ; GRID58=190 ; GRID59=210
GRID60=250 ; GRID61=250 ; GRID62=250 ; GRID63=250 ; GRID64=250
Код: Выделить всё
#!/bin/sh
LOGFILE=<YOUR_PATH_HERE>/fanspeed.log
case "$1" in
start)
fuser $LOGFILE
if [ $? -eq 1 ]
then
<YOUR PATH_HERE>/smart_fanspeed.sh -v > $LOGFILE 2>&1 &
fi
;;
esac