Bonjour,
Je voulais partager mon expérience avec l’intégration des outils SMART et de Jeedom. J’utilise depuis 2019 une box Smart avec un disque eMMC de 16 GB mais qui donne des signes de saturation et de fatigue. Malgré les sauvegardes externes quotidiennes, ce disque contient des données très importantes sur la configuration de ma domotique. Donc j’envisage de migrer sur un disque SSD plus important sur un RPI 5 (projet 2024, en attendant la migration de Jeedom sur debian 12 et PHP 8). Dans ce contexte, j’ai épluché de nombreux articles sur les outils S.M.A.R.T, disponibles sur de nombreux disques (modernes) tels SSD, SATA ou SCSI et ce quelque soit l’OS. SMART permet d’accéder à de nombreuses informations utiles qui indique si le disque se dégrade ou est sur le point de lâcher et donc nécessite une action urgente. Malheureusement sur les disques, eMMC je n’ai rien trouvé d’intéressant (à creuser).
SMART propose beaucoup d’info mais la plupart sont ‹ vendor specific › ce qui n’empêche pas de classer en 3 sections:
Informations : modèle, capacité globale du disque, partition ou namespace, etc.
Attributes: informations spécifiques liées à la technologie du disque
Log entries: les informations loggées par le disque lui-même après des self-tests possibles, en complément des info de la section attributes.
Il existe moult utilitaires (debian, Windows,etc.) qui permettent d’accéder aux informations internes SMART ou de lancer des tests (long, court) sur le disque. Dans ce post, j’utilise smartctl du package smartmontools dans un environnement debian.
En identifiant les disques et les OS de son environnement, on peut centraliser les informations utiles sur Jeedom et signaler, alerter, notifier, etc. si besoin pour ne pas ignorer les signes existants d’une dégradation d’un disque.
1. Première étape: installer manuellement smartctl (si non disponible) sur l’OS concerné: sudo apt install smartmontools
. Puis identifier les disques en utilisant :
sudo smartctl --scan
Cette action liste les différents devices reconnus par smartctl et donc à cibler.
2. Lister les informations. Utiliser sudo smartctl -i <device>
permet de lister les info générales:
=== START OF INFORMATION SECTION ===
Model Number: Samsung SSD 970 EVO Plus 500GB
Serial Number: S4EVNM0TA14143E
Firmware Version: 2B2QEXM7
PCI Vendor/Subsystem ID: 0x144d
IEEE OUI Identifier: 0x002538
Total NVM Capacity: 500,107,862,016 [500 GB]
Unallocated NVM Capacity: 0
Controller ID: 4
NVMe Version: 1.3
Number of Namespaces: 1
Namespace 1 Size/Capacity: 500,107,862,016 [500 GB]
Namespace 1 Utilization: 9,675,239,424 [9.67 GB]
Namespace 1 Formatted LBA Size: 512
Namespace 1 IEEE EUI-64: 002538 5a21907000
Local Time is: Sat Feb 17 10:32:50 2024 CET
Repérer dans cette liste les infos utiles telles que Device Model, User Capacity ce qui permettra d’identifier le disque et indiquer quelques caractéristiques:
3. Lister les attributes. utiliser sudo smartctl -A <device>
permet de lister des indicateurs de santé du disque:
=== START OF SMART DATA SECTION ===
SMART/Health Information (NVMe Log 0x02)
Critical Warning: 0x00
Temperature: 40 Celsius
Available Spare: 100%
Available Spare Threshold: 10%
Percentage Used: 0%
Data Units Read: 4,172 [2.13 GB]
Data Units Written: 29,688 [15.2 GB]
Host Read Commands: 54,712
Host Write Commands: 385,227
Controller Busy Time: 2
Power Cycles: 3
Power On Hours: 4
Unsafe Shutdowns: 2
Media and Data Integrity Errors: 0
Error Information Log Entries: 11
Warning Comp. Temperature Time: 0
Critical Comp. Temperature Time: 0
Temperature Sensor 1: 40 Celsius
Temperature Sensor 2: 38 Celsius
Repérer dans cette liste des infos utiles telles que PowerOnhours, UnsafeShutdowns, etc. pour tester/afficher, etc:
Enfin en ce qui concerne la section log entries, il s’agit d’un format très spécifique et je n’ai pas cherché à récupérer ces infos.
4. Intégration avec Jeedom. Pour récupérer périodiquement des infos, je me suis appuyé sur le plugin Monitoring2 en utilisant une session SSH avec le host ciblé. En utilisant des commandes bash, on peut facilement obtenir, en toute sécurité, les informations désirées.
Voici un exemple pour obtenir l’attribut ‹ Seek Error Rate › :
sudo smartctl -A /dev/sda | awk '/Seek_Error_Rate/ {print $10}'
comme ceci:
Une fonction intéressante de smartctl c’est qu’il est capable de générer du format JSON, donc en s’appuyant sur un utilitaire comme jq on peut sécuriser le parsing des clés/valeurs, par exemple:
pi@rpi5:~ $ sudo smartctl -A /dev/nvme0 -j | jq -r '.nvme_smart_health_information_log.available_spare'
100
Pour terminer, j’ai classé toutes les informations utiles en fonction de leur caractère dynamique: la capacité du disque ne change pas tous les jours donc récupérer cette info une fois par semaine suffira. L’avantage du plugin Monitor2 c’est que l’on peut paramétrer (dans cron) le rafraichissement des équipements.
Cdt