Estoy intentando reconstruir una partición Mac para un hdd Hitachi externo de 3TB que recientemente falló al montarse. Aparte de un tamaño de tabla GPT inesperado que voy a mostrar más adelante, este problema unidad parece similar a Cómo arreglar la partición del disco duro de Mac que muestra como Fdisk_partition_scheme .
He aquí algunos antecedentes e información sobre la unidad que he recopilado:
Como la carcasa de la unidad parecía tener una conexión suelta, se le cambió la carcasa. Como precaución y para tener una copia de trabajo, se utilizó dd para crear una imagen de toda la unidad de 3 TB. Para cualquier paso que requiera un dispositivo como entrada, adjunto la imagen usando hdiutil attach -nomount path/to/file.dmg
.
La unidad se formateó originalmente con una sola partición utilizando Mac OS X Snow Leopard. Encontré el GUID del tipo de partición HFS+ mientras escaneaba los datos en el editor hexadecimal, Hex Fiend: 53746F72-6167-11AA-AA11-00306543ECAC (contenedor de volumen Apple Core Storage Container HFS+ FileVault). Esto fue seguido por la 1 ª parte EFI entrada está en el offset 4096:
La 1ª partición del sistema EFI está en el offset 8192:
He intentado extraer la información de las particiones GPT/EFI y HFS de la imagen anterior:
06 00 00 00 00 00 00 00
= 6 (inicio de EFI).
05 C8 00 00 00 00 00 00
= 51205 (fin de EFI).
06 C8 00 00 00 00 00 00
= 51206 (inicio de HFS).
6F 94 A9 2B 00 00 00 00
= 732533871 (fin de HFS).
La partición secundaria del sistema EFI en el offset 3000592957440 parecía contener los mismos valores de inicio y fin, y la entrada secundaria de la parte EFI estaba en el offset 3000592973824.
La 1ª entrada HFSJ se encontró en el offset 209740800:
El número total de bytes viene dado por diskutil info
es 3000592982016:
Si el tamaño del volumen principal HFS es 732533871 - 51205 = 732482666 bloques, entonces el tamaño del bloque lógico debería ser 4096 (lo que da un total de # bloques en disco = 732566646). Aunque diskutil info dio un tamaño de bloque de 512 bytes (imagen superior).
Desafortunadamente gdisk no pudo leer los datos GPT:
GPT fdisk (gdisk) version 1.0.4
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: not present
Esto es lo que he utilizado como un intento de empezar a reconstruir la tabla de particiones GPT (siguiendo Cómo arreglar la partición del disco duro de Mac que muestra como Fdisk_partition_scheme ):
sudo dd if=/dev/zero of=/dev/disk2 bs=512 count=40
sudo gpt create /dev/disk2
Luego corrí sudo gpt -r show /dev/disk2
que dio un tamaño de tabla GPT inesperado:
start size index contents
0 1 PMBR
1 1 Pri GPT header
2 18 Pri GPT table
20 1
21 18 Sec GPT table
39 1 Sec GPT header
Después de los resultados anteriores de la utilidad GPT, no estaba seguro de qué tamaño de bloque lógico utilizar para reconstruir las tablas de particiones EFI y HFS.
Gracias por su ayuda.
1/31/2020 Actualización
Terminé usando rsync
para hacer otra copia de imagen de disco de 3 TB (he estado guardando la imagen de disco original que se creó a través de dd
como copia de seguridad).
Creo que localicé la 3ª partición en el offset 3000458738688 bytes (era la 1ª cadena de datos tras el final del volumen principal HFS). Parece que termina en el offset 3000582143352 o 3000582143360 (se agradece cualquier opinión al respecto):
A diferencia de EFI/GPT y HFS, no parecía haber direcciones de inicio o fin en ninguna cabecera que pudiera extraer para esta 3ª partición de arranque. Tenga en cuenta que he añadido imágenes de partición más grandes para mostrar esto. Así que intentaré usar los bytes estimados arriba (convirtiendo a sectores/bloques) como entrada para la 3ª partición de arranque. gpt add
paso.
Gracias de nuevo por sus comentarios.
0 votos
¿Está seguro de haber ejecutado los comandos
sudo dd if=/dev/zero of=/dev/disk2 bs=512 count=40
ysudo gpt create /dev/disk2
? Lo pregunto porque para recrear los resultados que has publicado, tendría que ejecutar los comandossudo dd if=/dev/zero of=path/to/file.dmg bs=512 count=40
ysudo gpt create path/to/file.dmg
.0 votos
@DavidAnderson, Gracias por tu respuesta. Lo probaré en cuanto vuelva a crear el archivo de imagen de disco completo (tardaré un par de días en hacer otra copia de mi original para trabajar con ella). Tienes razón en que en realidad ejecuté esos comandos en la imagen en lugar de en el dispositivo. Me aseguraré de ejecutarlos en el dispositivo la próxima vez siguiendo tus instrucciones. ¿Seguiría funcionando 'gpt destroy disk2' si la utilidad GPT no puede detectar las cabeceras GPT (cuando ejecuté 'gpt recover', dio 'no primary or secondary GPT headers, can't recover')?
0 votos
Cuando estaba probando los pasos que publicaste en tu pregunta, el comando
sudo dd if=/dev/zero of=/dev/disk2 bs=512 count=40
no era suficiente para poder ejecutarsudo gpt create /dev/disk2
. Supongo que la razón de esto era que todavía existía un GPT secundario al final de la unidad. Elsudo gpt destroy /dev/disk2
era necesario. Utilización degpt destroy
antes degpt create
puede no ser siempre necesario, pero introducir el comando no debería hacer daño.0 votos
@DavidAnderson- Desafortunadamente el paso
gpt destroy /dev/disk2
dio este mensaje:gpt destroy: /dev/disk2: error: device doesn't contain a GPT
. Así que puede que tenga que probar a utilizar eldd
opción. Me di cuenta de que en mi intento inicial me olvidé de incluirconv=notrunc
que supongo que es lo que ha truncado la imagen. Para utilizardd
para sobrescribir el GPT primario y secundario, ¿qué parte del final de la imagen de disco me recomiendas que sobrescriba con ceros (sólo el GPT secundario o todo lo que hay después del volumen principal HFS)?0 votos
Debería haber ignorado el mensaje de error y proceder a introducir el
gpt create /dev/disk2
mando. He intentado indicar elgpt destroy /dev/disk2
puede no ser necesario.0 votos
"Curiosamente la 3ª partición contenía un error de lectura de disco en el offset 3000582140288". Las cadenas visibles en la "cabecera NTFS" son mensajes de advertencia estándar. Así que no hay error de lectura de disco ;-)
0 votos
@DavidAnderson- Está montado y funcionando. Muchas, muchas gracias por tu ayuda y tu orientación durante todo este proceso. Hubo un pequeño cambio en la respuesta publicada que tuve que utilizar:
diskutil mountDisk /dev/disk2
en lugar dediskutil mount /dev/disk3
.