Table des matières

, ,

Contrôler l’état du disque

S.M.A.R.T est un protocole supporté par la plupart des disques durs. Il fournit des indicateurs permettant de contrôler l'état de santé d'un disque dur et de prévenir les pannes physiques. Ce protocole existe depuis les années 90.

Indicateurs pouvant témoigner de la dégradation d'un disque:

$ sudo apt-get install smartmontools

Outil graphique

$ sudo apt-get install gsmartcontrol

Vérifier que le disque supporte SMART

Pour vérifier que le disque supporte SMART:

$ sudo smartctl --info /dev/sda

Ci-dessous un exemple de résultat:

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.10
Device Model:     ST380815AS
(...)
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Les deux dernières lignes nous intéressent. Elles indiquent que le protocole SMART est supporté et qu'il a déja était activé sur le périphérique. S'il n'est pas activé la commande suivante permet de le faire:

$ sudo smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda

La commande ci dessus active SMART pour le dique /dev/sda

Bridge USB

Lorsque le disque est connecté via USB, la commande smart peut retourner un message d type:

/dev/sdb: Unknown USB bridge [0x0480:0xb207 (0x315)]
Please specify device type with the -d option.

Use smartctl -h to get a usage summary

La plupart des bridges(ponts/convertisseurs) USB ne sont pas directement supportés par l'outil smartctl cependant ils peuvent fournir les données smart via le standard SAT (SCSI/ATA transfer):

smartctl -d sat -i /dev/sdb

Les différents modes disponibles sont listés par l'aide. L'argument -d et sa valeur devront être spécifiés sur chaque commande.

Lancer un test

Lorsque le test est en cours, même si l’accès au disque est un peu ralenti, il reste normalement fonctionnel. Selon l'option on peut lancer un test court ou long

sudo smartctl -d sat -t short /dev/sdb
$ sudo smartctl -t long /dev/sda
(...)
Testing has begun.
Please wait 27 minutes for test to complete.
Test will complete after Thu Jan 23 14:36:18 2014

La durée d'un test long dépend du périphérique. Ici le résultat nous indique qu'il durera environ 20 min.

Consulter les résultats

Pour consulter le fichier de log résultat de l'autotest

$ sudo smartctl -l selftest /dev/sdX

Pour n'afficher que les erreurs:

$ sudo smartctl  -q errorsonly -H -l selftest /dev/sda

Afficher les attributs

Chaque attribut décrit un aspect de l'usure du disque. Pour afficher tous les attributs SMART:

$ sudo smartcl -A /dev/sda

La commande retourne un tableau:

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   083   083   034    Pre-fail  Always       -       215590105
  3 Spin_Up_Time            0x0003   099   099   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       535
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   066   060   030    Pre-fail  Always       -       5174061
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       250 (157 235 0)
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       530
184 End-to-End_Error        0x0032   100   100   099    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   001   001   000    Old_age   Always       -       4297
188 Command_Timeout         0x0032   100   096   000    Old_age   Always       -       4295032842
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   070   053   045    Old_age   Always       -       30 (Min/Max 23/30)
191 G-Sense_Error_Rate      0x0032   100   100   000    Old_age   Always       -       10
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       65
193 Load_Cycle_Count        0x0032   097   097   000    Old_age   Always       -       7114
194 Temperature_Celsius     0x0022   030   047   000    Old_age   Always       -       30 (0 8 0 0 0)
195 Hardware_ECC_Recovered  0x001a   052   048   000    Old_age   Always       -       215590105
196 Reallocated_Event_Count 0x000f   100   100   030    Pre-fail  Always       -       211 (1045 0)
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       6
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       6
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0

Pour chaque attribut, plusieurs valeurs sont disponibles:

Les valeurs

Liste des attributs SMART usuels

Une valeur proche du seuil pour les attributs peut indiquer une panne électromécanique imminente.

Nom de l'attribut Rôle
Raw_Read_Error_Rate Fréquence d'apparition d'erreurs pendant la lecture de données brutes. Peu indiquer un problème sur la surface ou sur les têtes.
Spin_Up_Time Temps de mise en rotation du disque. Une augmentation peut annoncer une défaillance du contrôleur ou du matériel.
Start_Stop_Count Nombre de cycles arrêt/démarrage de l'axe de rotation
Reallocated_Sector_Ct Nombre de secteurs ré-alloués (le contenu a été placé dans une zone spécifique réservé c'est le remapping plus de bads blocks). Un nombre élevé de secteurs ré-alloués augmente les temps I/O.
Seek_Error_Rate Fréquence d'erreurs pendant le positionnement de la tête magnétique. Une augmentation indique dégradation du disque et du système mécanique.
Power_On_Hours Nombre d'heures de fonctionnement
Spin_Retry_Count Nombre d’échecs pour atteindre la vitesse de rotation normale du disque. Augmentation signale problème mécanique.
Command_Timeout Nombre d'opérations abandonnées car non réponse du disque.
Power_Cycle_Count Nombre de cycles de mise sous tension
Temperature_Celsius Température interne du disque en degrés Celsius
Hardware_ECC_Recovered Nombre de corrections ECC réalisées
Current_Pending_Sector Nombre de secteurs en attente de ré-allocation (remapping vers la zone de réserve).
Offline_Uncorrectable Erreurs non corrigibles en lecture/écriture. Une augmentation traduit défaiut de surface ou mécanique.
UDMA_CRC_Error_Count Nombre d'erreurs de CRC pendant un accès Ultra DMA, vérifier connectique

Troubleshooting

Interruption d'un test long sur disques usb

Le système hôte peut envoyer une commande standby au périphérique après un temps d'inactivité des entrées/sorties. Les journaux de tests rapportent alors les messages Aborted by host ou Interrupted (host reset). Ce comportement est fréquent sur les disque derrière des ponts (bridge) usb.

Un simple script tel que celui-ci permet d’éviter l’arrêt du disque en provoquant régulièrement une lecture:

while true; do
   dd if=/dev/sdX iflag=direct count=1 of=/dev/null
   sleep 60
done

Pour la gestion de l'alimentation des périphériques usb voir également le wiki alimentation-peripherique.

Sources:

Références