Table des matières

hddtemp /dev/disk/by-id/ conky

Nota :

Information hddtemp (0.3-beta15-54) du 02 février 2021 zcat /usr/share/doc/hddtemp/NEWS.Debian.gz : Le développement d'hddtemp est arrêté en amont depuis de nombreuses années et hddtemp se trouve donc depuis dans un mode de maintenance dans Debian. Il sera encore fourni dans la version Bullseye de Debian, mais ne sera pas présent dans la version Debian Bookworm.
De nos jours, le module de noyau “drivetemp” est une meilleure alternative. Il utilise le module API du noyau de surveillance du matériel Linux (hwmon), afin de renvoyer la température de la même manière et avec les mêmes outils que les autres capteurs. Le chargement de ce module est aussi simple que la création d'un fichier dans le répertoire /etc/modules-load.d. Il suffit de créer un fichier dans le répertoire /etc/modules-load.d avec la commande suivante ( en root ) :
      echo drivetemp > /etc/modules-load.d/drivetemp.conf

Source : zcat /usr/share/doc/hddtemp/NEWS.Debian.gz le Mar, 02 Fév 2021 ( bullseye )

remplacé par l'usage du paquet lm-sensors

Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !

Introduction

hddtemp utilise par défaut le nommage par /dev/sdX.

Ce nommage étant aléatoire, il est possible de le forcer à utiliser le nommage par /dev/disks/by-id/XXXXXX.

En préambule, il faut installer comme suit hddtemp :

apt install hddtemp 

Puis le reconfigurer afin qu'il soit lancé au démarrage de notre système et qu'il soit accessible par nos programmes (ici conky) :

dpkg-reconfigure hddtemp

Nous devons ensuite configurer le fichier /etc/default/hddtemp afin de lui dire de lire aussi les disques nommés sous forme la /dev/disk/by-id/XXXXXX.

Pour obtenir la correspondance entre /dev/sdX et /dev/disk/by-id/XXXXXX nous pouvons faire un ls -l dans le dossier /dev/disk/by-id/.

Voici ce que j'obtiens :

ls -lh /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root  9 avril 23 08:39 ata-CT500MX500SSD4_1813E134D584 -> ../../sdf
... / ...
lrwxrwxrwx 1 root root  9 avril 23 08:39 ata-HL-DT-ST_BD-RE_BH10LS38_K9IB9NE1359 -> ../../sr1
lrwxrwxrwx 1 root root  9 avril 23 08:39 ata-HL-DT-ST_BD-RE_BH10LS38_K9IC31M4320 -> ../../sr0
lrwxrwxrwx 1 root root  9 avril 23 08:39 ata-ST2000DL003-9VT166_6YD1QBLS -> ../../sdc
... / ...
lrwxrwxrwx 1 root root  9 avril 23 08:39 ata-ST2000DM001-1CH164_Z1E2XAN7 -> ../../sdb
... / ...
lrwxrwxrwx 1 root root  9 avril 23 08:39 ata-ST2000DM001-9YN164_Z1E0AC50 -> ../../sda
... / ...
lrwxrwxrwx 1 root root  9 avril 23 08:39 ata-ST4000VM000-2AF166_WDH0AFF6 -> ../../sdd
... / ...
lrwxrwxrwx 1 root root  9 avril 23 08:39 ata-ST4000VX007-2DT166_ZGY57FLJ -> ../../sde
... / ...
lrwxrwxrwx 1 root root 11 avril 23 08:39 md-name-Alain-PC:0 -> ../../md127
lrwxrwxrwx 1 root root 11 avril 23 08:39 md-uuid-4d4f9d9d:b7119121:c474b6d3:f56af7d6 -> ../../md127
lrwxrwxrwx 1 root root  9 avril 23 08:39 wwn-0x5000c5003fa4e30d -> ../../sda
... / ...
lrwxrwxrwx 1 root root  9 avril 23 08:39 wwn-0x5000c500465b459f -> ../../sdc
... / ...
lrwxrwxrwx 1 root root  9 avril 23 08:39 wwn-0x5000c5004fbead7a -> ../../sdb
... / ...
lrwxrwxrwx 1 root root  9 avril 23 08:39 wwn-0x5000c5009ca2e849 -> ../../sdd
... / ...
lrwxrwxrwx 1 root root  9 avril 23 08:39 wwn-0x5000c500b67c94c2 -> ../../sde
... / ...
lrwxrwxrwx 1 root root  9 avril 23 08:39 wwn-0x500a0751e134d584 -> ../../sdf
... / ...

Nous reportons ainsi la liste des devices qui nous intéresse dans le fichier de configuration d'hddtemp (ligne DISKS)

nano -w /etc/default/hddtemp
                                                                                                              #Defaults for hddtemp initscript (/etc/init.d/hddtemp)
# This is a POSIX shell fragment

# [automatically edited by postinst, do not change line format ]

# hddtemp network daemon switch. If set to true, hddtemp will listen
# for incoming connections.
RUN_DAEMON="true"

# List of devices you want to use with hddtemp. If none specified,
# hddtemp will probe standard devices.
#DISKS="/dev/hda"
DISKS="/dev/sd[a-f] /dev/disk/by-id/wwn-0x5000c5003fa4e30d /dev/disk/by-id/wwn-0x5000c5004fbead7a /dev/disk/by-id/wwn-0x5000c500465b459f /dev/disk/by-id/wwn-0x5000c5009ca2e849 /dev/disk/by-id/wwn-0x5000c500b67c94c2 /dev/disk/by-id/wwn-0x500a0751e134d584"

# List of devices you want to use with hddtemp, but that would not be
# probed for a working sensor.
DISKS_NOPROBE=""

# IP address of the interface on which you want hddtemp to be bound
# on. If none specified, goes to 127.0.0.1. Use 0.0.0.0 to bind hddtemp
# on all interfaces.
INTERFACE="127.0.0.1"

# Port number on which you want hddtemp to listen on. If none specified,
# the port 7634 is used.
PORT="7634"

# Database file to use. If none specified, /etc/hddtemp.db is used.
#DATABASE="/etc/hddtemp.db"

# Separator to use between fields. The default separator is '|'.
#SEPARATOR="|"

# Logging period (in seconds) for the temperatures. If set to a value
# different than 0, hddtemp will run as a daemon periodically logging
# the temperatures through syslog
RUN_SYSLOG="1"

# Other options to pass to hddtemp
OPTIONS="" 

Test

Il ne nous reste plus qu'a tester pour voir si hddtemp récupère bien les températures de nos disques.

Exemple avec le disque wwn-0x500a0751e134d584 (sdf) :

alain@Alain-PC:~$ sudo hddtemp /dev/disk/by-id/wwn-0x500a0751e134d584
[sudo] Mot de passe de alain : 
/dev/disk/by-id/wwn-0x500a0751e134d584: CT500MX500SSD4: 46°C

Nous pouvons alors reporter cette commande dans conky afin de monitorer la température de notre disque :

${alignc}      disque ssd : ${hddtemp /dev/disk/by-id/wwn-0x500a0751e134d584}°C

Utilisation

DISKS="/dev/sd[a-f] /dev/disk/by-id/wwn-0x5000c5003fa4e30d /dev/disk/by-id/wwn-0x5000c5004fbead7a /dev/disk/by-id/wwn-0x5000c500465b459f /dev/disk/by-id/wwn-0x5000c5009ca2e849 /dev/disk/by-id/wwn-0x5000c500b67c94c2 /dev/disk/by-id/wwn-0x500a0751e134d584"

Avec la modification ci-dessus du fichier /etc/default/hddtemp, vous avez accès aussi bien à la notation /dev/sdX qu'a la notation /dev/disk/by-id/XXXXX.

Température ssd en couleur

Nous allons créer un script bash afin de récupérer la température d'un disque.

Ce script recevra 2 paramètres :

nano -w ~/bin/show_disk_temperature.sh
show_ssd.sh
#! /bin/bash
 
# Get temperature value
SENSOR_PROBE="/dev/disk/by-id/$2"
TEMP_STRING=$(hddtemp "$SENSOR_PROBE" | grep --only-matching '[0-9.]\+°C' | head --lines=1 )
TEMP_NUMBER=${TEMP_STRING%°C}
 
# Set display mode based on arguments
# Default is to display temperature in a console
DISPLAY_MODE="$1"
 
# Set display color based on temperature value
# ≥ 70°C is high, ≥ 80°C is critical
if [ $TEMP_NUMBER -ge 60 ]; then
	case "$DISPLAY_MODE" in
		('conky')
			COLOR='red'
		;;
		('shell')
			COLOR=31
		;;
	esac
elif [ $TEMP_NUMBER -ge 50 ]; then
	case "$DISPLAY_MODE" in
		('conky')
			COLOR='yellow'
		;;
		('shell')
			COLOR=33
		;;
	esac
else
	case "$DISPLAY_MODE" in
		('conky')
			 COLOR='green'
		;;
		('shell')
			COLOR=32
		;;
	esac
fi
 
# Set message syntax based on display mode
case "$DISPLAY_MODE" in
	('conky')
		MESSAGE='${color %s}%s${color}'
	;;
	('shell')
		MESSAGE='\033[1;%sm%s\033[0m\n'
	;;
esac
 
# Print the formatted message
printf "$MESSAGE" "$COLOR" "$TEMP_STRING"
 
exit 0

Il faut maintenant le rendre exécutable :

chmod +x ~/bin/show_disk_temperature.sh

Et enfin nous pouvons l'intégrer à notre configuration conky :

$hr
${alignc}Températures  

${alignc}               disque ssd : ${execpi 5 ~/bin/show_disk_temperature.sh conky wwn-0x500a0751e134d584}

$hr 

vous devriez obtenir ceci , par exemple :

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !