Le: 26 juillet 2021
Serveur Dell trop bruyant.
Script pour réduir le bruit des ventilateurs du serveur Dell:
Mon serveur PowerEdge Dell avec un IDRAC 7, fonctionnant avec un ESXI, fait beaucoup trop de bruit. Les ventilateurs sont entre 40% et 60% de leur vitesse maximum.
Ma configuration:
IDRAC7 version: 2.65.65.65
2 CPU
16 slots de mémoire utilisées
7 disques SAS
J'ai décidé de varier la vitesse des ventilateurs suivant la temperature d'entrée du serveur et, d'appliquer une règle si la temperature des CPU dépassaient 50°C.
Soit, Fan % = ((T°ext x 3) - 60) x 1,3
Et, si CPU supérieure à 50° alors Fan % = Fan % + (( T°cpu - 50) x 3)
Afin de récupérer et d'envoyer ces informations, j'utilise ipmitool
- Dans l'IDRAC j'ai activé l'accès à l'IPMI depuis le réseau.
- J'ai créé un nouveau USER (tuto):
Paramètre de l'IDRAC / Authentification utilisateur
- J'ai autorisé ce USER (tuto) à utiliser l'IPMI
Installation de ipmitool sur un Ubuntu tournant sur cet ESXI (ou ailleurs):
sudo apt install ipmitool
Verification de la communication:
ipmitool -I lanplus -H 10.10.10.10 -U tuto -P 'passpartout' sdr type "Temperature"
Inlet Temp | 04h | ok | 7.1 | 23 degrees C
Temp | 0Eh | ok | 3.1 | 48 degrees C
Temp | 0Fh | ok | 3.2 | 47 degrees C
Script pour réduire le bruit :
nano /var/ipmi/temp-ventillateur.sh
#!/bin/bash # #definitions des variables LOG="/var/log/ipmi" IP="10.10.10.10" USER="tuto" password="passpartout" #### Mail SENDMAIL="/usr/sbin/sendmail" DE="Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser." A="Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser." # DATE=$(date +%d/%m/%Y) HEURE=$(date +%Hh:%Mm:%Ss) total_erreur=0 # creer le repertoire log if [ ! -d ${LOG} ];then mkdir ${LOG} fi ## exec 1>> ${LOG}/ipmitool.log exec 2>> ${LOG}/error.log # Saisie de l'heure de debut echo "#" >> ${LOG}/ipmitool.log echo "#" >> ${LOG}/ipmitool.log echo "##### Le :" $DATE "a" $HEURE "#####" >> ${LOG}/ipmitool.log OLDFANS=$(ipmitool -I lanplus -H $IP -U $USER -P $password sensor reading Fan1 | awk '{ print $3 }') echo "Vitesse: $OLDFANS RPM" >> ${LOG}/ipmitool.log # Temperature Carte mère, cpu1 and cpu2 OUTPUT=$(ipmitool -I lanplus -H $IP -U $USER -P $password sdr type temperature | sed -e 's/Temp\(.*0Eh\)/Cpu1\1/' -e 's/Temp\(.*0Fh\)/Cpu2\1/') # Temperature ambiante AMBIANTE=$(echo $OUTPUT| awk -F'|' '{ print $5 $9 $13 }' | awk '{ print $1 }') # AMBIANTE=6 # Temperature CPU1 CPU1=$(echo $OUTPUT| awk -F'|' '{ print $5 $9 $13 }' | awk '{ print $5 }') # CPU1=52 # Temperature CPU2 CPU2=$(echo $OUTPUT| awk -F'|' '{ print $5 $9 $13 }' | awk '{ print $9 }') # CPU2=74 echo "T° ambiante : $AMBIANTE" >> ${LOG}/ipmitool.log # Si T° trop basse, on fix à 10% if [ "$AMBIANTE" -gt "4" ] && [ "$AMBIANTE" -lt "23" ] then echo "Modif du à la T° ambiente" >> ${LOG}/ipmitool.log NEWFANS=10 else NEWFANS=`echo "(($AMBIANTE*3)-60)*1.3" | bc -l` fi echo "T° CPU1 : $CPU1" >> ${LOG}/ipmitool.log echo "T° CPU2 : $CPU2" >> ${LOG}/ipmitool.log if [ "$CPU1" -ge "$CPU2" ] then CPU=$CPU1 else CPU=$CPU2 fi VCPU=0 echo "le CPU le plus chaud est à $CPU °C" >> ${LOG}/ipmitool.log if [ "$CPU" -gt "50" ] then VCPU=`echo "($CPU-50)*3" | bc -l` echo "#################### Du à cette T°, on ajoute au calcule : $VCPU ####################" >> ${LOG}/ipmitool.log NEWFANS=`echo "($NEWFANS+$VCPU)" | bc` fi # On retire tous apres le point NEWFANS=${NEWFANS%.*} # On limite à 10 % (peut etre retiré) if [ "$NEWFANS" -lt "10" ] then NEWFANS=10 fi # On limite à 100 % if [ "$NEWFANS" -gt "100" ] then NEWFANS=100 fi # Test des sensors # Si $xx grep (rechercher une chaîne de caractères dans un fichier) où wc -m (affiche le nombre de caractères) equale 0 if [ $(echo "$CPU1" | grep -E '^[0-9]+$' | wc -m) -eq 0 ] || [ $(echo "$CPU2" | grep -E '^[0-9]+$' | wc -m) -eq 0 ] || [ $(echo "$AMBIANTE" | grep -E '^[0-9]+$' | wc -m) -eq 0 ] then echo "####################!!!!!!!!!!!!!!!!!!!#################### Erreur d'un sensor de T° ####################!!!!!!!!!!!!!!!!!!!####################" >> ${LOG}/ipmitool.log NEWFANS=100 ((total_erreur++)) fi if [ "$CPU1" -gt "75" ] || [ "$CPU1" -lt "20" ] || [ "$CPU2" -gt "75" ] || [ "$CPU2" -lt "20" ] || [ "$AMBIANTE" -gt "38" ] || [ "$AMBIANTE" -lt "5" ] then echo "######### Erreur d'un sensor de T°. Limite atteinte !! ######### " >> ${LOG}/ipmitool.log NEWFANS=100 fi echo "La nouvelle vitesse envoyée : $NEWFANS %" >> ${LOG}/ipmitool.log # Hexadecimal NEWFANS=`printf "%x\n" $NEWFANS` ipmitool -I lanplus -H $IP -U $USER -P $password raw 0x30 0x30 0x02 0xff 0x$NEWFANS if [[ "$?" > 0 ]] then ((total_erreur++)) fi # si erreur, je log l'heure et j'envoie un mail if [[ "$total_erreur" > 0 ]] then echo "# Il y a eu un probleme dans la gestion des ventilateurs. regarder aussi le fichier: ${LOG}/ipmitool.log" 1>> ${LOG}/error.log echo "Les lignes du dessus sont du: ${DATE} a ${HEURE} #" 1>> ${LOG}/error.log ## Creation du mail SUBJECT="Subject: Erreur pendant la gestion des ventilateurs"; BODY="Bonjour, Le script de la gestion des ventilateurs a généré au moins 1 erreur. Il est important de verrifier ces 2 fichiers: "${LOG}"/error.log et "${LOG}"/ipmitool.log Ce message est envoyé par: /var/perso/temp-ventilateur.sh Toto" #### ENVOUE Mail echo "from:"$DE > /tmp/ventilateurs.txt echo "to:"$A >> /tmp/ventilateurs.txt echo "$SUBJECT" >> /tmp/ventilateurs.txt echo "MIME-Version: 1.0" >> /tmp/ventilateurs.txt echo "Content-Type: text/plain; charset=\"utf-8\"" >> /tmp/ventilateurs.txt echo "$BODY" >> /tmp/ventilateurs.txt cat /tmp/ventilateurs.txt | $SENDMAIL -t fi
Vous avez pu remarqué que si une température n'est pas lue ou n'est pas entre 20° et 75° pour les CPU et entre 5° et 38° pour la T° ambiante, les ventilateurs sont alors paramétrés à 100% du max.
Un fichier de log est ajouté à chaque lecture du script (/vat/log/ipmi).
Un mail est envoyé à chaque fois qu'une erreur est détectée.
Autoriser le script à être exécuté:
chmod +x /var/perso/temp-ventillateur.sh
Mise en place d'une tache Cron:
sudo crontab -e
*/1 * * * * /var/ipmi/temp-ventillateur.sh
Nettoyage des log:
sudo nano /etc/logrotate.d/temperature
/var/log/ipmi/error.log /var/log/ipmi/ipmitool.log { size 50k rotate 7 compress }
A CHAQUE DEMARRAGE AVEC PERTE DE COURANT (et, avant la premiere utilisation du script) :
Utilisation manuel du contrôle des ventilateurs :
Sous linux :
ipmitool -I lanplus -H 10.10.10.10 -U tuto -P 'passpartout' raw 0x30 0x30 0x01 0x00
Sous windows :
ipmitool -I lanplus -H 10.10.10.10 -U tuto -P "passpartout" raw 0x30 0x30 0x01 0x00