Réparer un disque dur HS

Vous êtes sur le point de jeter votre disque dur qui ne veut plus fonctionner :

  • Windows ne veut pas voir le disque dur
  • Le BIOS ne détecte pas le disque dur

Les arrêts/démarrages de l'ordinateur ne change rien au problème : le disque dur est perdu, invisible ! Pourtant, vous l'entendez, le moteur fonctionne, les têtes cliquettent au démarrage… tout vous semble correctement fonctionner.

Si vous possédez un Maxtor ou un Seagate, vous avez sûrement essayé les outils :

Mais rien y fait, même l'utilitaire SeaTools ne voit rien. Et pourtant vous avez bien pensé à basculer de AHCI à IDE dans le gestion des disques du BIOS.

Il reste encore un moyen. Vous êtes surement tombé sur le bug du BSY State.

Concrètement, il s'agit d'un mode dans lequel le micrologiciel (firmware) du disque dur n'arrive plus à se sortir. Ce bug empêche le BIOS de détecter le disque dur, et donc, empêche tous les accès de l'ordinateur, y compris Windows, Linux…

Pour que le micrologiciel puisse se sortir de la boucle infernale du BSY State, il va falloir modifier les informations S.M.A.R.T.. Ces informations sont écrites dans les premiers secteurs du disque dur.

Avec un Maxtor STM3500320AS, je viens d'avoir tous ces symptômes :
  • disque non reconnu dans le BIOS
  • disque non détecté avec une interface USB
  • pas de bruit suspect à l'arrêt et au démarrage du disque

La méthode que je vais vous détailler et non destructive si vous suivez toutes les instructions, sans mauvaise manipulation.

Le disque dur possède trois interfaces :

  • une interface pour une alimentation SATA
  • une interface pour des transfert des données SATA
  • une interface série/limiteur de taux de transfert

Il va falloir accéder au micrologiciel du disque dur par le port série. Si vous n'avez pas de port série sur l'ordinateur, il va falloir trouver un adaptateur USB/Série appelé également USB/TTL.

Pour ma part j'ai utilisé un Arduino Uno qui intègre un convertisseur USB/TTL avec une puce Atmega16U2. La puce 16U2 est programmée avec des pilotes standards COM USB, et il n'est pas nécessaire d'installé un pilote PC pour y accéder.

Le bornier série du disque dur est assez étroit et il a fallu que j'adapte des connecteurs pour qu'il y ait un contact propre et sans risque de court-circuit. Pour éviter les courts-circuits j'ai ajouté de la gaîne thermorétractable.

Étant donné que le disque dur est sorti de son logement standard, je n'ai plus d'alimentation électrique pour permettre de le faire fonctionner. J'ai utiliser une alimentation fournie avec un kit de connexion de disque dur USB 2.0 to SATA/IDE.

Je récapitule le matériel nécessaire :
  • 3 câbles de connexion - entre le convertisseur USB/TTL et le disque dur
  • convertisseur USB/TTL - Arduino pour moi
  • alimentation électrique SATA
  • tourne vis TORX T5
  • feuille épaisse

Je vais utiliser Putty, comme logiciel de communication série qui a l'avantage d'être disponible sous Windows et Linux.

Putty

Je prépare l'Arduino pour que les PIN0 et PIN1 deviennent une image parfaite du port USB. La manipulation est toute simple et ne demande aucune programmation dans l'Arduino.

Relier le port RESET à la masse (GND) de l'Arduino.

Ensuite, il suffit de raccorder le convertisseur au disque dur et le convertisseur à l'ordinateur.

Sur l'Arduino :

  • la broche 0 correspond au RX et
  • la broche 1 au TX.

Sur le disque dur, PCB vu du dessus,

  • la broche 2 correspond à la masse,
  • la broche 3 au RX et
  • la broche 5 au TX

Relier les 3 fils (masse, TX et RX) entre l'Arduino et le disque dur.

Après avoir connecté le câble USB, l'Arduino se met en route et est tout de suite reconnu par le système.

Sous Linux, vous pouvez vérifier qu'un port tty a bien été ajouté en tapant la commande :

ll /dev/servial/by-id

voici le réponse :

total 0
lrwxrwxrwx 1 root root 13 15 août  21:13 usb-Arduino_Srl_Arduino_Uno_7543536303835131A090-if00 -> ../../ttyACM0
lrwxrwxrwx 1 root root 13 15 août  20:15 usb-Sierra_Wireless__Incorporated_Dell_Wireless_5570_HSPA+__42Mbps__Mobile_Broadband_Card-if00-port0 -> ../../ttyUSB2
lrwxrwxrwx 1 root root 13 15 août  20:15 usb-Sierra_Wireless__Incorporated_Dell_Wireless_5570_HSPA+__42Mbps__Mobile_Broadband_Card-if02-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 15 août  20:15 usb-Sierra_Wireless__Incorporated_Dell_Wireless_5570_HSPA+__42Mbps__Mobile_Broadband_Card-if03-port0 -> ../../ttyUSB1

La ligne qui nous intéresse contient la phrase usb-Arduino_Srl_Arduino_Uno, et le résultat qu'il faut retenir est ttyACM0. Cette indication va nous permettre d'indiquer à Putty sur quel canal dialoguer.

Configurer Putty pour communiquer sur le port /dev/ttyACM0, avec une vitesse de 38400

Ouvrir un session Putty sur le port série.

Ensuite, alimenter le disque dur et au bouts de quelques secondes, le résultat suivant apparait :

LED:000000CC FAddr:0025BF67

Ce code indique bien que le disque dur est dans un état BSY (Busy).

La réparation va se dérouler en 3 temps :

  • isoler le micrologiciel des données SMART
  • détruire la partition contenant les données SMART
  • recréer la partition des données SMART

1. Hors alimentation, convertisseur déconnecté de l'ordinateur, démonter le PCB et insérer entre le PCB et les connecteurs des têtes la feuille d'isolation. Celle-ci doit pouvoir être retirée lorsque le PCB sera de nouveau en place.

Revisser uniquement les deux vis de droite afin de ne pas bloquer la feuille entre le PCB et le connecteur.

Lancer le session Serial de Putty et connecter le convertisseur à l'ordinateur, alimenter le PCB du disque dur.

Au bout quelques secondes, appuyez sur Ctrl+z

Réponse :

F3 T>

Accéder au level 2 en tapant /2

Le moteur du disque dur s'arrête et réponse :

F3 2>

Attendez au moins 20 secondes pour que le disque dur s'arrête. Normalement, il s’arrête au bout de 10 secondes, mais il vaut mieux être prudent.

Nous allons informer le micro logiciel d'un arrêt du moteur en tapant la commande Z

Ayant isolé les têtes de lecture, le micrologiciel répond :

Spin Down Complete
Elapsed Time 0.147 msecs
F3 2>
Manipulation délicate, mais réalisable

Enlever minutieusement le papierentre le PCB et le connecteur des têtes de lecture.

Replacer les 3 vis en veillant à ne pas faire court circuit avec le PCB.

2. On demande au moteur de démarrer en tapant la commande U

Le micrologiciel nous répond :

Spin Up Complete
Elapsed Time 7.093 secs
F3 2>

Maintenant, nous accédons au level 1 en tapant la commande /1

Réponse :

F3 1>

Maintenant, il faut effacer les secteurs du SMART en tapant la commande N1

Réponse : Réponse :

F3 1>

Vous pouvez arrêter l'alimentation SATA et attendre une vingtaine de seconde avant de mettre de nouveau l'alimentation électrique du SATA.

3. Appuyer de nouveau sur les touches Ctrl + z pour revenir en mode édition. Réponse ;

F3 T>

Il faut réécrire les informations SMART avec la commande m0,2,2,0,0,0,0,22. Réponse :

Max Wr Retries = 00, Max Rd Retries = 00, Max ECC T-Level = 14, Max Certify Rewrite Retries = 00C8
User Partition Format 10% complete, Zone 00, Pass 00, LBA 00004339, ErrCode 00000080, Elapsed Time 0 mins 05 secs
User Partition Format Successful - Elapsed Time 0 mins 05 secs

Attendez bien ce message pour pouvoir de nouveau arrêter l'alimentation.

Vous pouvez dès à présent brancher votre disque dur à son emplacement prévu et vérifier que tout fonctionne bien.

Après ces opérations, je vous invite fortement à effectuer une sauvegarde de vos documents et de jeter ce disque dur.

  • informatique/fixing_seagate_7000_11_hard_drive.txt
  • Dernière modification: 2018/04/15 09:52
  • par Cedric ABONNEL