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 :

et la 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.



