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

From ArchWiki
Jump to navigation Jump to search

Le composant S.M.A.R.T. (technique d'auto-diagnostic, d'analyse et de signalement) est incorporé à la plupart des dispositifs de stockage modernes. Les données de fonctionnement du périphérique de stockage (température, nombre de secteurs ré-alloués, erreurs de localisation...) sont collectées pour permettre au système d'exploitation de vérifier la fiabilité et l'état d'un support de données, prédire ses modes de défaillance et, le cas échéant, adresser des notifications à l'utilisateur.

Avec Arch Linux : le paquetage Smartmontools

Le paquetage smartmontools comporte deux utilitaires permettant d'analyser et de contrôler des périphériques de stockage : smartctl et smartd.

Il faut bien sûr que les clefs USB ou disques que vous voulez examiner possèdent des attributs SMART actifs. Vous pouvez utiliser #smartctl pour détecter si la technologie SMART est présente sur le support et, dans l'affirmative, l'activer. De là, vous pourrez #Faire un test manuellement et #examiner le diagnostic, ou vous servir de #smartd pour lancer automatiquement des tests et recevoir les notifications associées par e-mail.

smartctl

smartctl est une commande en ligne qui contrôle le dispositif SMART natif de la plupart des disques ATA/SATA et SCSI/SAS, ainsi que des mémoires flash. L'option -i/--info affiche une quantité d'informations à propos du support mémoire, et en premier lieu indique si le dispositif SMART est disponible, voire activé :

# smartctl --info /dev/sda | grep 'SMART support is:'
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Si le dispositif SMART est disponible mais inactif, vous pouvez l'amorcer :

# smartctl --smart=on /dev/<device>

Vous devrez peut-être préciser le type de périphérique. Par exemple, le mot-clef --device=ata indique à smartctl qu'il s'agit d'un port ATA, ce qui dissuade smartctl d'envoyer des commandes SCSI sur ce port.

Faire un test

Un périphérique de stockage peut effectuer trois types d'auto-tests (tous préserveront les données utilisateur!) :

  • Short: des tests de recherche d'anomalie avec une durée d'exécution arbitrairement limitée, et portant sur un nombre de secteurs échantillonnés ;
  • Extended ou Long: mêmes tests que short mais sans limitation sur le temps de réponse et avec examen exhaustif des secteurs,
  • Conveyance: 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>

examiner le diagnostic

L'examen des résultats se fait avec l'option -H

# smartctl -H /dev/<device>

Vous pouvez aussi relire les résultats des derniers tests et les données detaillées relative à ce support de stockage:

# smartctl -l selftest /dev/<device>
# smartctl -a /dev/<device>

smartd

Le démon smartd assure le suivi des statuts SMART et déclenche des avis de notification à chaque anomalie. Il est géré par systemd et configuré par le fichier /etc/smartd.conf. La syntaxe de ce fichier de configuration est à vrai dire plutôt ésotérique, et nous n'en donnons ici qu'un aperçu ; vous trouverez toutes les informations et des exemples dans les sections commentées de /etc/smartd.conf et dans man 5 smartd.conf.

Utilisation du démon

Pour lancer le démon, vérifier son état, programmer son auto-démarrage au boot de GNU/Linux et lire les dernières lignes du registre-journal, appliquez simplement l'option start/enable de systemd à smartd.service.

smartd reconnaît toutes les commandes courantes des commandes systemctl et journalctl.

Identification des disques à contrôler

En vue de contrôler tous les périphériques de stockage possibles, il faut ajouter ceci au fichier de configuration :

/etc/smartd.conf
DEVICESCAN -a

Notez qu'il s'aigt-là de la configuration par défaut de smartd et qu'on peut omettre la directive -a (présente par défaut).

Pour ne suivre que les disques /dev/sda et /dev/sdb, codez ceci :

/etc/smartd.conf
/dev/sda -a
/dev/sdb -a

Pour suivre avec la technologie SMART les périphériques de stockage externes (des clefs USB par exemple), il vaut mieux indiquer à smartd le code UUID plutôt que son adresse /dev/sdX, susceptible de changer à chaque redémarage du système.

Il vous faut donc d'abord récupérer l'UUID du périphérique en question ; cherchez dans les lignes afiché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

Suposons qu'ici la clef USB que nous voulions contrôler soit celle adressée par /dev/sde au démarrage. Il faut maintenant indiquer au démon smartd qu'il doit suivre cette unité de stockage en utilisant l'adresse /dev/disk/by-uuid/.

/etc/smartd.conf
/dev/disk/by-uuid/820cdd8a-866a-444d-833c-1edb0f4becac -a

Ainsi la clef USB sera suivie même si son adresse /dev/sdX change au cours d'un redémarrage.

Réception des messages d'alerte

Pour recevoir un e-mail de notification en cas de problème, utilisez l'option -m :

/etc/smartd.conf
DEVICESCAN -m address@domain.com

Pour que l'e-mail 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 e-mail à chaque lancement du démont smartd :

/etc/smartd.conf
DEVICESCAN -m address@domain.com -M test

Ces e-mails peuvent mettre du temps à vous parvenir. Si donc vous voulez être prévenu imédiatement en cas de crash disque, il vaut mieux prévoir l'exécution d'un script parallèlement à l'envoi du mail :

/etc/smartd.conf
DEVICESCAN -m address@domain.com -M exec /usr/local/bin/smartdnotify

Pour envoyer un mail et une alerte systèmn, ajouter dans /usr/local/bin/smartdnotify quelque chose du genre :

#!/bin/sh
# Envoyer le mail
echo "$SMARTD_MESSAGE" | mail -s "$SMARTD_FAILTYPE" "$SMARTD_ADDRESS"
# Notification a l'utilisateur
wall "$SMARTD_MESSAGE"

Si vous utilisez un environnement de bureau, vous préfèrerez sans-doute que le message apparaisse dans une boîte po-up. Voici un script (remplacez X_user et X_userid par le nom et l'identifants du client X) :

/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

Ce script nécessite l'installation du paquetage libnotify et un environnement de bureau compatible.

Vous pouvez aussi placer vos scripts utilisateurs dans le répertoire /usr/share/smartmontools/smartd_warning.d/:

Ce script prévient tous les utilisateurs conecté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
done

Ce script nécessite l'installation des paquetages libnotify et procps-ng ainsi qu'un environnement de bureau compatible avec ces applications.

Vous pouvez lancer ces scripts à la main par

/etc/smartd.conf
DEVICESCAN -m @smartdnotify

.

En mode console

  • skdump — utilitaire d'interrogation du composant SMART des supports de stockage.
http://0pointer.de/blog/projects/being-smart.html || libatasmart

Avec un 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 natif 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