Du mauvais secteur au «fichier endommagé» - l'a-t-il fait pour Linux / ext3, puis-je le faire pour Windows / NTFS?

17

Lorsqu'un contrôle SMART sur un disque signale un mauvais secteur, il est important de pouvoir identifier le fichier qui a le mauvais secteur - et le restaurer à partir de sauvegardes. Ci-dessous, je montre comment j'ai fait cela pour mon serveur VMWARE Linux / ext3 - mais quelqu'un sait-il si cela peut être fait pour Windows / NTFS?

Voici comment je l'ai fait pour Linux / ext3: j'ai d'abord demandé au lecteur de faire une analyse de la surface matérielle (en dessous du niveau du système d'exploitation, avec les circuits SMART sur le lecteur):

vserver:~# smartctl -t long /dev/sdc

J'ai regardé les résultats:

vserver:~# smartctl -a /dev/sdc
...
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       1
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       9
...
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       90%     27679         591363172

Ainsi, un secteur était déjà marqué comme mauvais, 9 ont été marqués pour être remplacés à partir de l'espace du secteur "intermédiaire". Plus important encore, la première adresse de bloc logique (LBA) qui est illisible, était 591363172.

J'ai trouvé la partition (et l'offset à l'intérieur) que ce nombre a "traduit" en:

vserver:~# fdisk -lu /dev/sdc
Device Boot      Start         End      Blocks   Id  System
/dev/sdc1           32   976773119   488386544   83  Linux

La partition a commencé au secteur 32. Donc, le mauvais secteur était ...

vserver:~# bc -l
591363172-32+1
591363141

... à un décalage de 591363141 secteurs depuis le début de la partition.

Maintenant, je pouvais trouver quel fichier était "arrosé":

vserver:~# tune2fs -l /dev/sdc1 | grep Block\ size
Block size:               4096

La taille de bloc de ce système de fichiers EXT3 était de 4096 octets, donc le secteur défectueux a détruit ce bloc dans le système de fichiers:

vserver:~# bc -l
591363141*512/4096
73920392.62500000000000000000

Et le numéro de bloc (73920392) correspondait à ce fichier:

vserver:~# debugfs
debugfs 1.41.3 (12-Oct-2008)
debugfs:  open /dev/sdc1
testb 73920392
debugfs:  testb 73920392
Block 73920392 marked in use
debugfs:  icheck 73920392
Block           Inode number
73920392        18472967
debugfs:  ncheck 18472967
Inode           Pathname
18472967        /path/to/filewithbadsector

Et j'ai restauré ce fichier à partir de mes sauvegardes.

Existe-t-il une procédure équivalente que je peux suivre pour Windows / NTFS?

ttsiodras
la source
Pour info: le décompte actuel de 9 signifie qu'il y a 9 secteurs défectueux, pas un seul. L'autotest étendu s'arrête juste au premier qu'il trouve. Avant de restaurer à partir d'une sauvegarde, vous devez également traiter le secteur défectueux en y écrivant des zéros dd. Cela forcera le disque à le réparer ou à le réallouer.
psusi
Oui, vous avez raison. Après la restauration, j'ai fait une autre vérification SMART et j'ai constaté que tout allait bien - donc l'écriture du fichier a apparemment écrit sur les secteurs défectueux 9 + 1 (et la zone de transit a fourni des substituts). Mais qu'en est-il de Windows? :-)
ttsiodras
Je pense que votre calcul pour le décalage de secteur dans une partition est incorrect. Les numéros de secteur (autres que physiques, aka CHS) sont tous basés sur zéro, car le secteur 32 est le secteur de partition 32-32 == 0, pas 1.
Étonnamment, personne n'a encore dit cela sur une question vieille d'un an +: lorsque vous commencez à voir des secteurs défectueux sur le lecteur, cela signifie que vous avez tellement de remappage interne automatique des blocs défectueux du lecteur qui ne peuvent plus compenser. Plutôt que de restaurer à partir de sauvegardes sur un lecteur mourant, vous devez remplacer le lecteur et restaurer sur le nouveau lecteur.
voretaq7

Réponses:

7

Je sais que vous avez un FS NTFS et exécutez des fenêtres sur ce FS. Je ne sais pas si vous "pourriez" démarrer un Linux en direct pour travailler sur ce pilote ou non.

Si vous pouvez démarrer Linux à partir d'un CD ou d'un périphérique USB, vous pouvez utiliser ntfsprogs. Regarder -

ntfscluster 

ntfsinfo 

Je crois que ntfscluster vous dit quel fichier stocke un cluster particulier. J'espère que cela vous met dans la bonne direction.

JM Becker
la source
J'ai trouvé ce message sur le forum qui a un wrapper utilitaire pour le faire sur différents systèmes de fichiers, et utilise également ntfscluster. ubuntuforums.org/showthread.php?t=1943721
Léthargie
Oui, fonctionnalité ddrutility: recherche les fichiers liés aux secteurs défectueux, peut également utiliser un fichier avec une liste de secteurs, peut-être pourrions-nous utiliser "badblocks -nvs" + "ddrutility"
diyism