Réparer un disque dur NTFS défectueux sous GNU/Linux avec badblocks

Clap de tournage vidéo qui sert de logo à Pitivi

J'ai un disque dur USB un peu ancien de 250 Go en NTFS (qui me sert pour stocker et transporter des médias audio-vidéo : films, séries, reportages) qui commençait à être capricieux : certains fichiers ne pouvaient plus être lus ni même effacés...

J'ai pensé que certains secteurs commençaient à lâcher. J'ai donc entrepris de réparer ce disque, en cherchant un logiciel pour GNU/Linux qui soit capable tout simplement de repérer et marquer les secteurs défectueux pour qu'ils ne soient plus utilisés à l'avenir.

J'ai réalisé cette opération à l'aide de l'utilitaire badblocks et de quelques tutos glanés sur la toile (notamment celui-ci). Je vous donne ci-après la méthode que j'ai utilisée avec succès, mais il y a d'autres façons de faire avec badblocks comme vous pourrez le voir avec les liens donnés en fin de billet.

Préparation

Sauvegarder le contenu de votre disque dur sur un autre support et installer badblocks sur votre système (c'est un utilitaire inclus dans le paquet e2fsprogs).

Détection et signalement des secteurs défectueux

Lancer badblocks pour scanner votre partition à la recherche des secteurs défectueux (NB : cette opération prend du temps). Cela se fait avec la commande :
sudo badblocks /dev/sdX1 (remplacer « sdX1 » par votre numéro de partition).

Si comme moi vous risquez d'avoir un certain nombre de secteurs défectueux, le plus simple est de les reporter dans un fichiers texte, ce qui peut être fait automatiquement en remplaçant la commande précédente par celle-ci :
sudo badblocks /dev/sdX1 > /home/mon_home/bad-blocks.txt (remplacer « sdX1 » par votre numéro de partition et « mon_home » par le nom de votre répertoire home).

Badblocks va alors vous révéler les adresses des secteurs défectueux, par exemple :
100390264
100390265
100390266
100390267
146565556
146565557
...

L'étape suivante va consister à écrire sur les secteurs défectueux. En reprenant l'exemple ci-dessus, cela donne :
sudo dd if=/dev/zero of=/dev/sdX1 bs=1024 count=1 seek=100390264
sudo dd if=/dev/zero of=/dev/sdX1 bs=1024 count=1 seek=100390265
sudo dd if=/dev/zero of=/dev/sdX1 bs=1024 count=1 seek=100390266
sudo dd if=/dev/zero of=/dev/sdX1 bs=1024 count=1 seek=100390267
sudo dd if=/dev/zero of=/dev/sdX1 bs=1024 count=1 seek=146565556
sudo dd if=/dev/zero of=/dev/sdX1 bs=1024 count=1 seek=146565557

Le processus peut être automatisé pour effectuer la commande automatiquement pour chaque secteur indiqué dans le fichier bad-blocks.txt :
sudo xargs -I{} dd if=/dev/zero of=/dev/sdX1 bs=1024 count=1 seek={} </home/mon_home/bad-blocks.txt
(merci à Watael du forum ubuntu-fr pour la commande :)

Le reste est normalement pris en charge par le contrôleur du disque qui remarquera ainsi que ces secteurs sont défectueux et en tiendra compte à l'avenir !

Vérification, restauration

Pour vous assurer de la réussite de l'opération, relancer la commande du début (sudo badblocks /dev/sdX1) : vous ne devriez plus avoir d'erreur à présent. Il est temps de restaurer les données de votre disque dur :)

Pour aller plus loin :

Vus : 621
Publié par antistress : 174