Aujourd’hui j’ai perdu un disque dur …. j’ai pu en profiter pour découvrir les outils de diagnostique pour disque dur sous linux.

Introduction
Il ne m’a pas lâché immédiatement (c’est souvent le cas), en fait un signe avant coureur simple, Freeze du système.

Là on cherche dans les logs du kernel des messages qui pourraient coïncider..

Nov 25 11:55:16 localhost kernel: ata2.00: exception Emask 0×0 SAct 0×0 SErr 0×0 action 0×2 frozen
Nov 25 11:55:16 localhost kernel: ata2.00: cmd b0/da:00:00:4f:c2/00:00:00:00:00/00 tag 0 cdb 0×0 data 0
Nov 25 11:55:16 localhost kernel: res 40/00:00:00:4f:c2/00:00:00:00:00/00 Emask 0×4 (timeout)
Nov 25 11:55:22 localhost kernel: ata2: port is slow to respond, please be patient (Status 0xd0)
Nov 25 11:55:26 localhost kernel: ata2: device not ready (errno=-16), forcing hardreset
Nov 25 11:55:26 localhost kernel: ata2: hard resetting port
Nov 25 11:55:27 localhost kernel: ata2: SRST failed (errno=-19)
Nov 25 11:55:27 localhost kernel: ata2: reset failed (errno=-19), retrying in 10 secs
……

L’heure correspond, c’est bien cela … encore innocent j’ai décidé de chercher la première apparition :
>cat /var/log/messages*
Nov 21 17:17:25 localhost kernel: ata2.00: exception Emask 0×0 SAct 0×0 SErr 0×0 action 0×2 frozen
Nov 21 17:47:25 localhost kernel: ata2.00: exception Emask 0×0 SAct 0×0 SErr 0×0 action 0×2 frozen
Nov 22 20:50:22 localhost kernel: ata2.00: exception Emask 0×0 SAct 0×0 SErr 0×0 action 0×2 frozen
Nov 23 09:16:05 localhost kernel: ata2.00: exception Emask 0×0 SAct 0×0 SErr 0×0 action 0×2 frozen

Et là je me suis lancé dans une recherche sans fin …. Pourquoi ?…

Et bien pas de raison trouvée … ce n’est donc pas une modification du système qui serait à l’origine du problème ….

Test des secteurs défectueux

là j’utilise la commande badblocks /dev/sdb
Ajoutez y l’option -v et vous aurez une information sur le bon déroulement des opérations. un badblock sans l’option -v est utile pour mettre a jours la table de partition en cas de secteur défectueux (voir les sources).

On peut aussi tester une zone particulière avec la commande suivante :

badblocks /dev/sdb -v 488386583 92000000

Mais là dans mon cas …. rien ….

Diagnostique avec smartctl

Cet outil est chargé automatiquement au lancement du poste, on défini son usage dans le fichier /etc/smartd.conf

/dev/sda -d ata -H -m root

smartctl -i /dev/sda : Quelques informations sur le disque
smartctl -t short /dev/sda : Un test interne du disque … ça fait pas mal de bruit .. :p
smartctl -a /dev/sda : Avec cette commande on pourra obtenir le résultat de la précédente mais de façon plus générale on a un bilan complet sur le disque.

A ce stade, dans mon cas, aucun problème trouvé. Mon disque dur serait donc hors de cause ? pourtant ….. TAC TAC TAC…. il commençait à chanter…

Et la température ?

hddtemp /dev/sda : permet d’obtenir la température du disque

Dans mon cas sa température était inférieure à celle de ses voisins … que faire …

Conclusion

Et bien il faut sauvegarder, si l’accès aux données et encore possible lorsque le disque fait CLAC CLAC … c’est qu’il va mourir … épicétou !!!
Pour ma part smartctl ne me préviendra du problème que trop tard … on est bien loin de l’outil de prévention qu’on nous annonce.

Sources
Un post sur hddtemp et la mise en place d’un graphique de température avec gnuplot, très instructif. http://dschneller.blogspot.com/2007/06/visualize-hard-disk-temperature-with.html

Usage de badblocks et actualisation des partitions

http://users.ictp.it/~radionet/ghana1998/SYSGUIDE/NODE48.HTM

doc sur smartd
en anglais : http://www.linuxjournal.com/article/6983
en français : http://valaurea.free.fr/documents/sig11_smart.html