Jan 25 2010

Vérifier l’état de surface d’un disque sous Linux et autres UNIX-like

Structure physique et système de fichier d’un disque

Au chapitre Persistance du livre Système et réseau : histoire et technique, Laurent Bloch nous présente l'organisation physique d'un disque :

organisation physique d'un disque
et la structure d'un système de fichiers Ext2 :

structure d'un système de fichiers ext2

Tout utilisateur de Linux connaît bien l'utilitaire fsck qui vérifie périodiquement l'état des disques durs paramétrés en conséquence dans la fstab. Mais voilà… « vérifier l'état d'un disque dur » et un peu imprécis et il faut savoir que fsck ne vérifie que la structure du système de fichier et non la structure physique du disque.

Vérifier l'état de surface d'un disque sous les UNIX-Like

Les solutions libres qui permettent d'effectuer une vérification de l'état de surface d'un disque sont rares. Nous verrons ici deux solutions, simples et efficaces, disponibles sur tous les systèmes basés sur UNIX.

Vérifier les blocks défectueux d'un disque avec e2fsck

Pour vérifier la structure physique d'un disque ayant un système de fichier ext2 ou ext3 ou ext3 on peut utiliser e2fsck avec l'option -c.

Voici ce qu'en dit la page man de fsck.ext3:

-c  This option causes e2fsck to use badblocks(8) program to
 do a read-only scan of the device in order to find any bad blocks.
 If any bad blocks are found, they are added to the bad block
 inode to prevent them from being allocated to a file or directory.
 If this option is specified twice, then the bad block scan will be
 done using a non-destructive read-write test.

On notera cependant que le disque doit être démonté (l'usage d'une distribution live peut être nécessaire) ou monté en lecture seul.
Au passage, pour remonter un disque en lecteur seul on peut utiliser la commande (en root) :
mount -o remount,ro /dev/sdaX /Point/de/Montage.

On notera aussi que e2fsck modifie les inodes du disque pour prévenir l'allocation d'adresses à de mauvais blocks, contrairement à la méthode donnée plus loin.

On notera enfin que le programme e2fsck utilise en fait le programme badblocks pour détecter les blocks défectueux mais, comme le précise la page man de badblocks, il est déconseillé d'utiliser directement badblocks.

Vérifier les blocks défectueux d'un disque avec dd

Cette méthode est valable quelque soit le système de fichier mais elle ne modifie pas les inodes du disque pour prévenir l'allocation d'adresses à de mauvais blocks.

Le principe est très simple ; il suffit de demander à dd de lire bits à bits le périphérique et d'envoyer le résultat dans /dev/null (Dave Nule pour les intimes). Pour augmenter la vitesse de lecture on peut spécifier le nombre de bits à lire d'un coup (paramètre bs en bits).
Concrètement cela donne une commande du genre :
dd if=/dev/sdaX of=/dev/null bs=1048576 conv=noerror
Le conv=noerror est la pour continuer la lecture même après la détection d'un block défectueux et 1048576 de bits c'est 1Mio.