Dell Fan Noise Control - Silence Your Poweredge

Link: https://www.reddit.com/r/homelab/comments/7xqb11/dell_fan_noise_control_silence_your_poweredge/ 

 Hey, 

 there were some threads complaining about server noise in this sub the last days. I did some research on how to manually controlling the PowerEdge fans. 

 I read threads on this sub and other boards and found a lot of commands. These are already widely known, but I wanted to list them again. Maybe they will help others. 

 I tested them with my R210II, T620 and T330. So basically a 11th, 12th and 13th generation PowerEdge. Although you might have to change the sensors' names accordingly. 

 ### Dell Fan Control Commands

#

#

# Hex to Decimal: http://www.hexadecimaldictionary.com/hexadecimal/0x1a/

#

#

# print temps and fans rpms

ipmitool -I lanplus -H <iDRAC-IP> -U <iDRAC-USER> -P <iDRAC-PASSWORD> sensor reading "Ambient Temp" "FAN 1 RPM" "FAN 2 RPM" "FAN 3 RPM"

#

# print fan info

ipmitool -I lanplus -H <iDRAC-IP> -U <iDRAC-USER> -P <iDRAC-PASSWORD> sdr get "FAN 1 RPM" "FAN 2 RPM" "FAN 3 RPM"

#

# enable manual/static fan control

ipmitool -I lanplus -H <iDRAC-IP> -U <iDRAC-USER> -P <iDRAC-PASSWORD> raw 0x30 0x30 0x01 0x00

#

# disable manual/static fan control

ipmitool -I lanplus -H <iDRAC-IP> -U <iDRAC-USER> -P <iDRAC-PASSWORD> raw 0x30 0x30 0x01 0x01

#

# set fan speed to 0 rpm

ipmitool -I lanplus -H <iDRAC-IP> -U <iDRAC-USER> -P <iDRAC-PASSWORD> raw 0x30 0x30 0x02 0xff 0x00

#

# set fan speed to 20 %

ipmitool -I lanplus -H <iDRAC-IP> -U <iDRAC-USER> -P <iDRAC-PASSWORD> raw 0x30 0x30 0x02 0xff 0x14

#

# set fan speed to 30 %

ipmitool -I lanplus -H <iDRAC-IP> -U <iDRAC-USER> -P <iDRAC-PASSWORD> raw 0x30 0x30 0x02 0xff 0x1e

#

# set fan speed to 100 %

ipmitool -I lanplus -H <iDRAC-IP> -U <iDRAC-USER> -P <iDRAC-PASSWORD> raw 0x30 0x30 0x02 0xff 0x64 

 I wrote a small script, that will check the servers temperature periodically (crontab) and disables or enables the dynamic fan control based on a temperature threshold. You may have to adjust the time frame depending on your server usage. 

 #!/bin/bash

#

# crontab -l > mycron

# echo "#" >> mycron

# echo "# At every 2nd minute" >> mycron

# echo "*/2 * * * * /bin/bash /scripts/dell_ipmi_fan_control.sh >> /tmp/cron.log" >> mycron

# crontab mycron

# rm mycron

# chmod +x /scripts/dell_ipmi_fan_control.sh

#

DATE=$(date +%Y-%m-%d-%H%M%S)

echo "" && echo "" && echo "" && echo "" && echo ""

echo "$DATE"

#

IDRACIP="<iDRAC-IP>"

IDRACUSER="<iDRAC-USER>"

IDRACPASSWORD="<iDRAC-PASSWORD>"

STATICSPEEDBASE16="0x0f"

SENSORNAME="Ambient"

TEMPTHRESHOLD="29"

#

T=$(ipmitool -I lanplus -H $IDRACIP -U $IDRACUSER -P $IDRACPASSWORD sdr type temperature | grep $SENSORNAME | cut -d"|" -f5 | cut -d" " -f2)

# T=$(ipmitool -I lanplus -H $IDRACIP2 -U $IDRACUSER -P $IDRACPASSWORD sdr type temperature | grep $SENSORNAME2 | cut -d"|" -f5 | cut -d" " -f2 | grep -v "Disabled")

echo "$IDRACIP: -- current temperature --"

echo "$T"

#

if [[ $T > $TEMPTHRESHOLD ]]

 then

 echo "--> enable dynamic fan control"

 ipmitool -I lanplus -H $IDRACIP -U $IDRACUSER -P $IDRACPASSWORD raw 0x30 0x30 0x01 0x01

 else

 echo "--> disable dynamic fan control"

 ipmitool -I lanplus -H $IDRACIP -U $IDRACUSER -P $IDRACPASSWORD raw 0x30 0x30 0x01 0x00

 echo "--> set static fan speed"

 ipmitool -I lanplus -H $IDRACIP -U $IDRACUSER -P $IDRACPASSWORD raw 0x30 0x30 0x02 0xff $STATICSPEEDBASE16

fi