Für meinen Server und für meine OPNsense Firewall verwende ich Mainboards von Supermicro, die mit professionellen Features ausgestattet sind. U.a. auch mit einem IPMI-Chip, der die Remote-Bedienung des Servers ermöglicht. Kurz gesagt ermöglicht der IPMI Chip, dass man an seinem Server eigentlich keinen Monitor mehr benötigt. Die Administration erfolgt z.B. über den Webbrowser.

Leider lassen sich aber nicht alle Settings über die Weboberfläche erledigen: Bei der Verwendung von langsam drehenden Lüftern bekommt man nicht nur unschöne Alarmmeldungen, sondern der Lüfter wird immer wieder auf die maximale Drehzahl hochgejagt.

Der Supermicro-Standard Lüfter FAN-0065L4 für Gehäuse mit 1HE sind doch „etwas“ laut, immerhin drehen die Dinger mit bis zu 13.000 U/min. Wobei sie selbst im Normalbetrieb mit 7.200 U/min unterwegs sind, was immer noch nervig ist.

Will man also einen leiseren 40mm-Lüfter einsetzen, z.B. den Noctua NF-A4x20 PWM erhält man als „Dank“ vom System die Fehlermeldung, dass die untere Drehzahlschwelle unterschritten wurde und der Lüfter geht für einen Moment auf „Vollgas“, wird wieder langsamer und erzeugt erneut die Fehlermeldung inkl. hochdrehenden Lüfter.

Das liegt an den Drehzahlschwellwerten im BIOS, die zu hoch eingestellt sind. Leider kann man diese Schwellwerte nicht über IPMI einstellen, aber es gibt unter Linux eine elegante Möglichkeit: Das ipmitool, welches sich einfach aus den Paketquellen installieren lässt. Übrigens: Das Tool muss nicht auf dem betreffenden Server laufen, sondern kann auch über das Netzwerk auf zugreifen.

Das IPMI-Tool

Als erstes installiert man sich das ipmi-Tool, z.B. unter Debian-Derivaten (Ubuntu und Co.) mit folgenden Kommando:

sudo apt install ipmitool

In der Regel kann das Board mehrere Lüfter ansteuern, weshalb wir rausfinden müssen, welche Lüfternummer uns Schwierigkeiten bereitet. Dazu setzen wir den folgenden Befehl ab, wobei bei -H die IP der IPMI Schnittstelle folgen muss und nach -U der Username und nach -P dass Passwort für die Anmeldung an der IPMI-Schnittstelle.

ipmitool -H 192.168.X.X -U IPMIUSERNAME -P IPMIPASSWORD sel elist

Ich habe dabei eine lange Liste an kommende (Asserted) und gehende (Deasserted) Meldungen für das unterschreiten der Umdrehungsschwellwertes (Lower Cirtical going low) erhalten. Vorne das Datum und die Uhrzeit der Fehlermeldung gefolgt von der Nummer des Lüfters (Fan FAN1). Wir müssen also den Schwellwert (Threshold) des Lüfters FAN1 korrigieren.

bc | 08/27/2020 | 07:40:09 | Fan FAN1 | Lower Critical going low  | Deasserted | Reading 1300 < Threshold 500 RPM

bd | 08/27/2020 | 07:40:17 | Fan FAN1 | Lower Critical going low  | Asserted | Reading 500 < Threshold 500 RPM

Dazu lesen wir uns zuerst die Schwellwerte des FAN1 aus:

ipmitool -H 192.168.X.X -U IPMIUSERNAME -P IPMIPASSWORD sensor get "FAN1"

Die interessanten Grenzwerte finden wir unter Lower Non-Recoverable, Lower Cirtical und Lower Non-Cirtical:

Locating sensor record...
Sensor ID              : FAN1 (0x41)
Entity ID             : 29.1
Sensor Type (Threshold)  : Fan
Sensor Reading        : 500 (+/- 0) RPM
Status                : ok
Lower Non-Recoverable : 300.000
Lower Critical        : 500.000
Lower Non-Critical    : 700.000
Upper Non-Critical    : 25300.000
Upper Critical        : 25400.000
Upper Non-Recoverable : 25500.000
Positive Hysteresis   : 100.000
Negative Hysteresis   : 100.000
Assertion Events      :  
Assertions Enabled    : lcr- lnr- ucr+ unr+  
Deassertions Enabled  : lcr- lnr- ucr+ unr+

Diese drei Schwellwerte setzen wir entsprechend herunter. Die neuen Werte für Lower Non-Recoverable (100), Lower Cirtical (200) und Lower Non-Cirtical (300) werden in einem Schwung übergeben:

ipmitool -H 192.168.X.X -U IPMIUSERNAME -P IPMIPASSWORD sensor thresh "FAN1" lower 100 200 300

Jetzt kontrollieren wir noch, ob die neuen Werte sauber gesetzt sind, in dem wir die Werte auslesen:

ipmitool -H 192.168.X.X -U IPMIUSERNAME -P IPMIPASSWORD sensor get "FAN1"
Locating sensor record...
Sensor ID              : FAN1 (0x41)
Entity ID             : 29.1
Sensor Type (Threshold)  : Fan
Sensor Reading        : 500 (+/- 0) RPM
Status                : ok
Lower Non-Recoverable : 100.000
Lower Critical        : 200.000
Lower Non-Critical    : 300.000
Upper Non-Critical    : 25300.000
Upper Critical        : 25400.000
Upper Non-Recoverable : 25500.000
Positive Hysteresis   : 100.000
Negative Hysteresis   : 100.000
Assertion Events      :  
Assertions Enabled    : lcr- lnr- ucr+ unr+  
Deassertions Enabled  : lcr- lnr- ucr+ unr+

Wir sehen, die Werte wurden sauber gesetzt. Dreht der Lüfter immer noch hoch und es kommen immer noch die Fehlermeldungen, dann muss der IPMI zurückgesetzt bzw. neu gestartet werden.

Die erledigt man im Webmenü unter Maintenance -> Unit Reset. Danach sollten die neuen Werte sauber benutzt werden und der Lüfter wie erwartet arbeiten. Ein gern gemachter Fehler ist übrigens, den Server neu zu starten. Das hat nur leider keinen Einfluss auf das IPMI-Modul 😉

IPMI neu starten