logo rss

Dell PowerEdge T620 : Comment diminuer la vitesse des ventilateurs avec IPMI

Logo Dell Dell PowerEdge T620

J'ai du récemment remplacer des disques mécaniques certifiés Dell par des disques SSD grand public sur un serveur PowerEdge T620 et j'ai eu la mauvaise surprise de constater que suite à l'insertion de ces derniers les ventilateurs se sont soudainement mis à faire beaucoup de bruit.

Après de rapides recherches, j'ai découvert que c'était un problème connu chez Dell et qu'il n'y avait pas de solution en l'état à part acheter des SSD officiels… (Étant pauvre, il me fallait trouver une autre solution).

Grace à dieu/internet, j'ai trouvé une discussion reddit dans laquelle un utilisateur montrait comment contrôler la vitesse des ventilateurs avec l'utilitaire ipmitool. Merci donc à tatmde.

Je vais détailler ici ce que j'ai utilisé dans mon cas présent.

⚠️ Changer la vitesse des ventilateurs peut entrainer une surchauffe et endommager les composants de façon permanante. Donc faites gaffe! ⚠️ (Dans le même temps laisser les ventilateurs plein pot peut entrainer une perte d''audition donc à choisir…)

Activer l'IPMI over LAN

Pour contrôler la vitesse des ventilateurs à traver le réseau nous aurons besoin d'activer l'IPMI over LAN depuis l'IDRAC.

⚠️ Activer l'IPMI over LAN peut être considéré comme un problème de sécurité dans la mesure ou un utilisateur mal intentionné et disposant du mot de passe aura la possibilité de controler l'état de l'alimentation et également de récupérer des informations du serveur. ⚠️

  • Se connecter sur l'iDRAC, aller dans iDRAC Settings > Network et activer IPMI Over LAN :
Dell IDRAC | activer l'IPMI

L'utilitaire ipmitool

Installation sur GNU/Linux

Installer ipmitool. Ce logiciel va nous permettre de communique avec l'IPMI du serveur.

  • Depuis une distribution Debian entrer la commande suivante :
root@host:~# apt-get install ipmitool

Utiliser ipmitool

Vérifier la température

  • Récupérer les informations sur la température :
user@host:~$ ipmitool -I lanplus -H <iDRAC IP> -U <iDRAC user> -P <iDRAC password> sdr type temperature Inlet Temp | 04h | ok | 7.1 | 21 degrees C Temp | 0Eh | ok | 3.1 | 29 degrees C Temp | 0Fh | ok | 3.2 | 35 degrees C
  • On peut voir la corrélation avec les valeurs présentes dans l'iDRAC :
Dell IDRAC | temperature probes

Contrôler la vitesse des ventilateurs

  • Désactivation du contrôle manuel/statique des ventilateurs (passage en mode par défaut cad automatique) :
user@host:~$ ipmitool -I lanplus -H <iDRAC IP> -U <iDRAC user> -P <iDRAC password> raw 0x30 0x30 0x01 0x01
  • Activation du contrôle manuel/statique des ventilateurs (désactivation du mode automatique) :
user@host:~$ ipmitool -I lanplus -H <iDRAC IP> -U <iDRAC user> -P <iDRAC password> raw 0x30 0x30 0x01 0x00
  • Récupérer la vitesse actuelle des ventilateurs :
user@host:~$ ipmitool -I lanplus -H <iDRAC IP> -U <iDRAC user> -P <iDRAC password> sdr get Fan1 Fan2 | grep "Sensor Reading" Sensor Reading : 1560 (+/- 120) RPM Sensor Reading : 1560 (+/- 120) RPM
  • Définir la vitesse des ventilateurs à 1320 RPM (16%) :
user@host:~$ ipmitool -I lanplus -H <iDRAC IP> -U <iDRAC user> -P <iDRAC password> raw 0x30 0x30 0x02 0xff 0x10
  • Définir la vitesse des ventilateurs à 1560 RPM (20%) :
user@host:~$ ipmitool -I lanplus -H <iDRAC IP> -U <iDRAC user> -P <iDRAC password> raw 0x30 0x30 0x02 0xff 0x14
  • Définir la vitesse des ventilateurs à 2040 RPM (30%) :
user@host:~$ ipmitool -I lanplus -H <iDRAC IP> -U <iDRAC user> -P <iDRAC password> raw 0x30 0x30 0x02 0xff 0x1e
  • Définir la vitesse des ventilateurs à 3000 RPM (50%) :
user@host:~$ ipmitool -I lanplus -H <iDRAC IP> -U <iDRAC user> -P <iDRAC password> raw 0x30 0x30 0x02 0xff 0x32
  • Définir la vitesse des ventilateurs à 5040 RPM (100%) :
user@host:~$ ipmitool -I lanplus -H <iDRAC IP> -U <iDRAC user> -P <iDRAC password> raw 0x30 0x30 0x02 0xff 0x64

Créaton d'un service ipmi

Je me suis énervé et ai décidé de crééer un service afin de gérer automatiquement la vitesse des ventilateurs.

Je détaillerai ici toutes les étapes à suivre pour le mettre en place.

Note : Ce script est adapté à ma configuration

Création d'un compte système

  • Pour des raisons de sécurité j'ai décidé de faire tourner le service depuis un compte système. Donc créons le compte ipmiservice de type système :
root@host:~# useradd --system --no-create-home ipmiservice
  • Créer un dossier log :
root@host:~# mkdir /var/log/ipmiservice root@host:~# chown -R ipmiservice /var/log/ipmiservice

Créer le script bash

  • Créer le fichier /usr/local/sbin/ipmiservice.sh :
root@host:~# touch /usr/local/sbin/ipmiservice.sh root@host:~# chown ipmiservice: /usr/local/sbin/ipmiservice.sh root@host:~# chmod +x /usr/local/sbin/ipmiservice.sh
  • /usr/local/sbin/ipmiservice.sh :
#!/bin/bash #Stops script on errors, unset variables or failing pipeline set -euo pipefail #variables definitions LOG=/var/log/ipmiservice/ipmi.log IP="192.168.1.10" PASSWORD='STp@ssw0rd!' #functions ##Set Fan Speed, accept one argument to set speed FanSpeed() { ipmitool -I lanplus -H "$IP" -U root -P "$PASSWORD" raw 0x30 0x30 0x02 $1 } ##Get Temp values GetValues() { #Get motherboard, cpu1 and cpu2 temperature OUTPUT=$(/usr/bin/ipmitool -I lanplus -H "$IP" -U root -P "$PASSWORD" sdr type temperature | sed -e 's/Temp\(.*0Eh\)/Cpu1\1/' -e 's/Temp\(.*0Fh\)/Cpu2\1/') #Extract motherboard temp SB=$(echo $OUTPUT| awk -F'|' '{ print $5 $9 $13 }' | awk '{ print $1 }') #Extract cpu1 temp CPU1=$(echo $OUTPUT| awk -F'|' '{ print $5 $9 $13 }' | awk '{ print $5 }') #Extract cpu2 temp CPU2=$(echo $OUTPUT| awk -F'|' '{ print $5 $9 $13 }' | awk '{ print $9 }') #motherboard+cpu1+cpu2 temp LOG_TOTAL=$(($SB+$CPU1+$CPU2)) #Get Fan1 speed FANS=$(ipmitool -I lanplus -H "$IP" -U root -P "$PASSWORD" sensor reading Fan1 | awk '{ print $3 }') } #set manual mode ipmitool -I lanplus -H "$IP" -U root -P "$PASSWORD" raw 0x30 0x30 0x01 0x00 GetValues echo "$(date "+%Y-%m-%d %H:%M:%S")" "MB : $SB | CPU1 : $CPU1 | CPU2 : $CPU2 | LOG_TOTAL : $LOG_TOTAL" while : do if [ "$LOG_TOTAL" -le 100 ] && [ $FANS -eq 1440 ]; then echo "$(date "+%Y-%m-%d %H:%M:%S")" "FAN speed : 1440, don't do anything" | tee -a "$LOG" elif [ "$LOG_TOTAL" -le 100 ] && [ $FANS -ne 1440 ]; then FanSpeed "0xff 0x12" #Set speed to 1440 echo "$(date "+%Y-%m-%d %H:%M:%S")" "Set speed to 1440" | tee -a "$LOG" elif [ "$LOG_TOTAL" -gt 100 ] && [ "$LOG_TOTAL" -le 105 ] && [ $FANS -ne 1560 ]; then FanSpeed "0xff 0x14" #Set speed to 1560 echo "$(date "+%Y-%m-%d %H:%M:%S")" "Set speed to 1560" | tee -a "$LOG" elif [ "$LOG_TOTAL" -gt 105 ] && [ "$LOG_TOTAL" -le 115 ] && [ $FANS -ne 2040 ]; then FanSpeed "0xff 0x1e" #Set speed to 2040 echo "$(date "+%Y-%m-%d %H:%M:%S")" "Set speed to 2040" | tee -a "$LOG" elif [ "$LOG_TOTAL" -gt 115 ] && [ "$LOG_TOTAL" -le 130 ] && [ $FANS -ne 3000 ]; then FanSpeed "0xff 0x32" #Set speed to 3000 echo "$(date "+%Y-%m-%d %H:%M:%S")" "Set speed to 3000" | tee -a "$LOG" elif [ "$LOG_TOTAL" -gt 130 ] && [ $FANS -ne 5040 ]; then FanSpeed "0xff 0x64" #Set speed to 5040 echo "$(date "+%Y-%m-%d %H:%M:%S")" "Set speed to 5040" | tee -a "$LOG" fi sleep 30s GetValues echo "$(date "+%Y-%m-%d %H:%M:%S")" "MB : $SB | CPU1 : $CPU1 | CPU2 : $CPU2 | TEMP TOTAL : $LOG_TOTAL" >> "$LOG" echo "$(date "+%Y-%m-%d %H:%M:%S")" "FAN speed : $FANS" | tee -a "$LOG" done

Créer un service systemd

Maintenant créons notre service systemd.

  • Créer un service systemd :
root@host:~# vim /etc/systemd/system/ipmi.service [Unit] Description=ipmi t620 fan control After=network.target [Service] Type=simple User=ipmiservice Group=ipmiservice WorkingDirectory=/usr/local/sbin/ ExecStart=/usr/local/sbin/ipmiservice.sh Restart=always [Install] WantedBy=multi-user.target
  • Activer le service systemd :
root@host:~# systemctl enable ipmi.service
  • Démarrer le service systemd :
root@host:~# systemctl start ipmi.service
  • Vérifier les logs :
root@host:~# tail -f /var/log/ipmiservice/ipmi.log 2021-05-09 15:16:57 FAN speed : 1440, don't do anything 2021-05-09 15:17:32 MB : 22 | CPU1 : 37 | CPU2 : 40 | TEMP TOTAL : 99 2021-05-09 15:17:32 FAN speed : 1440, don't do anything 2021-05-09 15:17:32 FAN speed : 1440, ne rien faire 2021-05-09 15:18:04 MB : 22 | CPU1 : 38 | CPU2 : 40 | TEMP TOTAL : 100 2021-05-09 15:18:04 FAN speed : 1440, don't do anything 2021-05-09 15:18:04 FAN speed : 1440, ne rien faire 2021-05-09 15:18:36 MB : 22 | CPU1 : 39 | CPU2 : 40 | TEMP TOTAL : 101 2021-05-09 15:18:36 FAN speed : 1440, don't do anything 2021-05-09 15:18:37 Set speed to 1560 2021-05-09 15:19:09 MB : 22 | CPU1 : 38 | CPU2 : 40 | TEMP TOTAL : 100 2021-05-09 15:19:09 FAN speed : 1560
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

adresse mail de contact