Cómo reparar el disco duro GUID dañado a MBR

Estoy en OS X 10.9.5 con un iMac de finales de 2013.

Tengo un disco duro de 3TB que tiene un problema inusual.

Es un Western Digital 3TB Red WD30EFRX.

Lo formateé con dos particiones, ambas de 1,5 TB.

Uno era una copia de seguridad de arranque de una unidad de 1 TB. Carbon Copy Cloner realizó la copia de seguridad y se probó y verificó varias veces para asegurarse de que funcionaba.

El otro era todos mis medios compartidos como videos y música.

Lo usé bien durante meses y luego un día no funcionó.

Antes de hacer algún diagnóstico, lo probé en un gabinete diferente. Eso no ayudó.

Disk Utility puede ver el disco pero no las particiones y las opciones para verificar el disco están atenuadas.

Utilicé la utilidad de disco desde la terminal y vi que todo el disco aparece como 'Fdisk_partition_scheme'.

Creo que este es el problema, ya que nunca he usado Windows y no habría formateado el disco duro con este formato. Nunca he usado bootcamp ni paralelos ni programas similares.

Estoy seguro de que formateé la unidad a 'GUID_partition_scheme' y el hecho de que la usé sin problemas en mi Mac durante mucho tiempo debería confirmarlo.

Creo que de alguna manera el formato del directorio se corrompió y cambió de 'GUID_partition_scheme' a 'Fdisk_partition_scheme', lo que hace que la unidad sea ilegible.

Texto del terminal de la Utilidad de Discos:

/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  

Leí un poco y descargué gdisk, pero aún no he hecho ningún cambio.

texto del terminal gdisk:

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):  

Por supuesto, mi última pregunta: ¿hay alguna forma de reformatear mi disco al formato GUID original con particiones de 1,5 TB sin perder todos los datos?

Espero que con solo cambiar el directorio de MBR al GUID original, se restaurarán las particiones y los archivos y directorios originales.

Gracias de antemano por cualquier ayuda.

editar: busqué en Google cómo verificar el último sector para la tabla de particiones GUID y no encontré mucha ayuda. Probé el comando gpt que no encontró encabezados primarios o secundarios:

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

editar: La salida del encabezado de volcado:

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  ................

salida 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

Probé tu método y parece prometedor, pero me detuve después de unos pocos pasos. Primero, al abrir el volumen, veo a la derecha "Compartido" y "Copia de seguridad", que son los nombres de mis dos particiones, por lo que es alentador.

Creo que algunos de sus números pueden estar mal ya que mi disco tiene un tamaño de sector de 4096 bytes y veo 512 en sus cálculos. Solo estoy comprobando si está bien.

Además, el valor inicial de 409642 no estaba cerca de un HFSJ y abandoné el comando de búsqueda después de unos minutos. Buscando desde el inicio del disco se encontró HFSJ con desplazamiento 0000209736666

También recalculé la mitad del disco como sector 366283263 y desde allí encontré la siguiente instancia de HFSJ en el desplazamiento 1500936938486

ingrese la descripción de la imagen aquí

Entonces, en ese momento estoy feliz, pero dejé de esperar su consejo sobre las secciones posteriores al reconsiderar el tamaño del sector 4096.

Gracias por tu ayuda

editado para agregar la captura de pantalla solicitada de los primeros tres bloques:

captura de pantalla de los tres primeros bloques

Lo primero que haría sería ver si al final del disco existe el Backup de la tabla GPT.
¿Cómo lo hago? Principalmente he estado usando Disk Utility y comencé a explorar gpt fdisk. También tengo Data Rescue 3 que no ha sido útil.
Puede buscar en Google esto: la tabla MBR tiene un límite de 2,2 TB en el tamaño del disco que puede manejar. Esto funciona suponiendo que el tamaño del sector (bloque) es de 512 bytes. Tiene una unidad de formato avanzado. Esto probablemente significa que el tamaño de su sector (bloque) puede ser de 4096 bytes. En realidad, su salida publicada distutilmuestra esto. Esto permitiría que la tabla MBR maneje discos más grandes, pero es posible que cualquier herramienta de terceros que use para examinar el disco no pueda manejar discos de formato avanzado. Muchas herramientas están codificadas para tamaños de sector (bloque) de 512 bytes. Pueden leer incorrectamente dichos discos.
Si lo desea, puede intentar volcar el encabezado en formato hexadecimal. El comando es sudo dd if=/dev/disk1 count=1 skip=8 | xxd. Podrías publicar la salida. La descripción de lo que debería ver se proporciona aquí . La mayoría de las personas no pueden interpretar la salida hexadecimal, por lo que no espero que lo haga. De todos modos, es lo que yo habría hecho a continuación. Si tampoco estaría de más agregar la salida de sudo fdisk /dev/disk1.

Respuestas (1)

El método para reparar su disco y recuperar la tabla de particiones GUID está relacionado con mis respuestas a preguntas similares: HFS+ número no válido de bloques de asignación y Disco duro ya no accesible .

Básicamente, debe encontrar cadenas características de los volúmenes JHFS+, usar algunas matemáticas simples y sentido común y tener suerte para arreglar el GUID. Y no pierdas de vista tus objetivos ante este muro de respuesta.

Además, hay algunos tamaños y reglas fijos (válidos para un tamaño de bloque lógico de 512b; las reglas para dispositivos 4096b son ligeramente diferentes) que lo ayudan a determinar algunos de los tamaños, así como algunos de los bloques iniciales y finales de su " particiones "eliminadas".

 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

Este tutorial no funciona con discos internos o externos que contengan un HD de recuperación o discos con volúmenes CoreStorage/ExFAT/NTFS. Aunque principalmente el enfoque de una solución sería similar, algunas de las reglas anteriores son diferentes.

Finalmente, un gptcomando debería dar como resultado algo similar a este resultado:

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

Sugerencia: dado que no puedo crear un disco del mismo tamaño que el suyo en Parallel Desktop, algunos tamaños son diferentes a los tamaños originales

Preparación:

Haga una copia de seguridad de su Mac y luego desconecte todas las unidades externas excepto la que desea recuperar.
Descargue e instale wxHexEditor . Habilite el usuario root e inicie sesión como root.

Sugerencia: mientras trabaja con wxHexEditor, no use copiar y pegar. ¡Ingrese todo manualmente! Puede escribir accidentalmente directamente en su disco.

Terminología

Bloque : Sector (en wxHexEditor)
Desplazamiento: El número del Byte relativo al comienzo del dispositivo/volumen que comienza con "Byte 0". Por ejemplo, Block(512) 0 contiene Byte 0 - Byte 511.

Determine los límites de sus particiones:

Abre la Calculadora. Abra wxHexEditor. Comprueba que trabajas en modo de solo lectura ("Opciones" -> "Modo de archivo" -> "Solo lectura"). En la barra de menú, vaya a "Dispositivos" -> "Abrir dispositivo de disco" -> elija el número de disco apropiado. Probablemente sea disk1. El disco debe tener una partición (disk1s1). Intente organizar la ventana de wxHexEditor como en los ejemplos a continuación con líneas rojas rectas.

Luego presione el botón "Ir a compensación" (marcado con el círculo verde) e ingrese 409640 exactamente como en la imagen a continuación. A veces tienes que hacer eso dos veces para saltar al sector correcto. Vuelva a verificar el sector correcto ingresando el desplazamiento (marcado en rojo) en la Calculadora y divídalo entre 512.

ingrese la descripción de la imagen aquí

Si ve una imagen similar, ya encontró el comienzo de su primera partición (¡observe la cadena HFSJ en el bloque 409642!).

Ahora salte a la mitad de su disco: presione el botón "Ir a compensación" e ingrese el número de bloque (total de bloques de su disco/2) ~ 2930266108.
Esto funciona si previamente ha particionado su disco con la Utilidad de Disco simplemente eligiendo 2 particiones en el menú desplegable. Si ha ajustado el control deslizante entre las dos particiones después, por ejemplo, la partición ampliada 1, debe saltar a un desplazamiento ligeramente mayor.

Ahora presione el botón "Buscar" (marcado con el círculo verde) e ingrese HFSJ como en la imagen a continuación y presione buscar. Esto puede tardar un rato.

ingrese la descripción de la imagen aquí

Si la búsqueda tuvo éxito, ha encontrado el comienzo de la segunda partición. Tome nota del desplazamiento del bloque (= BlockOffset2 ). En mi ejemplo, el desplazamiento es 1500936455168. Si se desplaza a números de desplazamiento inferiores, el disco debe llenarse con 0.

Dado que ha encontrado los sectores de inicio de ambos volúmenes y el resto generalmente está determinado por las reglas 1-12 mencionadas anteriormente, ahora puede arreglar la tabla GUID. Salga de wxHexEditor. Si se le pide que guarde los cambios, ¡no los guarde!.


Ahora tienes que hacer algunos cálculos:

La primera cadena HFSJ generalmente se encuentra en el tercer bloque de un volumen JHFS+.

Entonces, el primer volumen JHFS+ comienza en el bloque 409640 (también la regla 5). El segundo volumen JHFS+ comienza en StartBlockOfVolume2 = BlockOffset2 /512 - 2. En mi ejemplo, eso es 1500936455168/512 -2 = 2931516514 -2 = 2931516512.

Con el bloque inicial del volumen 2 y el espacio vacío fijo de la regla 6 puedes determinar el bloque final del volumen 1:

Primer bloque del volumen 2 - 262144 (regla 6) - 1 = EndBlockOfVolume1 .

En mi ejemplo, eso es 2931516512 - 262144 - 1 = 2931254367

SizeOfVolume1 = EndBlockOfVolume1 - volumen de bloque de inicio 1 (regla 5) + 1

En mi ejemplo, eso es 2931254367 - 409640 + 1 = 2930844728

Lo único que falta es el tamaño del volumen 2:

Con las reglas 8-11 anteriores, ahora puede determinar el último bloque del volumen 2.

Tamaño total del disco en bloques - 1 (regla 11) - 32 (regla 10) -7 (regla 9) - 262144 (regla 8) - 1 = LastBlockOfVolume2

SizeOfVolume2 = LastBlockOfVolume2 - StartBlockOfVolume2 +1


Reconstruir un GPT adecuado:

Aquí asumo que el identificador de su disco externo es disk1. Primero tienes que desmontar tu disco externo en Terminal:

diskutil umountDisk disk1

Elimine el fdisk mbr actual con gpt:

gpt create -f /dev/disk1

Primero reconstruya la entrada EFI con:

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

Luego agregue la primera entrada de partición JHFS+:

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

Luego ingrese:

diskutil umountDisk disk1

y agregue la segunda entrada de partición JHFS+:

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

Luego ingrese de nuevo:

diskutil umountDisk disk1

Ingrese exity salga de la Terminal.

Abra la Utilidad de Discos y verifique el disco y los dos volúmenes en busca de errores, pero no los repare. Si no se encuentran errores, monte los volúmenes.


Anexo: dispositivo 4k en una carcasa 4k

Si tiene un disco duro de formato avanzado que tiene un tamaño de sector de 4096 bytes (4K) en un gabinete de solo 4k (un gabinete de disco duro con un controlador que no informa correctamente un tamaño de bloque lógico de 512 bytes para el AF HDD) algunas modificaciones tienen que hacerse a la solución anterior:

Para saltar a un sector determinado, debe dividir los datos anteriores entre ocho.

Ejemplos:

  • En lugar de saltar al bloque (512b) 409640 para encontrar el sector de inicio supuesto del volumen 1, salte al bloque (4096b) 51205.

  • Para encontrar el centro de su HDD, salte a bloques totales (512b) de su disco/16 en lugar de bloques totales (512b) de su disco/2

La parte matemática sigue igual. Aunque tal vez resulte confuso, no hay una gran diferencia entre usar block(512b) o block(4096b). Los cambios se pueden adoptar fácilmente introduciendo un factor 1/8 más adelante en la parte Reconstruir una GPT adecuada .

Lo complicado es reconstruir una parte GPT adecuada . ¿El comando gpt detectará bloques 512 B o 4096 B?

De hecho, comenzaría con 512 B y agregaría primero la última partición (la razón se explica a continuación):

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

Dado que publicaste las capturas de pantalla, incluso puedo ingresar los valores adecuados:

El segundo bloque (4096b) del volumen 2 comienza en el desplazamiento 1500936941568 -> El primer bloque (4096b) comienza en el desplazamiento 1500936941568 - 4096 = 1500936937472. Este es el bloque (4096b) 1500936937472/4096 = 366439682 o bloque (512 366 = 362 x 9b) 2931517456.

El último bloque (4096b) del disco es el bloque 732566527 con el número de bloque 732566526. Con las reglas (regla 8-11) arriba, el último bloque (4096b) del volumen 2 es 732533754 y el tamaño del volumen 2 es 732533754 - 366439682 = 366094072 bloques (4096b).
El último bloque (512b) del disco es el bloque 5860532216 con el número de bloque 5860532215. Con las reglas anteriores, el último bloque (512b) del volumen 2 es 5860270032 y el tamaño del volumen 2 es 5860270032 - 2931517456 = 2928752576 bloques (512b)

El comando adecuado gpt addesperando bloques 4096 B sería:

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

El comando adecuado gpt addesperando bloques 512 B sería:

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

Primero ingresaría el comando gpt(512b) porque si gpt usa bloques 4096 B en su lugar, debería darte un error: el disco es demasiado pequeño: si se usan bloques 4096 B en secreto, el volumen 2 comenzaría en ~ 12 TB y terminaría en 24TB. Si ingresa el gpt (4096b) y en secreto se usan bloques de 512 B, puede destruir su volumen 1 porque la partición comenzaría en 187 GB y terminaría en 373 GB.

En caso de que el comando gpt(512b) sea incorrecto, y gpt(4096b) sea correcto, el mensaje de error indica "gpt add: disk1: no hay espacio disponible en el dispositivo".
Luego use gpt (4096b) en su lugar y comience de nuevo con Reconstruya un GPT adecuado: pero divida todos los valores por 8. Una excepción es el bloque inicial de un volumen: dado que la cadena "HFSJ" ya está en el primer bloque (4096b) no No tienes que restar 2/8 bloques (512b).

En caso de que el comando gpt (512b) sea correcto, probablemente se montará su anterior volumen 2. Puede comprobar el volumen con la Utilidad de disco.

Luego desmonte disk1 con:

diskutil umountDisk disk1

y eliminar la partición con

gpt remove -i 1 disk1

y comience de nuevo con Reconstruir un GPT adecuado:

Vuelva a calcular/verificar todos los valores en la última parte anterior. Aunque traté de ser lo más preciso posible, los comandos/valores pueden ser defectuosos. Considere siempre que el número de bloque y el "número de bloques" son algo diferente: el número de bloque 0 es el primer bloque (o el número de bloque 455 es el bloque 456).


Finalmente he creado una hoja de Excel para hacer los cálculos. Está disponible aquí .

Captura de pantalla:

ingrese la descripción de la imagen aquí


Espero que esto recupere los volúmenes perdidos.

Si tiene problemas (por ejemplo, no puede encontrar el sector de inicio adecuado de su segundo volumen), la verificación arroja muchos errores, tiene dudas o preguntas, deténgase inmediatamente y contácteme con un comentario @klanomath.

@klanomath Vuelva a cargar la hoja de cálculo de Excel; la carga anterior ha caducado y es una herramienta muy útil.
@ Max108 He actualizado el enlace y el archivo está disponible en github ahora.