Concept

Managing server fan speed is crucial for maintaining an optimal balance between cooling efficiency and noise levels, especially in environments where temperature control and acoustics are important. Dell servers, like many other enterprise-grade hardware, come equipped with Intelligent Platform Management Interface (IPMI) capabilities. With the help of ipmi-tools, we can access and control various hardware components of the server, including fan speed, remotely or locally, without needing direct access to the operating system.

Here, I will walk through some of the basics of how you can control the fan speed of your iDRAC-enabled Dell servers.

Steps involved

Step 1: Install impitools & enable IPMI access on device

You will need to install ipmitool

sudo apt install ipmitool   # For Debian/Ubuntu
sudo yum install ipmitool   # For RHEL/CentOS

Step 2: Verify IPMI Access

First, verify that you can communicate with the IPMI interface using the ipmitool command. If you’re accessing a remote server, you’ll use the -H flag for the server’s IP address, the -U flag for the username, and the -P flag for the password.

Run the following command to check IPMI connection and get a system status overview:

ipmitool -I lanplus -H <BMC-IP> -U <username> -P <password> sdr

This should return sensor data, including fan speeds, temperatures, and voltages.

Step 3: Check Current Fan Speed

To view the current fan speed, use the following command:

bash Copy code ipmitool -I lanplus -H -U -P sensor list | grep -i fan This will display all the fans in your system along with their current RPM (revolutions per minute). Understanding the current fan speeds will help when making adjustments later.

Commands to copy

Replace <BMC-IP>, <username>, <password>

Enable manual fan control: ipmitool -I lanplus -H <BMC-IP> -U <username> -P <password> raw 0x30 0x30 0x01 0x00

Disable manual fan control: ipmitool -I lanplus -H <BMC-IP> -U <username> -P <password> raw 0x30 0x30 0x01 0x01

Set a specific fan speed: ipmitool -I lanplus -H <BMC-IP> -U <username> -P <password> raw 0x30 0x30 0x02 0xff <fan-speed>

To break this command out;

  • The 0xff indicates that this command applies to all fans
  • The <fan-speed> indicates the fan speed (in hexadecimal)

Some examples of specific fan speed commands:

Set fan speed to 10%: ipmitool -I lanplus -H <BMC-IP> -U <username> -P <password> raw 0x30 0x30 0x02 0xff 0x0A

Set fan speed to 20%: ipmitool -I lanplus -H <BMC-IP> -U <username> -P <password> raw 0x30 0x30 0x02 0xff 0x14

Set fan speed to 30%: ipmitool -I lanplus -H <BMC-IP> -U <username> -P <password> raw 0x30 0x30 0x02 0xff 0x1E

Set fan speed to 50%: ipmitool -I lanplus -H <BMC-IP> -U <username> -P <password> raw 0x30 0x30 0x02 0xff 0x32

Set fan speed to 100%: ipmitool -I lanplus -H <BMC-IP> -U <username> -P <password> raw 0x30 0x30 0x02 0xff 0x64

To enable fan control and set the speed to 30%:

ipmitool -I lanplus -H <BMC-IP> -U <username> -P <password> raw 0x30 0x30 0x01 0x00
ipmitool -I lanplus -H <BMC-IP> -U <username> -P <password> raw 0x30 0x30 0x02 0xff 0x1E

Some notes about recent-ish iDRAC updates

After iDRAC 9 version3.30.30.30, fan control has been disabled by Dell. Some forum posts here on Dell’s support page indicate that this was done to prevent inadvertant damage to servers from people like me doing stuff like this. This is both a fair point, but also somewhat frustrating for those of us running these in more acoustically-sensitive environments.

There is a downgrade path that worked for me (from this Reddit thread): 7.00.00.00 -> 6.10.80.00 -> 6.00.02.00 -> 5.10.50.00 -> 5.00.00.00 -> 4.40.40.00 -> 4.40.10.00 -> 4.00.00.00 -> 3.30.30.30

Though obviously YMMV, and I don’t take any responsibility for anything good/bad that happens.

References and further reading