Diagnostic smart d'un disque

De Linux Server Wiki
Sauter à la navigation Sauter à la recherche


1 Activation

Vous pouvez vérifier si smart est activé avec :

smartctl -i /dev/sda

Vous devriez avoir un retour terminant par :

SMART support is: Available - device has SMART capability.
SMART support is: Enabled

si jamais le smart de votre disque est disabled, essayez de l'activer avec

smartctl -s on /dev/sda

Sur un desktop, il est possible de désactiver la récupération automatique "Offline" des données car elle peut altérer de manière aléatoire les performances du disque (smartctl -o off /dev/sda), sachant qu'une telle vérificatiion est généralement lancé au démarrage du disque. Sur un serveur (avec un disque tournant donc en permanence), il peut être préférable de la laisser activé.

2 Généralités

Pour vérifier l'état global du disque utilisez l'option -H. Si vous obtenez PASSED, tant mieux, sinon, préparez vous à sauvegarder d'urgence vos données !

~# smartctl -H /dev/sda
smartctl 5.40 2010-07-12 r3124 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

Pour vérifier la présence d'erreur dans le log smart :

~# smartctl -l error /dev/sda
smartctl 5.40 2010-07-12 r3124 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART Error Log Version: 1
No Errors Logged

3 self test

Commencez par vérifier les tests supportés par votre disque

~# smartctl --capabilities /dev/sda
smartctl 5.40 2010-07-12 r3124 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
General SMART Values:
Offline data collection status:  (0x82) Offline data collection activity
                                        was completed without error.
                                        Auto Offline Data Collection: Enabled.
Self-test execution status:      ( 244) Self-test routine in progress...
                                        40% of test remaining.
Total time to complete Offline 
data collection:                 ( 600) seconds.
Offline data collection
capabilities:                    (0x7b) SMART execute Offline immediate.
                                        Auto Offline data collection on/off support.
                                        Suspend Offline collection upon new
                                        command.
                                        Offline surface scan supported.
                                        Self-test supported.
                                        Conveyance Self-test supported.
                                        Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        General Purpose Logging supported.
Short self-test routine 
recommended polling time:        (   1) minutes.
Extended self-test routine
recommended polling time:        (  84) minutes.
Conveyance self-test routine
recommended polling time:        (   2) minutes.
SCT capabilities:              (0x103f) SCT Status supported.
                                        SCT Error Recovery Control supported.
                                        SCT Feature Control supported.
                                        SCT Data Table supported.

Ici, le disque supporte le short self-test (d'une durée d'environs 1 minute), l'extended self-test (d'une durée d'environs 84 minutes) et le Conveyance self-test (d'une durée d'environs 2 minutes). Notez qu'en plus de ces tests, tous les disques devraient normalement supporter le self-test offline.

Pour lancer l'un de ces tests :

smartctl -t short /dev/sda
smartctl -t long /dev/sda
smartctl -t offline /dev/sda
smartctl -t conveyance /dev/sda

Pour vérifier le niveau d'avancement du test en cours, regardez la ligne Self-test execution status de smartctl --capabilities /dev/sda

Pour vérifier le résultat des tests terminés :

smartctl -l selftest /dev/sda

4 Interprétation des attributs

Les attributs SMART sont ceux utilisés pour calculer l'état global du disque (smartctl -H /dev/sda). Pour visualiser ces attributs il faut utiliser l'option -A :

~# smartctl -A /dev/sdb
smartctl 5.40 2010-07-12 r3124 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== 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   108   099   006    Pre-fail  Always       -       19851850
  3 Spin_Up_Time            0x0003   097   097   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       46
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   075   060   030    Pre-fail  Always       -       35032672
  9 Power_On_Hours          0x0032   088   088   000    Old_age   Always       -       10912
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       23
183 Runtime_Bad_Block       0x0032   100   100   000    Old_age   Always       -       0
184 End-to-End_Error        0x0032   100   100   099    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   100   000    Old_age   Always       -       0
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   070   049   045    Old_age   Always       -       30 (Lifetime Min/Max 26/30)
194 Temperature_Celsius     0x0022   030   051   000    Old_age   Always       -       30 (0 15 0 0)
195 Hardware_ECC_Recovered  0x001a   021   018   000    Old_age   Always       -       19851850
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
240 Head_Flying_Hours       0x0000   100   253   000    Old_age   Offline      -       200536318028511
241 Total_LBAs_Written      0x0000   100   253   000    Old_age   Offline      -       861445114
242 Total_LBAs_Read         0x0000   100   253   000    Old_age   Offline      -       218940809
  • VALUE représente l'état de l'attribut. Plus il est haut mieux c'est.
  • WORST représente la valeur VALUE la plus basse que l'attribut à pu atteindre
  • THRESH représente le seuil, défini par le constructeur, en dessous duquel l'attribut devient critique et permet de prédire une panne à court terme.
  • Les valeurs Pre-fail sont celles à surveiller en priorité car elles représentent des attributs surveillant des erreurs critiques du disque. Old_age correspond aux attributs du vieillissement normal du disque, même s'il reste évident que plus le disque est vieux, plus le risque de crash augmente.
  • RAW_VALUE est plus difficile à interpréter étant donné qu'ils sont calculés de manières très différentes selon les constructeurs et même les modèles de disque. Dans mon exemple, c'est un disque Seagate Barracuda avec un Raw_Read_Error_Rate ayant une valeur raw très élevée qui peut sembler inquiétante mais qui a au final une VALUE qui reste très bonne. Chez d'autres marques comme WD, un Raw_Read_Error_Rate doit normalement tourner à 0 en valeur raw, et si la valeur raw augmente, c'est mauvais signe.

Pour savoir si la RAW_VALUE est meilleure haute ou basse, je vous renvoi ici : http://en.wikipedia.org/wiki/S.M.A.R.T.#Known_ATA_S.M.A.R.T._attributes (en général, une erreur doit être la plus basse possible)

Globalement, retenez que les RAW_VALUE de Current_Pending_Sector et Offline_Uncorrectable et Reallocated_Sector_Ct doivent idéalement être a 0. Si elles augmentent, il faut investiguer la situation.

Notez que certains attributs SMART, identifiés par le mot Offline à la colonne UPDATED, ne sont mis à jour que lorsque la collecte de données offline a lieu. Généralement, cette collecte à lieu au démarrage du disque, ou de manière régulière si vous activez la collecte automatique des données offline (avec smartctl -o on /dev/sda)

4.1 Current_Pending_Sector, Reallocated_Event_Count et Reallocated_Sector_Ct

  • Quand le contrôleur interne du disque détecte un secteur qu'il ne parvient plus à lire, il incrémente la valeur Current_Pending_Sector.
  • Si lors d'une tentative ultérieure de lecture, le secteur est lu avec succès, les données sont transférés sur un spare sector. Dans ce cas, le contrôleur décrémente la valeur Current_Pending_Sector, et incrémente les valeurs Reallocated_Event_Count et Reallocated_Sector_Ct
  • Si le secteur ne peut vraiment plus être lu, le contrôleur conserve en mémoire ce secteur en attente (d'où le maintien de Current_Pending_Sector), dans l'attente d'une tentative d'écriture sur ce secteur. Par la suite, il y a deux cas de figure selon les constructeurs :
    • Soit, par la suite, des données doivent être écrite sur ce secteur, et que cette écriture réussie, le secteur est considéré comme fonctionnel et le contrôleur décrémente la valeur Current_Pending_Sector. Si l'écriture échoue, le secteur est considéré comme défectueux, et se retrouve remplacé par un spare sector. Dans ce cas, le contrôleur décrémente la valeur Current_Pending_Sector, et incrémente les valeurs Reallocated_Event_Count et Reallocated_Sector_Ct
    • Soit, dès que des données doivent être écrite sur ce secteur, il est immédiatement remappé sur un spare sector, et les données sont écrites sur le spare sector. Dans ce cas, le contrôleur décrémente la valeur Current_Pending_Sector, et incrémente les valeurs Reallocated_Event_Count et Reallocated_Sector_Ct


A noter que, dans tous les cas, après une écriture complète du disque (par exemple si vous le remplissez de 0 avec dd), Current_Pending_Sector devrait toujours revenir à 0 (et éventuellement, selon le mode de fonctionnement, Reallocated_Event_Count et Reallocated_Sector_Ct augmenteront ou non).

Si Current_Pending_Sector ne revient pas à 0 après un full-disk-write, c'est relativement inquiétant car cela signifie qu'un secteur est défectueux mais n'arrive pas a être remappé pour une raison quelconque (ou alors bug de firmware).


Dans l'idéal, si vous voyez Current_Pending_Sector augmenter :


De manière globale, le risque de voir son disque tomber définitivement en panne, ou provoquer une perte de données importante, dépend non seulement du nombre de pending sectors et reallocated sectors, mais également de la vitesse à laquelle ces chiffres augmentent. Si vous avez 2 secteurs réalloués, mais que ce chiffre reste stable, votre disque pourrait vivre encore plusieurs années. Tout dépend aussi de l'importance que vous accordez aux données stockées.
Enfin, notez qu'un nombre important de secteurs réalloués ralentira votre disque dur (les spare sector ne sont, nécessairement, pas continu avec les secteurs réalloués, donc la tête de lecture doit se déplacer).

5 Surveillance automatique avec smartd

/dev/sda -a -o on -S on -s (S/../.././02|L/../../6/03) -m mail@domain.tld

Nous activons la surveillance globale (-a), la collection automatique offline des donnés (-o on), la sauvegarde automatique des attributs (-S on et lançons un short self test tous les jours à 2h du matin, et un long self test tous les samedi à 3h du matin. Si des erreurs sont détectés, un email est envoyé à mail@domain.tld.
Notez que -a correspond à -H -f -t -l error -l selftest -C 197 -U 198 avec :

  • -H : SMART Health Status
  • -f : Monitor for failure of any 'Usage' Attributes
  • -t : Report changes in 'Prefailure' Normalized Attributes et Report changes in 'Usage' Normalized Attributes
  • -l : Monitor SMART log (error et selftest ici)
  • -C 197 : Report if Current Pending Sector count non-zero (attribut 197)
  • -U 198 : Report if Offline Uncorrectable count non-zero (attribut 198)