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

From ArchWiki
É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. (Self-Monitoring, Analysis, and Reporting Technology, 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/sdX 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/sdX 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 || diskmonitorAUR
  • 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