Smartmontools
Smartmontools est un paquet regroupant un ensemble d'outils basés sur la technologie S.M.A.R.T.. Celle-ci est un système et un ensemble d'outils qui permettent de suivre et contrôler l'usure de supports de stockage, SSD ou disques durs. S.M.A.R.T. ignore les partitions et le partitionnement : il ne rend compte que de l'état physique des supports de stockage.
S.M.A.R.T. est reconnu et implémenté sur la plupart des disques durs depuis la fin des années 1990.
En configurant le service smartd (fichier /etc/smartd.conf), il est possible d'être prévenu automatiquement si des problèmes sont détectés.
Le paquet smartmontools n'est pas installé par défaut et fait l'objet de relativement peu de publicité.
Installation
Pour une instance opérationnelle
Commencez par installer le paquet smartmontools et éventuellement smart-notifier.
mailx ou mailutils. Le plus simple est d'installer et configurer msmtp pour recevoir une alerte par email.
Si vous souhaitez utiliser une interface graphique pour smartmontools, installez le paquet gsmartcontrol.
Le site officiel est ici : GSmartControl.
On trouvera des copies d'écran ici : Copies d'écran.
Utilisation
Évidemment, il reste possible de récupérer les données S.M.A.R.T sans causer d'usure au SSD, heureusement
Pour utiliser certaines fonctionnalités avancées avec les SSD NVMe, il peut être nécessaire d'installer le paquet nvme-cli.
Dans les exemples suivants, on va considérer le disque dur nommé /dev/sdX, qu'il faudra remplacer par le nom du disque que vous voulez tester, par exemple /dev/hda, /dev/sdc1) ou /dev/sg12) :
- Pour activer SMART sur un disque, entrer la commande suivante (nécessaire une seule fois seulement pour chaque disque, mais peut être répétée sans danger) :
sudo smartctl --smart=on --offlineauto=on --saveauto=on /dev/sdX
- Pour obtenir quelques infos disponibles par SMART sur le disque :
sudo smartctl -H -i /dev/sdX
- Pour obtenir un rapport complet de l' état de santé du disque :
sudo smartctl -s on -a /dev/sdX
Au moins deux types de tests sont possibles, les courts (~1 min) et les longs (~10 min à 90 min).3)
- Pour lancer l'exécution des tests :
sudo smartctl -t short /dev/sdX sudo smartctl -t long /dev/sdX
- Pour accéder ensuite au résultats/statistiques de ces tests :
sudo smartctl -l selftest /dev/sdX
ou en plus bref (retourne un message seulement si le disque retourne un indicateur SMART "failing" ou si des autotests ont enregistré des erreurs) :
sudo smartctl -q errorsonly -H -l selftest /dev/sdX
- Pour relancer un test long qui s'est arrêté suite à une erreur sur le LBA
N-1:sudo smartctl -t select,N-max /dev/sdX
- Pour suivre l'exécution de cette relance :
sudo smartctl -a /dev/sdX | grep left
Cela permet de visualiser le LBA début et le LBA fin de l'intervalle de 65536 secteurs en cours de test. Ne pas se fier au pourcentage indiqué.
- Exécution d'un test long sur un disque de grande capacité.
Le test long peut durer des heures. S'il y a un arrêt pour une cause externe, le LBA en cours de traitement peut ne pas être mémorisé. Une solution consiste à lancer un test sur les 500 premiers Gio ( ou le premier Tio) du disque avec cette commande :sudo smartctl -t select,0-999999999 /dev/sdX
ou
sudo smartctl -t select,0-1999999999 /dev/sdX ### pour 1 Tio
ou
sudo smartctl -t select,0-499999999 /dev/sdX ### pour 250 Gio
Lorsque ce test est terminé une première fois, on peut le poursuivre en repassant cette commande autant de fois que nécessaire, après s'être assuré que la précédente s'est correctement terminée et que la fin du disque n'a pas été atteinte. Sinon cela repart depuis le début du disque jusqu'à la fin !
sudo smartctl -t select,next /dev/sdX
Informations sur l'état actuel d'un disque
Dans les exemples suivants, on va considérer le disque dur nommé /dev/sdX qu'il faudra remplacer par le nom du disque que vous voulez tester ; par exemple /dev/hda, /dev/sdc.
La connaissance de l'état actuel d'un disque peut être importante pour comprendre une erreur de lecture-écriture. Cette information est souvent demandée dans le forum.
/dev/sdX. C'est même nuisible quand le disque est branché en USB, cf. cet exemple https://forum.ubuntu-fr.org/viewtopic.php?pid=21841415#p21841415.
Pour connaître les lettres des disques connectés, utilisez la commande suivante :
lsblk -d | grep -Ev "NAME|loop|sr0|zram"
Cas d'un disque interne
Cas d'un disque non NVMe
La commande est :
sudo smartctl -s on -a /dev/sdX
Rappel : ne pas spécifier de chiffre après la lettre X (sauf montage en RAID, voir note).
-s on afin d'avoir les données de suivi.
Cas d'un disque NVMe
Le retour de la commande lsblk permet de s'assurer que le disque est un NVMe. Dans ce cas la commande précédente devient:
sudo smartctl -s on -a /dev/nvmeXXX
Un suivi plus spécifique est alors possible en installant le logiciel nvme-cli dédié à ce type de matériel.
sudo apt install nvme-cli
Puis donner le retour de quelques commandes :
sudo nvme error-log /dev/nvmeXXX | grep -A2 Entry | grep -v "................." sudo nvme smart-log /dev/nvmeXXX sudo nvme sanitize-log /dev/nvmeXXX
Voir un cas concret.
Cas des boîtiers et autres adaptateurs USB
La commande ci-dessus peut nécessiter un complément si le disque est connecté en usb.
Rappel : Mettre un chiffre après la lettre X est (sauf montage en RAID, voir note) nuisible.
- Ce complément est en général fourni par
sudo smartctl --scan
qui va retourner quelque chose comme
/dev/sdb -d sat # /dev/sdb [SAT], ATA device
(même pour de l'usb) ou bien comme
/dev/sdb -d usbsunplus # /dev/sdb [USB Sunplus], ATA device
On récupère alors
-d usbsunplusetsdb, et on obtient le retour complet grâce àsudo smartctl -s on -a -d usbsunplus /dev/sdb
- Si ça ne marche pas, c'est dans le retour de
sudo smartctl -s on -a /dev/sdX
en remplaçant X par la lettre trouvée juste avant, qu'il faut chercher la ligne contenant
Unknown USB bridge [0x
De cette ligne, on copie
0xyyyy:0xzzzz, sans les crochets et on va le chercher dans la page https://www.smartmontools.org/wiki/Supported_USB-Devices qui référence :
- La plupart des adaptateurs supportés et donne l'option
-dopérationnelle de chacun, - La plupart des adaptateurs non supportés.
Sur cette page-là on va donc récupérer la bonne option -d machin-truc, et
sudo smartctl -s on -a -d machin-truc /dev/sdX
en remplaçant X par la lettre trouvée juste avant, ce qui fournira le rapport smartctl complet.
Exceptionnellement, il peut arriver que ni 1. ni 2. ne suffise :
Dans ce cas, on peut essayer certaines des commandes suivantes, toujours en remplaçant X par la bonne lettre, vérifiée juste avant. Il faut entrer les cinq commandes, ne vous arrêtez pas à la première surtout si elle n'a renvoyé que quelques lignes :
sudo smartctl -s on -d ata -a /dev/sdX sudo smartctl -s on -d sat -a /dev/sdX sudo smartctl -s on -d scsi -a /dev/sdX sudo smartctl -s on -d auto -T verypermissive -a /dev/sdX sudo smartctl -s on -d test -T verypermissive -a /dev/sdX
Cas du pilote UAS
Si aucune commande précédente ne fonctionne avec un adaptateur USB, il peut être nécessaire de désactiver le support de UAS(P)4).
Test avec déchargement du module
- Brancher l'adaptateur
- Relever les identifiants USB vendeur:produit pour l'adaptateur :
- lister les périphériques USB utilisant le pilote UAS
lsusb -t | grep uas
- noter la valeur de
PortetDev, puis afficher ce périphérique USB avec XXXvaleur de Portet YYYvaleur de Devlsusb -s XXX:YYY
- noter la valeur après ID sous le format
<id vendeur>:<id produit>
- Démonter toutes les partitions de tous les disques externes connectés :
sudo umount -v /dev/sdX*
- Décharger le module
uas:sudo modprobe -r uas
- Décharger le module
usb-storage:sudo modprobe -r usb-storage
- Recharger le module
usb-storagesans le support uas pour l'adaptateur en remplaçant<id vendeur>et<id produit>par les valeurs relevée précédemment :sudo modprobe usb-storage quirks=<id vendeur>:<id produit>:u
- Si les partitions du disque ne sont pas montées automatiquement, débrancher l'adaptateur USB et le rebrancher connecté avec le disque dur
- Réessayer les commandes
smartctl
Exemple concret
Exemple avec un adaptateur de marque U-Green avec le chipset VIA qui se charge en /dev/sdc.
- Tester la commande initiale :
sudo smartctl -s on -d sat -a /dev/sdc
smartctl 6.5 2016-01-24 r4214 [x86_64-linux-4.4.0-71-generic] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org **Read Device Identity failed: scsi error unsupported field in scsi command** A mandatory SMART command failed: exiting. To continue, add one or more '-T permissive' options.
- Recherche du périphérique USB utilisant le pilote UAS :
lsusb -t | grep uas
|__ Port **3**: Dev **35**, If 0, Class=Mass Storage, Driver=**uas**, 480M
- Relever la valeur après
Port(ici3) etDev(ici35), et rechercher les identifiants USB pour ce périphériquelsusb -s 3:35
Bus 003 Device 035: ID **2109:0711** VIA Labs, Inc.
- Dans l'exemple, noter pour la suite <id vendeur>=2109 et <id produit>=0711
- Démonter les partitions du disque :
sudo umount -v /dev/sdc*
umount: /dev/sdc: not mounted umount: /media/ubuntu/Linux (/dev/sdc1) unmounted
- Décharger les différents modules :(Les commandes sont sans retour.)
sudo modprobe -r uas sudo modprobe -r usb-storage
- Recharger le module usb-storage sans le support UAS pour l'adaptateur ( La commande est sans retour.) :
sudo modprobe usb-storage quirks=2109:0711:u
- Les partitions du disque sont remontées automatiquement, sinon débrancher et rebrancher l'adaptateur avec le disque connecté
- Vérifier que le pilote n'est plus uas mais usb-storage5)
lsusb -t | grep usb-storage
|__ Port 3: Dev 36, If 0, Class=Mass Storage, Driver=**usb-storage**, 480M
- Relancer la commande smartctl et constater qu'il n'y a plus d'erreur :
sudo smartctl -s on -d sat -a /dev/sdc
smartctl 6.5 2016-01-24 r4214 [x86_64-linux-4.4.0-71-generic] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Family: Western Digital Caviar Blue Serial ATA Device Model: WDC WD1600AAJS-75M0A0 [...]
Blacklister le module UAS
Si le test précédent est concluant, il est possible de rendre le changement permanent.
- Créer le fichier
/etc/modprobe.d/ignore-uas.confavec les droits d'administration. - Ajouter la ligne suivante en remplaçant
<id vendeur>et<id produit>par les valeurs relevée précédemment :- /etc/modprobe.d/ignore-uas.conf
options usb-storage quirks=<id vendeur>:<id produit>:u
- Sauvegarder le fichier
- Redémarrer l'ordinateur
- Brancher l'adaptateur directement
Test plus facile
Afin de savoir si le module UAS est responsable du problème, il est possible d'interdire son utilisation pour tous les disques externes en fabriquant un fichier
sudo touch /etc/modprobe.d/blacklist-usb.conf sudo echo "blacklist uas" /etc/modprobe.d/blacklist-usb.conf
Puis on reboote et on vérifie que le problème est résolu. On supprime alors le fichier puis on part à la recherche du id vendeur et du id produit. Si ceux-ci ne sont pas obtenus, la seule solution est de refabriquer le fichier !6)
Notification automatique d'un problème
Grâce au service (d pour daemon) smartd il est possible de lancer des analyses régulières et ainsi suivre sur le long terme l'état de vos supports de stockage.
Il est aussi possible de paramétrer des alertes automatiques (envoi de mail, messages utilisateur par wall, syslog…) en cas de détections d'erreurs ou de signes de vieillissement.
Le service smartd est fourni par le paquet smartmontools.
Le fichier de configuration est /etc/smartd.conf ; par défaut, il est configuré pour scanner tous les supports. Une configuration de ce fichier est donc nécessaire pour obtenir des alertes pertinentes.
Paramétrer le service smartd
Éditez le fichier /etc/default/smartmontools et décommentez start_smartd=yes si présent (en supprimant le # au début de la ligne).
Si nécessaire, décommentez #smartd_opts="–interval=1800" (toujours en supprimant le # au début de la ligne) en indiquant la fréquence de surveillance souhaitée.
Démarrez ou relancez ensuite le service en entrant dans un terminal :
systemctl restart smartd
Pour s'assurer de l'état du service :
systemctl status smartd
Pour vérifier que smartd fonctionne
Le but de smartd est de surveiller les disques et de prévenir l'utilisateur par messagerie des nouvelles anomalies survenues. La fréquence par défaut est de 30 minutes.
Pour vérifier que les futurs messages d'anomalies seront expédiés, il suffit de lancer ces commandes :
echo "DEVICESCAN -a -m root -M test" >/tmp/FIC && sudo smartd -n -q onecheck -c /tmp/FIC
Pour expédier les messages à un autre destinataire, il faut d'abord vérifier qu'il peut recevoir les messages. Il faut entrer ces commandes en remplaçant l'adresse mail :
echo "DEVICESCAN -a -m destinataire@exemple.com -M test" >/tmp/FIC && sudo smartd -n -q onecheck -c /tmp/FIC
Il faut alors modifier le fichier /etc/smartd.conf pour ajouter cette adresse juste avant l'adresse root. Par exemple :
DEVICESCAN -a -r 9! -d removable -n standby -m destinataire@example.com,root -M exec /usr/share/smartmontools/smartd-runner
Il faut ensuite relancer le service pour que le changement de paramétrage soit pris en compte.
À signaler aussi le paquet smart-notifier qui vous préviendra de tout problème imminent. Ce programme analyse les messages de tests et ouvre une fenêtre d'avertissement s'il détecte un problème.
Si vous voyez une alerte S.M.A.R.T., il y a de fortes chances pour que votre support soit en train de flancher. Copiez immédiatement vos fichiers ailleurs (disque dur externe, cloud, clé USB, gravure sur CD/DVD…).
Pour vérifier que smart-notifier fonctionne
sudo sh -c 'echo test de message | smart-notifier --notify'
Ce qui affichera :
Le message peut aussi être affiché au démarrage de l'ordinateur.
Traduire l'alerte
Lorsque vous installez smart-notifier pour quelqu'un d'autre, il serait dommage que ses notifications soient ignorées parce que l'utilisateur ne parle pas anglais…
Trouver le nom du fichier contenant les messages d'avertissement :
ls -ls /usr/share/smart-notifier/smart_notifier
Première possibilité
Sauvegarder l'original pour parer aux erreurs en entrant dans le terminal :
sudo cp /usr/share/smart-notifier/smart_notifier/smart-notifier.glade /usr/share/smart-notifier/smart_notifier/smart-notifier.glade.old
Puis avec les droits d'administration, éditez le fichier /usr/share/smart-notifier/smart_notifier/smart-notifier.glade en modifiant les lignes indiquées ci-dessous :
- Titre de la fenêtre, ligne 31:
<property name="title" context="True" translatable="True">Alerte disque dur</property>
- Titre du message, ligne 56:
<property name="label" context="True" translatable="True"><big><b>Alerte, disque dur défaillant !</b></big></property>
- Corps du message, ligne 69:
<property name="label" context="True" translatable="True">S.M.A.R.T. surveille en permanence les disques durs et donne l'alerte en cas de variation importante dans les normales relevées. 60 % des pannes de disques durs sont mécaniques, S.M.A.R.T. peut en détecter 30 %. Cette alerte n'est pas à prendre à la légère et peut annoncer une panne imminente. Veuillez planifier rapidement vos sauvegardes et le remplacement de vos disques durs.</property>
- Message de smartd, ligne 92:
<property name="label" context="True" translatable="True">Message original de smartd :</property>
Seconde possibilité
Faire la même action en utilisant les commandes suivantes :
sudo cp /usr/share/smart-notifier/smart_notifier/smart-notifier.xml /usr/share/smart-notifier/smart_notifier/smart-notifier.xml.old sudo sed -i -e "s/gt;Hard Disk Health Warning/gt;Alerte, disque dur défaillant !/" /usr/share/smart-notifier/smart_notifier/smart-notifier.xml sudo sed -i -e "s/Hard Disk Health Warning/Alerte disque dur/" /usr/share/smart-notifier/smart_notifier/smart-notifier.xml sudo sed -i -e "s/The hard disk health status has changed. This could mean that hard drive failure is imminent. It is always a good idea to have up to date backups./S.M.A.R.T. surveille en permanence les disques durs et donne l'alerte en cas de variation importante dans les normales relevées. 60 \% des pannes de disques durs sont mécaniques, S.M.A.R.T. peut en détecter 30 \%. Cette alerte n'est pas à prendre à la légère et peut annoncer une panne imminente. Veuillez planifier rapidement vos sauvegardes et le remplacement de vos disques durs./" /usr/share/smart-notifier/smart_notifier/smart-notifier.xml
Interprétation des résultats
L'interprétation des résultats peut demander de l'expérience, n'hésitez-pas à les poster sur le forum.
Voir aussi
- Tuto sur le système smart : tutoriel de Lea-linux
- Wikipédia : SMART (en français et très succinct).
- Bad block HOWTO for smartmontools : pour aller plus loin lorsqu'une erreur est détectée.
- Quelques explications des normales SMART sont disponibles dans Wikipédia, ainsi que dans ce lien : https://www.deltasight.fr/monitoring-serieux-de-disques-durs-avec-smartmontools/
Contributeurs : didrocks, fnx, .amalric. pour la traduction, furious-therapy.
sudo fdisk -l
/dev/sgX permettent d'atteindre les disques qui composent un volume géré par un contrôleur RAID hardware. Dans un tel cas, les périphériques du type /dev/sdX ne sont pas utilisables car à ce niveau l'OS ne voit que le volume géré par le contrôleur RAID (un disque logique sans information S.M.A.R.T.) et non des disques qui le composent (disques physiques avec information S.M.A.R.T.). Par exemple, pour obtenir les informations S.M.A.R.T. sur un disque SATA faisant partie d'un volume RAID :sudo smartctl -a -d sat /dev/sg1Référence : http://www.cyberciti.biz/faq/linux-checking-sas-sata-disks-behind-adaptec-raid-controllers/
sudo smartctl -a /dev/sdX

