#!/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"