Re: Disque dur vraiment HS ?

Top Page

Reply to this message
Author: Olivier Allard-Jacquin
Date:  
To: Frédéric
CC: guilde
Subject: Re: Disque dur vraiment HS ?
    Bonsoir Frédéric,

Frédéric a écrit :
> On Tuesday 18 July 2006 23:54, Frédéric wrote:
>
>> J'ai un disque dur de portable qui commençait à merdouiller (secteurs
>> illisibles) suite à un choc (je l'ai donc changé). Je suppose que la
>> tête à bousillé une partir de la surface. Est-ce qu'il est quand même
>> possible d'utiliser les parties non abîmées du disque ? Est-ce qu'au
>> formatage le système de fichier est capable de sauter les endroits
>> foireux ? Que faut-il utiliser comme outils ?
>
> Je viens de penser à un truc : si j'arrive à repérer quel est l'endroit
> foireux, il doit être possible ensuite de l'éviter en faisant des
> partitions hors de cette zone, non ? Comment faire ce repérage ?


    J'ai été confronté récemment à ce type de problème :


----- Solution I -----

- pour la détection des blocs défectueux, et QUELQUE SOIT le type de
partition qu'il y a sur le dd, un bon vieux

    dd if=/dev/hda of=/dev/null 1> /tmp/log/status_hda.txt 2>&1


fait l'affaire. L'idée est de lire toute la surface du disque
(/dev/hda), et de rediriger les messages d'erreur dans un fichier. Bien
évidement, pour faire ce test on bootera la machine sur un autre disque
dur, ou tout simplement sur un LiveCD (knoppix, ...)

- en analysant les log, tu peux déterminer le ou les zones défectueuses.
Tu auras les numéros blocs défectueux qui s'afficheront, et un "fdisk
/dev/hda -l" te donnera le nombres de blocs du disque. Une simple règles
de trois te donnera donc les secteurs de débuts et de fin endommagés.

- l'idée sera alors de créer autant de partition "mortes" autour de ces
zones de secteurs défectueux. Si tu veux être un peu tranquille,
n'hésite pas à faire des partitions qui "débordent" largement autour de
la zone abîmée, par exemple en commençant la partition 50Mo avant les
premiers blocs défectueux, et terminant 50Mo après le dernier bloc abîmé.

- lorsque tu feras tes partitions, tu peux changer le type pour les
partitions "mortes" (sous "fdisk", il faut utiliser la touche "t"), en
mettant par exemple "0". Ainsi, tu ne sera pas tenté de les formater ou
de les monter.

- enfin, tu formates les partitions "saines", et tu pries très fort pour
que d'autres secteurs défectueux n'apparaissent pas...

    J'ai personnellement testé cette méthode sur un DD abîmé. J'avais isolé
en DEBUT de disque une zone de 100Mo que je considérai comme
défectueuse. Mais au bout de quelques semaines d'utilisation, les 7Go de
FIN de disque ont commencé à faire apparaître de nouveaux blocs
endommagés. Pire encore, les blocs étaient sur une table d'inode ext3,
et j'ai eu des plantages très sévères. J'ai dus tout reformater, et
créer une nouvelle partition "morte" de 7Go en fin de disque. Une
semaine encore après, d'autres secteurs défectueux sont apparus, plutôt
en MILIEU de disque...


    Bref, c'est pas la joie de travailler avec un DD abîmé... Plus on
l'utilise, plus il peut y avoir de problèmes...


----- Solution II -----

    Une autre solution existe, moins "bourrine" que la création de
partitions "mortes". Tu fais (sur une partition NON montée) un
"fsck.ext3 -c /dev/hdaX", ou "X" est un numéro de partition. Cela va
rechercher les secteurs défectueux, et modifier une table du système de
fichier pour lui indiquer de NE PLUS utiliser ces blocs là. En fait,
cette option "-c" utilise la commande "badblocks" pour faire cette
recherche (lire "man badblocks" et "man e2fsck.ext3").


    A noter que "fsck.ext3 -c -c /dev/hdaX" effectue un test en
lecture/écriture, ce qui est plus pertinent, mais aussi BEAUCOUP plus
long... :=(


    A titre d'info, sur un DD de 80Go, il faut plusieurs heures pour un
test en lecture. Et plusieurs JOURS pour un test en lecture/écriture...


    Cette méthode marche pas mal. MAIS, si tu as quelques secteurs
"fragiles mais non cassés" à cotés des blocs défectueux, ceux-ci ne
seront pas marqués comme inutilisables. Et donc tu pourrais rapidement
avoir de nouveaux problèmes. C'est pourquoi la création de partition
"mortes" est intéressantes, surtout lorsque beaucoup défectueux sont
apparus dans une même zone.


----- Solution III -----

    Enfin, une troisièmes possibilité : lire tout les fichiers du disque
dur, et repérer ceux qui se trouvent sur des secteurs défectueux. Une
fois cette recherche faite, tu déplaces ces fichiers-la dans un
répertoire à part (genre "/BAD_BLOCS/"), et tu penses à ne plus les
utiliser. Cette technique permet donc de "réserver" l'espace de blocs
défectueux.


J'ai écris un petit script qui fait cette lecture et qui stocke dans
"/tmp/test_file_RESULT.txt" le résultat de l'analyse. L'utilisation de
la commande "time" permet d'avoir un aperçu du temps que le fichier a
mis pour être lu. Si c'est anormalement long, alors il y avait des
secteurs défectueux à cet endroit. De toute façon, tu trouveras aussi
dans ce fichier des messages de type

<extrait>
ide: failed opcode was: unknown
end_request: I/O error, dev hda, sector 137592695
hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=137592700,
sector=137592695
</extrait>

qui te diront aussi qu'il y a eu un problème.

<script>
[olivier@phoenix bin]$ cat test_file.sh
#!/bin/bash -norc

PID=$$
TMP_FILE=/tmp/test_file.$PID
RESULT_FILE=/tmp/test_file_RESULT.txt

if [ -z "$1" ]; then

    echo "##### ERROR: Need at least a file name as parameter !"
fi


for FileName in $@; do

    echo "+ $FileName ..."
    Result=`time (echo "$FileName" && cat "$FileName" | wc -c) 1>
$TMP_FILE 2>&1`


    echo -ne "`date "+%Y-%m-%d_%X"`\t" >> $RESULT_FILE
    tr \\n \\t < $TMP_FILE >> $RESULT_FILE
    echo "" >> $RESULT_FILE


    [ -f "$TMP_FILE" ] && rm -f $TMP_FILE
done
</script>


    Attention, le script accepte de tester plusieurs fichiers, mais pas de
sous-répertoire


    Tu peux le lancer de cette manière :
    test_file.sh *


ou pour une arborescence complète :
    find . -type f -print0 | xargs --null test_file.sh


----- CONCLUSION -----

    Pour conclure :
- tu as plusieurs méthodes afin de continuer à utiliser ce disque dur
défectueu.


- je te conseille de ne pas y laisser dessus des données importantes,
car elles peuvent disparaître à tout moment.

- un phénomène de "pourrissement", ou de "gangrène" du disque dur peu
arriver (des particules peuvent "voler" dans le disque, et peuvent
corrompre de nouveaux blocs), auquel cas, tu peux perdre aléatoirement
des fichiers.

- si les inodes sont touchés par les secteurs défectueux, ET que Linux
veut y accéder (en lecture/écriture), tu as droit à un plantage
"semi-grave" : plus aucune application ne peut être lancée, le "init 0"
ne marche donc plus -> reset hardware de la machine.

    Bonne chance quand même... ;)


                        Olivier


PS: Hummm, sacré tartine quand même... Jérôme a été plus rapide que
moi... ;)

-- 
~~~~~~~  _____/\_____  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Phoenix /   _ \/ _   \    Olivier Allard-Jacquin
       /   / \  / \   \   Web:  http://olivieraj.free.fr/
      /___/  /  \  \___\  Mail: olivieraj@???
~~~~ /////  ///\\\  \\\\\ ~~~~~~~~~~~~~~~~~~~~~~~ Linux Powered !!