diff --git a/almost_oneliners/ipmi-limit-fans.sh b/almost_oneliners/ipmi-limit-fans.sh new file mode 100644 index 0000000..457dc13 --- /dev/null +++ b/almost_oneliners/ipmi-limit-fans.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +# This script limits the threshholds of the superloud supermicro fans to more +# manageable values, if used as is (instead of swapping fans for e.g. noctua fans). +# Put this in e.G. /etc/init.d/ , because values are reverted on powerloss. + +# set limits in 64 steps from 00-FF (convert to hex!): +# 0x00 == 0% / minimal +# ... +# 0x16 == 25% +# 0x24 == 37.5% +# 0x32 == 50% +# ... +# 0x64 == 100% / fullspeed + +LIMIT="0x16" + +# number of fans installable on given mainboard (check with e.G. `ipmitool sdr | grep -i rpm`) +FANCOUNT="8" + +# fan critical limits + +LNR="300" # Lower Non-Recoverable +LC="500" # Lower Critical +LNC="700" # Lower Non-Critical + +UNC="10000" # Upper Non-Critical +UC="10500" # Upper Critical +UNR="11000" # Upper Non-Recoverable + +# check availability of ipmitool +if + which ipmitool >/dev/null +then + echo "ipmitool available. Continue." +else + echo "ipmitool not installed. Aborting." + exit 1 +fi + +# limit upper and lower values for fans 1-8 to non-unrealistic values +for fan in $(seq 1 $FANCOUNT); do + /usr/bin/ipmitool sensor thresh FAN$fan upper $UNC $UC $UNR + /usr/bin/ipmitool sensor thresh FAN$fan lower $LNR $LC $LNC +done + +echo "set fan mode to full (needed for static control) and let things settle" +/usr/bin/ipmitool raw 0x30 0x45 0x01 0x01; sleep 10 + +echo "set fans in "system" zone to 25% and let things settle" +/usr/bin/ipmitool raw 0x30 0x70 0x66 0x01 0x00 $LIMIT; sleep 5 + +echo "set fans in "peripheral" zone to 25% and let things settle" +/usr/bin/ipmitool raw 0x30 0x70 0x66 0x01 0x01 $LIMIT; sleep 5 + +echo "all done"