System-Linux

Aller au contenu | Aller au menu | Aller à la recherche

Smartmontools

smart_logo.gif Faire des sauvegardes c'est bien mais surveiller ces disques c'est vital et nombreux sont ceux qui l'oublie.

Pour ce faire, il existe un utilitaire très simple disponible sur la quasi-totalité des distributions GNU/Linux : Smartmontools.

Pour ceux qui connaissent déjà, cet article n'apporte que peu de choses par rapports à l'existant et pour beaucoup une impression de déjà vu se fera sentir. Cependant pour les autres, il est toujours bon de rappeler qu'une solution de surveillance des disques durs existe.

Smartmontools est basé sur la technologie S.M.A.R.T intégré sur la plupart des disques durs récents. SMART c'est une création de Compaq dans le but de fournir plusieurs indicateurs sur l'état d'un disque dur de manière instantanée. Les disques durs sont mécaniques (exceptés les SSD) et malheureusement ils veillissent et s'usent, l'idée c'est que les pannes matérielles sont dues en majorité à cette vieillesse et qu'elles deviennent prévisibles si on y prend garde.

Il n'y a pas vraiment de standard pour SMART, seulement des règles de bonnes conduites entre constructeurs et il sera parfois impossible d'utiliser SMART pour cause d'implémentations différentes. Wikipedia pourra vous en dire plus et mieux le sujet. (Faites des dons à Wikipedia !)

Néanmoins smartmontools gère correctement la plupart d'entre eux et c'est tant mieux pour nous. Cet outil fonctionne de deux manières :

  • Sporadiquement via la ligne de commande pour connaitre la qualité d'un disque dur avant de l'installer ou par exemple en cas de maintenance du matériel.
  • En continu grâce a un démon qui surveillera les dégradations du ou des disques. Exemple pour un serveur en production.




1. Utilisation manuelle


Ici tout est fait en root mais sudo marche tout autant

Comme d'habitude l'installation via votre gestionnaire de paquet n'est pas bien méchant :

# apt-get install smartmontools



L'outil smartctl permet de lancer des tests, d'en visualiser les résultats et d'avoir tout un tas d'informations sur un device.

L'option -t permet de lancer des tests court ou long. Dans chacun des cas, l'outil vous informe de la durée approximative du test. Il peut se tromper mais c'est assez rare et est plutôt un signe précurseur d'une panne.

# smartctl -t long /dev/sda
[...]
"Please wait xx minutes for test to complete."
# smartctl -t short /dev/sda
[...]

Il y a d'autres tests, par exemple vérifier seulement une portion du disque, mais le plus pertinent dans le cadre d'un check est, à mon avis, le test long. Pour tout le reste, il y a le man ;)


C'est difficile de connaitre la fin exacte d'un test mais on peut, de temps à autres vérifier l'avancement de celui-ci :

# smartctl -a  /dev/sda | grep "Self-test execution" -A 1
Self-test execution status:      ( 247) Self-test routine in progress...
                                        70% of test remaining.




L'option -l liste des résultats suite à ces tests :

# smartctl -l selftest /dev/sda
smartctl 5.39 2009-09-20 r2920 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-9 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%      7113         -
# 2  Short offline       Completed without error       00%         0         -

Ici aussi d'autres choix que selftest sont possibles, j'apprécie "-l error" pour ma part mais "-l selftest" est suffisant dans beaucoup de cas.


Une fois vos tests passés et s'il n'y a pas d'erreur vous pouvez vous arrêter là. En revanche, en cas d'alerte ou tout simplement si vous êtes un peu curieux (mais vous ne seriez pas ici autrement) alors vous pouvez utiliser les options -a et -A.

L'option -a est très verbeuse et pas forcément lisible. Je ne l'utilise que rarement et préfère -A qui fournit toutes les mesures supportées par le disque :

$ smartctl -A /dev/sda
smartctl 5.39 2009-09-20 r2920 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-9 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
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   100   100   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0007   253   253   025    Pre-fail  Always       -       4544
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       413
  5 Reallocated_Sector_Ct   0x0033   253   253   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000e   253   253   000    Old_age   Always       -       0
  8 Seek_Time_Performance   0x0024   253   253   000    Old_age   Offline      -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       7302
 10 Spin_Retry_Count        0x0032   253   253   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0012   253   253   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       231
 13 Read_Soft_Error_Rate    0x000e   100   100   000    Old_age   Always       -       19266754
184 Unknown_Attribute       0x0033   253   253   099    Pre-fail  Always       -       0
187 Reported_Uncorrect      0x0032   253   253   000    Old_age   Always       -       0
188 Unknown_Attribute       0x0032   253   253   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   148   148   000    Old_age   Always       -       30 (Lifetime Min/Max 8/30)
194 Temperature_Celsius     0x0022   148   148   000    Old_age   Always       -       30 (Lifetime Min/Max 8/30)
195 Hardware_ECC_Recovered  0x001a   100   100   000    Old_age   Always       -       19266754
196 Reallocated_Event_Count 0x0032   253   253   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0012   253   253   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   253   253   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x000a   100   100   000    Old_age   Always       -       0
201 Soft_Read_Error_Rate    0x000a   100   100   000    Old_age   Always       -       0
202 TA_Increase_Count       0x0032   253   253   000    Old_age   Always       -       0




On trouve un tas de façon de lire ces chiffres, tout le monde y va de son petit commentaire. Certains vous diront de surveiller particulièrement Power_On_Hours ou Reallocated_Sector_Ct ou encore Uncorrectable Sector Count ... Ce n'est pas faux mais je crois que l'ensemble des indicateurs doit être lue et l'analyse de ceux-ci doit rester personnelle. Pour des détails la page Wikipedia de S.M.A.R.T traduit et commente très bien ces messages.


2. Utilisation démoniaque



La seconde façon d'utiliser smartmontools est de le daemon-iser et pour cela, point n'est nécessaire un quelconque sortilège puisque le démon est installé en même temps que l'outil de base smartcl (partie 1). Il ne reste donc qu'à le configurer.

L'activation du démon se fait dans le fichier /etc/default/smartmontools en décommentant la ligne :

start_smartd=yes

Tout le reste de la configuration dépend de /etc/smartd.conf . Par défaut une configuration est présente sur Debian. Pour les autres distributions, je ne saurais dire. Celle-ci consiste en une seule ligne qui scannes les disques pour connaitre ceux sur lesquels SMART est activé et les analysera en transmettant les résultats à root. DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner


Pour ma part, je préfère lister explicitement les disques à surveiller et commenter la ligne par défaut, d'une part parce que je veux pas analyser certains dinosaures et d'autres part parce que les indicateurs de température ne m'intéressent pas :

/dev/sda -d ata -a -m hinault@gmail.com -I 194
/dev/sdb -d ata -a -m hinault@gmail.com -I 194
/dev/sdc -d ata -a -m hinault@gmail.com

L'option -I ignore l'attribut 194 qui correspond à la température sur deux des disques. L'option -d force le type de device a "ata" parce qu'il m'est arrivé que smartmontools n'arrive pas à me détecter le type de disque. L'option -a lance la batterie complète de tests. Paramétrer cette partie au millimètre est souvent plus judicieux mais je ne détaillerais pas ça ici : le fichier d'exemple installé avec le paquet est truffé d'explications. L'option -m permet bien sûr d'envoyer des rapports d'erreurs par mail.


Pensez à redémarrer le démon pour qu'il prenne en compte ses changements :

# /etc/init.d/smartmontools restart
Restarting S.M.A.R.T. daemon: smartd.




3. Bonus



Sur tout mes disques, SMART était activé mais dans le cas contraire, il suffit apparemment de l'activer avec cette simple commande :

smartctl --smart=on --offlineauto=on --saveauto=on /dev/sdX

ou l'équivalent simplifié :

smartctl -s -o -S /dev/sdX



Dans le cas où des errors surviendrait un jour sur vos disques, il semble exister un outil efficace pour réparer les blocs corrompus : badblock. Je n'ai jamais eu l'occasion de le tester mais on ne m'en dit que du bien ;)

Article sous CC-by excepté le logo.

Par Kevin Hinault | le jeudi, octobre 8 2009 07:00