S.M.A.R.T. (Français)

État de la traduction:
Cet article est la version francophone de
S.M.A.R.T.
. Date de la dernière traduction: 2022-10-03. Vous pouvez aider à synchroniser la traduction s'il y a eu des
changements
dans la version anglaise.
S.M.A.R.T.
(
S
elf-
M
onitoring,
A
nalysis, and
R
eporting
T
echnology, qu'on peut traduire par technique d'auto-diagnostic, d'analyse et de signalement) est un composant supplémentaire intégré à de nombreux dispositifs de stockage modernes grâce auquel les périphériques surveillent, stockent et analysent la «santé» de leur fonctionnement.  Des statistiques sont collectées (température, nombre de secteurs réalloués, erreurs d'accès...) que les logiciels peuvent utiliser pour mesurer l'état de santé d'un périphérique, prédire une éventuelle défaillance du périphérique et fournir des notifications lorsque les valeurs annoncent un danger.
Smartmontools
Le paquet
smartmontools
comporte deux utilitaires permettant d'analyser et de surveiller des périphériques de stockage :
smartctl
et
smartd
.
La prise en charge de SMART doit être disponible et activée sur chaque périphérique de stockage pour utiliser efficacement ces outils. Vous pouvez utiliser
#smartctl
pour vérifier et activer la prise en charge de SMART. Ceci fait, vous pouvez manuellement
#Lancer un test
et
#Voir les résultats du test
, ou vous pouvez utiliser
#smartd
pour exécuter automatiquement des tests et envoyer des notifications par courriel.
smartctl
smartctl
est un outil en ligne de commande qui contrôle le système SMART intégré dans la plupart des disques durs ou à mémoire flash en ATA/SATA et SCSI/SAS.
L'option
-i
/
--info
imprime une variété d'informations sur un périphérique, y compris si SMART est disponible et activé :
# smartctl --info /dev/sda | grep 'SMART support is:'
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Si la prise en charge de SMART est disponible mais inactif, vous pouvez l'activer :
# smartctl --smart=on /dev/
device
Vous devrez peut-être préciser le type de périphérique. Par exemple, spécifier
--device=ata
indique à smartctl que le type de périphérique est ATA, ce qui empêche smartctl d'envoyer des commandes SCSI à ce périphérique.
Lancer un test
Un périphérique de stockage peut effectuer trois types d'auto-tests (tous préserveront les données utilisateur!) :
Short
(Court): exécute des tests qui ont une forte probabilité de détecter les problèmes du périphérique,
Extended
(Long) : mêmes tests que short mais sans limitation sur le temps de réponse et avec examen exhaustif des secteurs,
Conveyance
(Acheminement) : identifie les dommages physiques survenus pendant le transport du périphérique.
L'option
-c
/
--capabilities
affiche les tests disponibles pour le périphérique et leur durée d'exécution approximative. Par exemple:
# smartctl -c /dev/sda
...
Short self-test routine
recommended polling time:        (   1) minutes.
Extended self-test routine
recommended polling time:        (  74) minutes.
Conveyance self-test routine
recommended polling time:        (   2) minutes.
...
Pour lancer le test, utilisez l'option
-t
/
--test=
test_name
:
# smartctl -t short /dev/
device
# smartctl -t long /dev/
device
# smartctl -t conveyance /dev/
device
Voir les résultats du test
Vous pouvez afficher l'état de santé général d'un périphérique avec l'option
-H
. Si le périphérique signale un état de santé défaillant, cela signifie soit que le périphérique est déjà tombé en panne, soit qu'il prévoit sa propre panne dans les 24 heures à venir. Si cela se produit [...], retirez vos données du disque et mettez-les en lieu sûr dès que possible.
# smartctl -H /dev/
device
Vous pouvez également afficher une liste des résultats de tests récents et des informations détaillées sur un périphérique :
# smartctl -l selftest /dev/
device
# smartctl -a /dev/
device
Générer une table avec les attributs de tous les disques
#!/bin/bash
function drives_csv {
	declare -A drive_values
	for d in `smartctl --scan -d scsi | cut -d' ' -f1`; do
		drive_values["-Drive-----------------"]="${drive_values[-Drive-----------------]},$d"
		for l in `smartctl -A $d | grep ATTRIBUTE_NAME -A30 | grep -v ATTRIBUTE_NAME | column -H1,3,4,5,6,7,8,9,11,12,13,14,15 -t -o, | sed 's/ //g'`; do
			key=`echo $l | cut -d',' -f1`
			value=`echo $l | cut -d',' -f2`
			existing=${drive_values["$key"]}
			drive_values["${key}"]="${existing},${value}"
			#~ echo "${key},${drive_values[$key]}"
		done
	done
	for key in "${!drive_values[@]}"; do
		echo "${key}${drive_values[$key]}"
	done | sort
}
drives_csv | column -s, -t
smartd
Le
daemon
smartd surveille les états SMART et émet des notifications lors d'une anomalie. Il est géré par systemd et configuré par le fichier
/etc/smartd.conf
. La syntaxe de ce fichier de configuration est plutôt ésotérique, et nous n'en donnons ici qu'un aperçu ; vous trouverez des exemples dans les sections commentées de
/etc/smartd.conf
et plus dans
smartd.conf(5)
.
Gestion du daemon
Pour démarrer le daemon, vérifier son état, le faire démarrer automatiquement au démarrage du système et lire les entrées récentes du fichier journal,
démarrez
et
activez
simplement l'unité
smartd.service
de systemd.
smartd reconnaît toutes les commandes courantes des commandes
systemctl
et
journalctl
.
Définir les périphériques à surveiller
Pour surveiller toutes les erreurs SMART possibles sur tous les disques, le paramètre suivant doit être ajouté dans le fichier de configuration.
/etc/smartd.conf
DEVICESCAN -a
Notez que ceci est la configuration par défaut de
smartd
et que le paramètre
-a
, qui est le paramètre par défaut, peut être omis.
Pour surveiller toutes les erreurs SMART possibles sur
/dev/sda
et
/dev/sdb
, et ignorer tous les autres périphériques :
/etc/smartd.conf
/dev/sda -a
/dev/sdb -a
Pour surveiller toutes les erreurs SMART possibles sur les périphériques de stockage externes (des clefs USB par exemple), il est préférable d'indiquer à
smartd
l'UUID du périphérique puisque le
/dev/sd
X
du lecteur peut changer lors d'un redémarrage.
Il vous faut donc d'abord récupérer l'UUID du périphérique en question. Cherchez dans les lignes affichées par la commande
ls -lah /dev/disk/by-uuid/
:
ls -lah /dev/disk/by-uuid/
lrwxrwxrwx 1 root root   9 Nov  5 22:41 820cdd8a-866a-444d-833c-1edb0f4becac -> ../../sde
lrwxrwxrwx 1 root root  10 Nov  5 22:41 b51b87f3-425e-4fe7-883f-f4ff1689189e -> ../../sdf2
lrwxrwxrwx 1 root root   9 Nov  5 22:42 ea2199dd-8f9f-4065-a7ba-71bde11a462c -> ../../sda
lrwxrwxrwx 1 root root  10 Nov  5 22:41 fe9e886a-8031-439f-a909-ad06c494fadb -> ../../sdf1
Supposons qu'ici la clef USB que nous voulions contrôler soit celle adressée par /dev/sde au démarrage. Maintenant, pour demander à
smartd
de surveiller ce disque, il suffit d'utiliser le chemin
/dev/disk/by-uuid/
.
/etc/smartd.conf
/dev/disk/by-uuid/820cdd8a-866a-444d-833c-1edb0f4becac -a
Notez que vous pouvez avoir besoin en plus de
-d removable
pour que
smartd
fonctionne.
Maintenant, votre clef USB sera surveillé même si le chemin
/dev/sd
X
change pendant le redémarrage.
Notifier des problèmes potentiels
Pour qu'un courriel soit envoyé lorsqu'un échec ou une nouvelle erreur se produit, utilisez l'option
-m
:
/etc/smartd.conf
DEVICESCAN -m address@domain.com
Pour que le courriel parvienne à un compte utilisateur (et non au compte root), il faut que vous ayez préalablement installé et configuré un service MTA (Mail Transport Agent) ou MUA (Mail User Agent). Les MTA les plus connus sont
Msmtp (en)
et
sSMTP (en)
, mais un simple
dma (en)
suffira sans doute. Les MTU les plus connus sont sendmail et
Postfix (en)
. Si vous n'avez pas d'autres usages, il vous suffit de configurer
S-nail (en)
, mais en suivant
ces instructions
.
L'option
-M test
envoie un courriel à chaque lancement du daemon smartd :
/etc/smartd.conf
DEVICESCAN -m address@domain.com -M test
Les courriels peuvent mettre du temps à vous parvenir. Pour être sûr d'être averti immédiatement en cas de défaillance de votre disque dur, vous pouvez également définir un script qui sera exécuté en plus de l'envoi du courriel :
/etc/smartd.conf
DEVICESCAN -m address@domain.com -M exec /usr/local/bin/smartdnotify
Pour envoyer un courriel et une notification système, mettez quelque chose comme ceci dans
/usr/local/bin/smartdnotify
:
#!/bin/sh
# Envoyer un courriel
echo "$SMARTD_MESSAGE" | mail -s "$SMARTD_FAILTYPE" "$SMARTD_ADDRESS"
# Notification a l'utilisateur
wall "$SMARTD_MESSAGE"
Si vous utilisez un environnement de bureau, vous pouvez également préférer qu'une fenêtre contextuelle apparaisse sur votre bureau. Dans ce cas, vous pouvez utiliser ce script (remplacez
X_user
et
X_userid
par l'utilisateur et l'identifiant de l'utilisateur exécutant X respectivement) :
/usr/local/bin/smartdnotify
#!/bin/sh

sudo -u
X_user
DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/
X_userid
/bus notify-send "S.M.A.R.T Error ($SMARTD_FAILTYPE)" "$SMARTD_MESSAGE" --icon=dialog-warning -u critical
Ce script nécessite
libnotify
et un environnement de bureau compatible. Consultez l'article anglais
Desktop notifications
pour plus de détails.
Vous pouvez aussi placer vos scripts personnalisés dans le répertoire
/usr/share/smartmontools/smartd_warning.d/
:
Ce script prévient tous les utilisateurs connectés au système via libnotify.
/usr/share/smartmontools/smartd_warning.d/smartdnotify
#!/bin/sh

IFS=$'\n'
for LINE in `w -hs`
do
    USER=`echo $LINE | awk '{print $1}'`
    USER_ID=`id -u $USER`
    DISP_ID=`echo $LINE | awk '{print $8}'`
    sudo -u $USER DISPLAY=$DISP_ID DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_ID/bus notify-send "S.M.A.R.T Error ($SMARTD_FAILTYPE)" "$SMARTD_MESSAGE" --icon=dialog-warning -u critical
done
Ce script nécessite
libnotify
et
procps-ng
ainsi qu'un environnement de bureau compatible.
Vous pouvez exécuter vos scripts personnalisés avec
/etc/smartd.conf
DEVICESCAN -m @smartdnotify
Gestion de l'alimentation
Si vous utilisez un ordinateur avec gestion de l'énergie, vous devez indiquer à smartd comment gérer les disques en mode de faible consommation. Habituellement, en réponse aux commandes SMART émises par smartd, les plateaux de disques sont mis en rotation. Ainsi, si cette option n'est pas utilisée, un disque qui est en mode basse consommation peut être mis en rotation et passer en mode haute consommation lorsqu'il est interrogé périodiquement par smartd.
/etc/smartd.conf
DEVICESCAN -n standby,15,q
Plus d'informations sur le
wiki smartmontools
.
Sur certains périphériques, le
-n
ne fonctionne pas. Vous obtenez le message d'erreur suivant dans le syslog :
# journalctl -u smartd
CHECK POWER MODE: incomplete response, ATA output registers missing
Device: /dev/sdb [SAT], no ATA CHECK POWER STATUS support, ignoring -n Directive
Comme alternative, vous pouvez utiliser l'option
-i
de smartd. Elle contrôle la fréquence à laquelle smartd fait tourner les disques pour vérifier leur état. La valeur par défaut est de 30 minutes. Pour la modifier, créez et éditez
/etc/default/smartmontools
.
/etc/default/smartmontools
SMARTD_ARGS="-i 10800"  Check status every 10800 seconds (3 hours)
Pour plus d'informations, consultez
smartd(8)
.
Planifier les auto-tests
smartd peut demander aux disques d'effectuer des auto-tests selon un calendrier. La configuration suivante
/etc/smartd.conf
lancera un autotest court chaque jour entre 2 et 3 heures du matin, et un autotest étendu chaque semaine le samedi entre 3 et 4 heures du matin :
/etc/smartd.conf
DEVICESCAN -s (S/../.././02|L/../../6/03)
Alerte sur les changements de température
smartd peut suivre les températures des disques et alerter si elles augmentent trop rapidement ou atteignent une limite élevée. Ce qui suit enregistrera les changements de 4 degrés ou plus, enregistrera lorsque la température atteint 35 degrés, et enregistrera/enverra par courriel un avertissement lorsque la température atteint 40 :
/etc/smartd.conf
DEVICESCAN -W 4,35,40
Astuce
Vous pouvez déterminer la température actuelle du disque avec la commande
smartctl -A /dev/
device
| grep Temperature_Celsius
.
Si vous avez des disques qui fonctionnent beaucoup plus chauds/froids que d'autres, supprimez
DEVICESCAN
et définissez une configuration séparée pour chaque périphérique avec des paramètres de température appropriés.
Exemple complet de smartd.conf
En rassemblant tout ce qui précède, on obtient l'exemple de configuration suivant :
DEVICESCAN
smartd recherche les disques et surveille tous ceux qu'il trouve.
-a
surveiller tous les attributs
-o on
activer la collecte automatique de données hors ligne
-S on
activer la sauvegarde automatique des attributs
-n standby,q
ne pas vérifier si le disque est en veille et supprimer le message de journal à cet effet afin de ne pas provoquer une écriture sur le disque.
-s ...
programmer des autotests courts et longs
-W ...
surveiller la température
-m ...
alertes par mail
/etc/smartd.conf
DEVICESCAN -a -o on -S on -n standby,q -s (S/../.././02|L/../../6/03) -W 4,35,40 -m
nom-ou-courriel
Applications en console
skdump
— utilitaire d'interrogation du composant SMART des supports de stockage.
https://0pointer.de/blog/projects/being-smart.html
||
libatasmart
iostat -x
(fourni par
sysstat
) affiche également certaines mesures de santé du disque : en particulier, des valeurs élevées dans la colonne f_await signifient que le disque ne répond pas rapidement aux requêtes et qu'il peut être défaillant.
Applications en GUI
DisKMonitor
— Outil KDE d'interrogation des composants SMART et MDRaid.
https://github.com/papylhomme/diskmonitor
||
diskmonitor
AUR
Plasma Disks
— Système de contrôle des disques de KDE Plasma.
https://invent.kde.org/plasma/plasma-disks/
||
plasma-disks
Gnome Disks
— Interface GNOME exploitant l'API
libatasmart
(Gnome Disks, avec l’utilitaire d'alerte gsd-disk-utility-notify, est inclus nativement dans l'environnement de bureau gnome).
https://gitlab.gnome.org/GNOME/gnome-disk-utility/
||
gnome-disk-utility
GSmartControl
— Interface GNOME à smartctl.
https://gsmartcontrol.sourceforge.io/
||
gsmartcontrol
Voir aussi
Pages d’accueil du projet Smartmontools
Smartmontools sur le Wiki d'Ubuntu
Gentoo: smartmontools