8 votes

Comment réparer un disque dur GUID corrompu en MBR ?

Je suis sous OS X 10.9.5 avec un iMac de fin 2013.

J'ai un disque dur de 3 To qui présente un problème inhabituel.

Il s'agit d'un Western Digital 3TB Red WD30EFRX.

Je l'ai formaté avec deux partitions, toutes deux de 1,5 To.

L'un d'eux était une sauvegarde amorçable d'un disque de 1 To. La sauvegarde a été effectuée par Carbon Copy Cloner et a été testée et vérifiée plusieurs fois pour s'assurer qu'elle fonctionnait.

L'autre était l'ensemble de mes médias partagés, tels que les vidéos et la musique.

Je l'ai utilisé sans problème pendant des mois et puis un jour, il n'a plus fonctionné.

Avant de faire des diagnostics, je l'ai essayé dans un autre boîtier. Cela n'a rien changé.

L'Utilitaire de disque peut voir le disque mais pas les partitions et les options de vérification du disque sont grisées.

J'ai utilisé l'utilitaire de disque à partir du terminal et j'ai vu que le disque entier est répertorié comme 'Fdisk_partition_scheme'.

Je pense que c'est le problème car je n'ai jamais utilisé Windows et je n'aurais pas formaté le disque dur dans ce format. Je n'ai jamais utilisé bootcamp ou parallels ou des programmes similaires.

Je suis certain d'avoir formaté le disque en "GUID_partition_scheme" et le fait que je l'ai utilisé sans problème sur mon Mac pendant longtemps devrait le confirmer.

Je pense que le format du répertoire a été corrompu et est passé de "GUID_partition_scheme" à "Fdisk_partition_scheme", ce qui a rendu le disque illisible.

Texte du terminal de l'Utilitaire de disque :

/dev/disk1  
   #:                       TYPE NAME                    SIZE       IDENTIFIER  
   0:     FDisk_partition_scheme                        *3.0 TB     disk1  
   1:                       0xEE                         3.0 TB     disk1s1  

diskutil info disk1  
   Device Identifier:        disk1  
   Device Node:              /dev/disk1  
   Part of Whole:            disk1  
   Device / Media Name:      HGST Media  

   Volume Name:              Not applicable (no file system)  

   Mounted:                  Not applicable (no file system)  

   File System:              None  

   Content (IOContent):      FDisk_partition_scheme  
   OS Can Be Installed:      No  
   Media Type:               Generic  
   Protocol:                 USB  
   SMART Status:             Not Supported  

   Total Size:               3.0 TB (3000592494592 Bytes) (exactly 5860532216 512-Byte-Units)  
   Volume Free Space:        Not applicable (no file system)  
   Device Block Size:        4096 Bytes  

   Read-Only Media:          No  
   Read-Only Volume:         Not applicable (no file system)  
   Ejectable:                Yes  

   Whole:                    Yes  
   Internal:                 No  
   OS 9 Drivers:             No  
   Low Level Format:         Not supported  

Je me suis renseigné et j'ai téléchargé gdisk, mais je n'ai encore rien modifié.

gdisk texte du terminal :

GPT fdisk (gdisk) version 1.0.0  

Partition table scan:  
  MBR: protective  
  BSD: not present  
  APM: not present  
  GPT: not present  

Creating new GPT entries.  

Command (? for help):  

Bien entendu, ma question ultime : Existe-t-il un moyen de reformater mon disque au format GUID d'origine avec des partitions de 1,5 To sans perdre toutes les données ?

J'espère qu'en changeant le répertoire de MBR à GUID d'origine, le partitionnement, les fichiers et les répertoires d'origine seront restaurés.

Merci d'avance pour toute aide.

éditer : J'ai cherché sur Google comment vérifier le dernier secteur pour la table de partition GUID et je n'ai pas trouvé beaucoup d'aide. J'ai essayé la commande gpt qui n'a trouvé aucun en-tête primaire ou secondaire :

sudo gpt recover /dev/disk1
Password:
gpt recover: /dev/disk1: no primary or secondary GPT headers, can't recover

éditer : Le résultat du dumping de l'en-tête :

sudo dd if=/dev/disk1 count=1 skip=8 | xxd
Password:
1+0 records in
1+0 records out
512 bytes transferred in 0.000337 secs (1518730 bytes/sec)
0000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000100: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000150: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000160: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000170: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000180: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000190: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................

sortie de fdisk :

sudo fdisk /dev/disk1
Disk: /dev/disk1    geometry: 45600/255/63 [732566527 sectors]
Sector size: 4096 bytes
Signature: 0xAA55
         Starting       Ending
 #: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
 1: EE 1023 254  63 - 1023 254  63 [         1 - 4294967294] <Unknown ID>
 2: 00    0   0   0 -    0   0   0 [         0 -          0] unused      
 3: 00    0   0   0 -    0   0   0 [         0 -          0] unused      
 4: 00    0   0   0 -    0   0   0 [         0 -          0] unused 

@klanomath

J'ai essayé votre méthode et elle semble prometteuse, mais je me suis arrêté après quelques étapes. Tout d'abord, en ouvrant le volume, je vois sur la droite "Shared" et "Backup" qui sont les noms de mes deux partitions, ce qui est encourageant.

Je pense que certains de vos chiffres peuvent être erronés car mon disque a une taille de secteur de 4096 octets et je vois 512 dans vos calculs. Je vérifie juste si c'est correct.

De plus, la valeur de départ de 409642 n'était pas proche d'un HFSJ et j'ai quitté la commande find après quelques minutes. En recherchant à partir du début du disque, j'ai trouvé un HFSJ avec l'offset 0000209736666.

J'ai également recalculé le milieu du disque comme étant le secteur 366283263 et à partir de là, j'ai trouvé la prochaine instance de HFSJ à l'offset 1500936938486.

enter image description here

Je suis donc satisfait à ce stade, mais j'ai cessé d'attendre votre avis sur les autres sections en reconsidérant la taille de secteur de 4096.

Merci pour votre aide

édité pour ajouter la capture d'écran demandée des trois premiers blocs :

screenshot of first three blocks

9voto

klanomath Points 63400

La méthode pour réparer votre disque et récupérer la table de partition GUID est liée à mes réponses à des questions similaires : Nombre de blocs d'allocation non valide dans HFS+ y Le disque dur n'est plus accessible .

En fait, vous devez trouver les chaînes de caractères des volumes JHFS+, faire des calculs simples, faire preuve de bon sens et avoir un peu de chance pour fixer le GUID. Et ne perdez pas de vue vos objectifs face à ce mur de réponses.

En outre, il existe des tailles et des règles fixes (valables pour une taille de bloc logique de 512 octets - les règles pour les périphériques de 4096 octets sont légèrement différentes) qui vous aident à déterminer certaines tailles ainsi que certains blocs de départ et d'arrivée de vos partitions "supprimées".

 1. 1st block (block 0)                             = PMBR
 2. 2nd block (block 1)                             = Pri GPT header
 3. 3rd - 34th block (block 2 - block 33)           = Pri GPT table
 4. 41st - 409640th block (block 40 - block 409639) = EFI (aligned)
 5. 409641st - ??? block (block 409640 - block ???) = partition 1 (aligned)
 6. empty space 262144 blocks (aligned)
 7. ??? - ??? block (block ??? - block ???)         = partition 2 (aligned)
 8. empty space 262144 blocks (aligned)
 9. 7 empty blocks to keep alignment
10. the last 33 blocks except the very last one     = Sec GPT table
11. last block                                      = Sec GPT header
12. alignment rule: the start block and the sizes of all partitions (EFI, partition 1 & 2) and the major empty spaces are dividable by 8
13. The 3rd block of a regular JHFS+ volume contains the string "HFSJ" starting at offset 8

Ce guide ne fonctionne pas avec les disques internes ou externes contenant un disque dur de récupération ou des disques avec des volumes CoreStorage/ExFAT/NTFS. Bien que l'approche de la solution soit principalement similaire, certaines des règles ci-dessus sont différentes.

Enfin, un gpt devrait aboutir à un résultat similaire à celui-ci :

root# gpt -r -vv show /dev/disk1
gpt show: /dev/disk0: mediasize=3000592498688; sectorsize=512; blocks=5860532224
gpt show: /dev/disk0: PMBR at sector 0
gpt show: /dev/disk0: Pri GPT at sector 1
gpt show: /dev/disk0: Sec GPT at sector 5860532223
       start        size  index  contents
           0           1         PMBR
           1           1         Pri GPT header
           2          32         Pri GPT table
          34           6         
          40      409600      1  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
      409640  2930844728      2  GPT part - 48465300-0000-11AA-AA11-00306543ECAC
  2931254368      262144         
  2931516512  2928753528      3  GPT part - 48465300-0000-11AA-AA11-00306543ECAC
  5860270040      262151         
  5860532191          32         Sec GPT table
  5860532223           1         Sec GPT header

Conseil : Comme je ne peux pas créer un disque de la même taille que le vôtre dans Parallel Desktop, certaines tailles sont différentes de vos tailles d'origine.

Préparation :

Sauvegardez votre Mac, puis détachez tous les disques externes à l'exception de celui que vous souhaitez récupérer.
Télécharger et installer wxHexEditor . Activez l'utilisateur Root et connectez-vous en tant que Root.

Conseil : lorsque vous travaillez avec wxHexEditor, n'utilisez pas le copier-coller. Saisissez tout manuellement ! Vous pourriez accidentellement écrire directement sur votre disque.

Terminologie

Bloc : Secteur (dans wxHexEditor)
Décalage : Le numéro de l'octet par rapport au début du dispositif/volume en commençant par l'"octet 0". Par exemple, le bloc (512) 0 contient l'octet 0 - l'octet 511.

Déterminez les limites de vos partitions :

Ouvrez la calculatrice. Ouvrez wxHexEditor. Vérifiez que vous travaillez en mode lecture seule ("Options" -> "File mode" -> "Read only"). Dans la barre de menus, allez dans "Devices" -> "Open disk device" -> choisissez le numéro de disque approprié. Il s'agit probablement de disk1. Le disque doit avoir une partition (disk1s1). Essayez d'organiser la fenêtre de wxHexEditor comme dans les exemples ci-dessous avec des lignes rouges droites.

Ensuite, cliquez sur le bouton "Go to offset" (marqué par le cercle vert) et entrez 409640 exactement comme dans l'image ci-dessous. Il faut parfois s'y reprendre à deux fois pour atteindre le bon secteur. Vérifiez à nouveau que le secteur est correct en entrant le décalage (marqué en rouge) dans la calculatrice et en le divisant par 512.

enter image description here

Si vous voyez une image similaire, vous avez déjà trouvé le début de votre première partition (notez la chaîne HFSJ dans le bloc 409642 !).

Passez maintenant au milieu de votre disque : Appuyez sur le bouton "Go to offset" et entrez le numéro de bloc (nombre total de blocs de votre disque/2) ~ 2930266108.
Cela fonctionne si vous avez déjà partitionné votre disque avec l'Utilitaire de disque en choisissant simplement 2 partitions dans le menu déroulant. Si vous avez ajusté le curseur entre les deux partitions par la suite, par exemple en agrandissant la partition 1, vous devez passer à un décalage légèrement plus grand.

Cliquez ensuite sur le bouton "Rechercher" (marqué d'un cercle vert) et entrez HFSJ comme dans l'image ci-dessous, puis cliquez sur "Rechercher". Cela peut prendre un certain temps.

enter image description here

Si la recherche a été fructueuse, vous avez trouvé le début de la deuxième partition. Notez le décalage du bloc (= BlockOffset2 ). Dans mon exemple, le décalage est de 1500936455168. Si vous faites défiler les numéros de décalage inférieurs, le disque devrait être rempli de 0.

Puisque vous avez trouvé les secteurs de départ des deux volumes et que le reste est généralement déterminé par les règles 1 à 12 mentionnées plus haut, vous pouvez maintenant fixer la table GUID. Quittez wxHexEditor. Si l'on vous demande de sauvegarder les changements, ne les sauvegardez pas !


Il faut maintenant faire des calculs :

La première chaîne HFSJ se trouve généralement dans le troisième bloc d'un volume JHFS+.

Le premier volume JHFS+ commence donc au bloc 409640 (règle 5 également). Le deuxième volume JHFS+ commence à StartBlockOfVolume2 \= BlockOffset2 /Dans mon exemple, cela donne 1500936455168/512 -2 = 2931516514 -2 = 2931516512.

Avec le bloc de départ du volume 2 et l'espace vide fixe de la règle 6, vous pouvez déterminer le bloc de fin du volume 1 :

Premier bloc du volume 2 - 262144 (règle 6) - 1 = EndBlockOfVolume1 .

Dans mon exemple, c'est 2931516512 - 262144 - 1 = 2931254367

Taille du volume1 \= EndBlockOfVolume1 - bloc de départ volume 1 (règle 5) + 1

Dans mon exemple, c'est 2931254367 - 409640 + 1 = 2930844728.

La seule chose qui manque est la taille du volume 2 :

Avec les règles 8-11 ci-dessus, vous pouvez maintenant déterminer le dernier bloc du volume 2.

Taille totale du disque en blocs - 1 (règle 11) - 32 (règle 10) -7 (règle 9) - 262144 (règle 8) - 1 = DernierBlocDeVolume2

Taille du volume2 \= DernierBlocDeVolume2 - StartBlockOfVolume2 +1


Reconstruire un GPT correct :

Je suppose ici que l'identifiant de votre disque externe est disk1. Vous devez d'abord démonter votre disque externe dans le terminal :

diskutil umountDisk disk1

Supprimer le fdisk mbr actuel avec gpt :

gpt create -f /dev/disk1

Il faut d'abord reconstruire l'entrée EFI avec :

gpt add -b 40 -i 1 -s 409600 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B disk1

Ajoutez ensuite la première entrée de la partition JHFS+ :

gpt add -b 409640 -i 2 -s SizeOfVolume1 -t 48465300-0000-11AA-AA11-00306543ECAC disk1

Puis entrez :

diskutil umountDisk disk1

et ajoutez la deuxième entrée de la partition JHFS+ :

gpt add -b StartBlockOfVolume2 -i 3 -s SizeOfVolume2 -t 48465300-0000-11AA-AA11-00306543ECAC disk1

Puis, à nouveau, entrez :

diskutil umountDisk disk1

Entrer exit et quittez le terminal.

Ouvrez l'Utilitaire de disque et vérifiez que le disque et les deux volumes ne comportent pas d'erreurs, mais ne les réparez pas. Si aucune erreur n'est détectée, montez les volumes.


Addendum : un appareil 4k dans un boîtier 4k

Si vous avez un disque dur Advanced Format qui a une taille de secteur de 4096 octets (4K) dans un boîtier 4k uniquement (un boîtier de disque dur dont le contrôleur ne signale pas correctement une taille de bloc logique de 512 octets pour le disque dur AF), certaines modifications doivent être apportées à la solution ci-dessus :

Pour passer à un secteur donné, il faut diviser les données ci-dessus par huit.

Exemples :

  • Au lieu de passer au bloc(512b) 409640 pour trouver le secteur de départ supposé du volume 1, il faut passer au bloc(4096b) 51205.

  • Pour trouver le milieu de votre disque dur, allez à le nombre total de blocs (512b) de votre disque/16 au lieu de le nombre total de blocs (512b) de votre disque/2

La partie mathématique reste inchangée. Bien que cela puisse prêter à confusion, il n'y a pas de grande différence entre l'utilisation de block(512b) ou de block(4096b). Les changements peuvent être facilement adoptés en introduisant un facteur 1/8 plus tard dans la Reconstruire un GPT correct partie.

Le problème, c'est que le Reconstruire un GPT correct partie. La commande gpt détectera-t-elle des blocs de 512 B ou de 4096 B ?

En effet, je commencerais par 512 B et j'ajouterais la dernière partition en premier (la raison est expliquée ci-dessous) :

gpt add -b StartBlockOfVolume2 -i 1 -s SizeOfVolume2 -t 48465300-0000-11AA-AA11-00306543ECAC disk1

Puisque vous avez publié les captures d'écran, je peux même entrer les valeurs correctes :

Le deuxième bloc (4096b) du volume 2 commence à l'offset 1500936941568 -> Le premier bloc (4096b) commence à l'offset 1500936941568 - 4096 = 1500936937472. Il s'agit du bloc(4096b) 1500936937472/4096 = 366439682 ou du bloc(512b) = 8 x 366439682 = 2931517456.

Le dernier bloc (4096b) du disque est le 732566527e bloc avec le numéro de bloc 732566526. Avec les règles (règles 8-11) ci-dessus, le dernier bloc (4096b) du volume 2 est 732533754 et la taille du volume 2 est 732533754 - 366439682 = 366094072 blocs (4096b).
Le dernier bloc (512b) du disque est le 5860532216ème bloc avec le numéro de bloc 5860532215. Avec les règles ci-dessus, le dernier bloc (512b) du volume 2 est 5860270032 et la taille du volume 2 est 5860270032 - 2931517456 = 2928752576 blocs (512b).

Le bon gpt add en s'attendant à 4096 blocs B serait :

gpt add -b 366439682 -i 1 -s 366094072 -t 48465300-0000-11AA-AA11-00306543ECAC disk1

Le bon gpt add en s'attendant à des blocs de 512 B :

gpt add -b 2931517456 -i 1 -s 2928752576 -t 48465300-0000-11AA-AA11-00306543ECAC disk1

Je commencerais par entrer la commande gpt(512b) car si gpt utilise des blocs de 4096 B à la place, il devrait vous donner une erreur - le disque est beaucoup trop petit : si l'on utilise secrètement des blocs de 4096 B, le volume2 commencerait à ~12 TB et se terminerait à 24 TB. Si vous entrez la commande gpt(4096b) et que vous utilisez secrètement des blocs de 512 B, vous risquez de détruire votre volume 1 car la partition commencerait à 187 Go et finirait à 373 Go.

Si la commande gpt(512b) est erronée - et que gpt(4096b) est correct - le message d'erreur indique alors "gpt add : disk1 : no space available on device" (gpt ajouter : disque1 : pas d'espace disponible sur le périphérique).
Utilisez alors gpt(4096b) à la place et recommencez avec Reconstruire un GPT correct : mais divise toutes les valeurs par 8, à l'exception du bloc de départ d'un volume : La chaîne "HFSJ" se trouvant déjà dans le premier bloc (4096b), il n'est pas nécessaire de soustraire 2/8 blocs (512b).

Si la commande gpt(512b) est correcte, votre ancien volume2 sera probablement monté. Vous pouvez vérifier le volume avec l'Utilitaire de disque.

Démontez ensuite disk1 avec :

diskutil umountDisk disk1

et supprimer la partition avec

gpt remove -i 1 disk1

et recommencer avec Reconstruire un GPT correct :

Veuillez recalculer/vérifier toutes les valeurs dans la dernière partie ci-dessus. Bien que j'aie essayé d'être aussi précis que possible, les commandes/valeurs peuvent être erronées. Il faut toujours tenir compte du fait que le numéro de bloc et le "nombre de blocs" sont différents : le bloc numéro 0 est le premier bloc (ou le bloc numéro 455 est le 456e bloc).


Enfin, j'ai créé une feuille Excel pour effectuer les calculs. Elle est disponible aquí .

Capture d'écran :

enter image description here


J'espère que cela vous permettra de récupérer vos volumes manquants.

Si vous rencontrez des problèmes (par exemple, vous ne pouvez pas trouver le secteur de départ de votre deuxième volume), la vérification génère beaucoup d'erreurs, vous avez des doutes ou des questions, arrêtez immédiatement et contactez-moi avec un commentaire @klanomath !

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X