La partición APFS desapareció después de crear un MBR híbrido

Después de intentar crear un MBR híbrido para Windows de arranque dual en UEFI y BIOS con gdisk, la partición APFS principal (contenedor) desapareció, dejando un espacio vacío en la tabla de particiones GPT. Solo se puede ver con sudo gpt -r show /dev/disk1(espacio del 409640 al 732437176).

      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  732027536         
  732437176     195912      2  GPT part - EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
  732633088      32768      3  GPT part - E3C9E316-0B5C-4DB8-817D-F92DF00215AE
  732665856  244107264      4  GPT part - EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
  976773120         15         
  976773135         32         Sec GPT table
  976773167          1         Sec GPT header

Disk Utility y gdisk no muestran este espacio vacío en absoluto. También es imposible reparar la estructura de partición con Disk Utility. ¿Cómo recuperar el contenedor APFS faltante? Volcado hexadecimal a continuación.

ingrese la descripción de la imagen aquí

1+0 records in
1+0 records out
0000000 55 83 b6 a3 d0 9d ef aa 01 00 00 00 00 00 00 00
0000010 f8 cc 00 00 00 00 00 00 01 00 00 80 00 00 00 00
0000020 4e 58 53 42 00 10 00 00 52 3b 74 05 00 00 00 00
0000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000040 02 00 00 00 00 00 00 00 f1 c2 c7 d5 be fe 4d 6c
0000050 a8 5a c1 d2 1e 5e 2b d4 77 68 02 00 00 00 00 00
0000060 f9 cc 00 00 00 00 00 00 18 01 00 00 2c 6c 00 00
0000070 ec a3 04 00 00 00 00 00 c0 16 04 00 00 00 00 00
0000080 88 00 00 00 19 0d 00 00 86 00 00 00 02 00 00 00
0000090 06 0d 00 00 13 00 00 00 3f 67 02 00 00 00 00 00
00000a0 66 bb 0b 00 00 00 00 00 01 04 00 00 00 00 00 00
00000b0 00 00 00 00 64 00 00 00 02 04 00 00 00 00 00 00
00000c0 10 04 00 00 00 00 00 00 12 04 00 00 00 00 00 00
00000d0 be a4 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
0000200

Respuestas (1)

Simplemente puede volver a agregar la partición con gpt "en el espacio vacío". El problema aquí es: la partición del contenedor APFS podría haber sido más pequeña que el espacio libre disponible ahora.

La buena noticia es que el tamaño (anterior) del contenedor se almacena en el superbloque APFS, que no debería haberse modificado al crear un MBR híbrido. El superbloque es el primer bloque de un contenedor APFS; aquí probablemente el bloque 409640 (que es el bloque 409641 de su SSD) si se usó inicialmente el esquema de partición predeterminado de Apple.

  • inicie en un sistema completo (idealmente 10.13 pero los sistemas más antiguos también deberían funcionar con la desventaja de que no puede verificar el contenedor con fsck_apfs después)
  • obtener la lista de particiones con diskutil list. (en el siguiente ejemplo, asumo que el identificador del dispositivo es disk1)
  • Desmontar el SSD:diskutil umountDisk disk1
  • bloque hexdump 409640 del SSD:

    sudo dd if=/dev/disk1 skip=409640 bs=512 count=1 | hexdump
    

    lo que da como resultado algo como esto (solo ejemplo):

    1+0 records in
    1+0 records out
    0000000 4a 2e 4c 58 2c 73 22 1d 01 00 00 00 00 00 00 00
    0000010 ac 01 00 00 00 00 00 00 01 00 00 80 00 00 00 00
    0000020 4e 58 53 42 00 10 00 00 f6 37 ff 00 00 00 00 00
    0000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0000040 02 00 00 00 00 00 00 00 d1 67 7e 03 33 23 42 a5
    0000050 a8 da 96 fc 12 ae de 21 18 04 00 00 00 00 00 00
    0000060 ad 01 00 00 00 00 00 00 18 01 00 00 18 6c 00 00
    0000070 01 00 00 00 00 00 00 00 19 01 00 00 00 00 00 00
    0000080 10 00 00 00 80 07 00 00 0e 00 00 00 02 00 00 00
    0000090 7b 07 00 00 05 00 00 00 00 04 00 00 00 00 00 00
    00000a0 07 fd 03 00 00 00 00 00 01 04 00 00 00 00 00 00
    00000b0 00 00 00 00 64 00 00 00 02 04 00 00 00 00 00 00
    00000c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    *
    0000200
    

    La línea relevante es 0x020:4e 58 53 42 00 10 00 00 f6 37 ff 00 00 00 00 00

    • 4e 58 53 42(NXSB) es el bloque mágico APFS (Offset: 0x20 Tipo: char[4])
    • 00 10 00 00es el tamaño del bloque (Offset: 0x24 Tipo: Uint32). Después de revertir el orden de los bytes y convertirlo a decimal, este es 4096 bytes, que es el tamaño predeterminado para los contenedores APFS.
    • f6 37 ff 00 00 00 00 00es el número de bloques en el contenedor (Offset: 0x28 Tipo: Uint64)

      para convertirlo a decimal, revierta el orden de los bytes f6 37 ff 00 00 00 00 00-> 00 00 00 00 00 ff 37 f6e ingréselo en un convertidor . El número de bloques de 4k es aquí 16.726.006 y el tamaño final 16.726.006 x 4096 Byte = 68.509.720.576 Byte. En bloques de 512 Byte son 133,808,048 bloques.

  • Verifique el resultado por plausibilidad. En su caso, el número de bloques de 512 bytes debería ser igual a 732027536 o un poco menos.

  • Ahora agregue la partición con gpt:

    sudo gpt add -i 5 -b 409640 -s 512b_block_number -t 7C3457EF-0000-11AA-AA11-00306543ECAC /dev/disk1
    

    o en tu caso probablemente:

    sudo gpt add -i 5 -b 409640 -s 732027536 -t 7C3457EF-0000-11AA-AA11-00306543ECAC /dev/disk1
    
  • Verifique el disco: sudo fsck_apfs /dev/disk1. Si se le insta a iniciar desde el contenedor APFS "restaurado" para verificarlo porque su sistema en la otra unidad de inicio es macOS 10.12 o menos, use algo como sudo fsck_apfs -nl /dev/disk1s2. Si recibe una advertencia como "advertencia: Sobreasignación detectada en el dispositivo principal: (.....+1) dirección de mapa de bits (.....)", probablemente pueda ignorarla siempre que el volumen /dev/disk1s2 parezca estar bien

Gran solución. Ahora hay 409640 bloques de espacio entre particiones. Probablemente esté bien, pero fsck_apfs da warning: Overallocation Detected on Main device: (1658653+1) bitmap address (296051). ¿A qué se puede deber?
@Alexander Agregue la salida hexdump a su pregunta
Se agregó el volcado hexadecimal.
@Alexander Con el tamaño que se muestra en su hexdump, no debería haber espacio libre en su salida gpt ahora, excepto los 6 bloques al principio y los 15 bloques cerca del final. Por lo tanto, no está claro qué quiere decir con "Ahora hay 409640 bloques de espacio entre particiones..." . ("52 3b 74 05 ..." = 732027536 x 512b bloques y el probable comando gpt en mi respuesta es de hecho el correcto).
estaba equivocado No miré el "inicio" de la partición, así que pensé que había 409640 bloques de espacio entre las particiones (5 y 2) 40 409600 1 GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B 409640 732027536 5 GPT part - 7C3457EF-0000-11AA-AA11-00306543ECAC 732437176 195912 2 GPT part - EBD0A0A2-B9E5-4433-87C0-68B6B72699C7Pero la Utilidad de Disco aún detecta la sobreasignación.
@Alexander Busqué la cadena de error "Sobreasignación detectada en el dispositivo principal" y tengo entendido que parece ser un resultado relativamente común incluso después de una instalación nueva de High Sierra en un contenedor APFS.