Como corrigir partição do disco rígido do Mac mostrando como Fdsik_partition_scheme

8

Minha situação parece muito semelhante a como consertar o disco rígido GUID corrompido no MBR, mas com diferenças suficientes que não consegui montar uma solução confiável.

Eu tenho uma unidade Toshiba de 3 TB em um gabinete USB que está sendo usada em um Mac com OS X El Capitain 10.11.3.

A unidade foi configurada com uma única partição. A unidade não era inicializável e não tinha um sistema instalado, portanto, suponho que ela também não teria uma partição de recuperação. Não posso ter certeza de que nunca houve um sistema instalado, mas acho que não. Não foi usado com o Bootcamp ou em qualquer computador que não seja Mac.

A unidade funcionou normalmente por um longo período de tempo, mas falhou em ser reconhecida recentemente. Ao investigar com o Disk Utility, ele mostra um tipo de partição FDisk_partition_scheme . Tenho certeza de que era originalmente o padrão típico do Mapa de Partição GUID formatado como OS X Extended (Diário) .

Não consigo pensar em nenhum uso ou evento específico que possa ter causado a alteração.

Aqui estão as informações que eu coletei da unidade.

lista diskutil / dev / disk6

/dev/disk6 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *3.0 TB     disk6
   1:                       0xEE                         375.1 GB   disk6s1

diskutil info / dev / disk6

   Device Identifier:        disk6
   Device Node:              /dev/disk6
   Whole:                    Yes
   Part of Whole:            disk6
   Device / Media Name:      DT01ABA300

   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 (3000592982016 Bytes) (exactly 5860533168 512-Byte-Units)
   Volume Free Space:        Not applicable (no file system)
   Device Block Size:        512 Bytes

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

   Device Location:          External
   Removable Media:          No

   Virtual:                  No
   OS 9 Drivers:             No
   Low Level Format:         Not supported

fdisk / dev / disk6

Disk: /dev/disk6    geometry: 97451/255/63 [1565565872 sectors]
Signature: 0xAA55
         Starting       Ending
 #: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
 1: EE 1023 254  63 - 1023 254  63 [         1 -  732566645] <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

gpt recuperar / dev / disk6

gpt recover: /dev/disk6: no primary or secondary GPT headers, can't recover

gpt -r -vv mostra / dev / disk6

gpt show: /dev/disk6: mediasize=3000592982016; sectorsize=512; blocks=5860533168
gpt show: /dev/disk6: PMBR at sector 0
       start        size  index  contents
           0           1         PMBR
           1  5860533167

gdisk / dev / disk6

GPT fdisk (gdisk) version 1.0.1

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

Creating new GPT entries.

Aqui está uma captura de tela da primeira parte da unidade no wxHexEditor. A EFI PART começa em 4096.

Início da unidade no wxHexEditor

Comecei a procurar a string HFSJ iniciando com um deslocamento de 409642, conforme sugerido em outras respostas, mas não a encontrei por perto. Então, procurei a partir do início da unidade e encontrei a primeira ocorrência no deslocamento 314598400.

No entanto, se eu continuo procurando por ocorrências do HFSJ, encontro muitas delas com a mesma aparência e com muito espaço zero à sua volta, como a primeira. Aqueles começam em 360424448 e estão espaçados 32768. Por exemplo, nas compensações 360424448 360457216 360489984 360522752 360555520

Usei a pesquisa Localizar tudo no wxHexEditor e parei depois de alguns minutos. Encontrara alguns milhares naquele momento. Não sei bem o que fazer com essas coisas, se é que alguma coisa.

Também pude encontrar uma seção denominada Partição do sistema EFI no deslocamento 3000592961536. Isso também mostra o nome da unidade, "Rosie".

Aqui estão as capturas de tela da primeira partição HFSJ e da partição do sistema EFI. Adicionada uma captura de tela do deslocamento 8192 com base nos comentários.

Primeira partição HFSJ, partição EFI no final e deslocamento 8192.

Obrigado por qualquer ajuda.

Doug Smith
fonte
Se aparecer, seu disco tem um tamanho de bloco de 4096 bytes e agora tem um tamanho de 512 bytes. Como o tamanho do bloco não está armazenado no próprio disco, minha pergunta seria: Você mudou o hardware de alguma forma? Além disso, se o tamanho do bloco tiver 4096 bytes, você poderá ler as entradas antigas da tabela GPT iniciando em 8192 bytes. Até o momento, você postou apenas o cabeçalho da GPT a partir de 4096 bytes. O dump hexadecimal pode ser convertido de volta para os valores decimais corretos usando as informações fornecidas aqui .
David Anderson
@ David David, O hardware mudou porque a unidade está em um gabinete USB diferente. Eu poderia pegar o caso original, se isso ajudar alguma coisa.
Doug Smith
@DavidAnderson Alterei a captura de tela para adicionar uma para o deslocamento 8192. Ela mostra uma partição do sistema EFI lá.
Doug Smith
@klanomath Sim, sua resposta vinculada estava correta. Eu misturei bloco e deslocamento. No entanto, são todos os zeros em torno do deslocamento 209736704. Também tentei dividir isso por 8 (26217088), caso houvesse um problema de tamanho de bloco de 4096. Isso me coloca dentro de muitos dados, mas nenhuma string HFSJ à vista.
Doug Smith
@klanomath, eu comecei o seu processo. Minha tentativa de sobrescrever os primeiros 40 blocos não gravou nenhum dado:0+0 records in 0+0 records out 0 bytes transferred in 0.000013 secs (0 bytes/sec)
Doug Smith

Respostas:

9

Por favor, tente o seguinte:

  • Obtenha o identificador de disco da sua unidade externa de 3 TB

    diskutil list
    

    Abaixo, eu assumo que o identificador de disco é disk6

  • desmonte o disco:

    diskutil umountDisk disk6
    
  • Substitua os primeiros 40 blocos:

    sudo dd if=/dev/zero of=/dev/disk6 bs=512 count=40
    
  • Crie um novo gpt:

    sudo gpt create /dev/disk6
    
  • Verifique as informações do disco com:

    diskutil info /dev/disk6
    

    Certifique-se de que o tamanho do bloco do dispositivo ainda seja 512 bytes

    Você também pode usar

    sudo gpt -r show /dev/disk6
    

    Se o gpt mostrar:

       start        size  index  contents
           0           1         PMBR
           1           1         Pri GPT header
           2          32         Pri GPT table
    

    você tem um disco e um controlador de disco que relatam um tamanho de bloco lógico de 512 bytes. Continue com o próximo passo.

    Se o gpt mostrar:

       start        size  index  contents
           0           1         PMBR
           1           1         Pri GPT header
           2           4         Pri GPT table
    

    você tem um disco e um controlador de disco que relatam um tamanho de bloco lógico de 4096 bytes. Por favor, pare aqui e adicione um comentário.

  • Primeiro recrie a entrada EFI com:

    sudo gpt add -b 40 -i 1 -s 614400 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/disk6
    

    Dependendo do tamanho do disco e da versão do sistema, volumes EFI de tamanhos diferentes são criados se particionados com o Disk Utility: um com o tamanho 200 MiB ou outro com 300 MiB. Aqui é óbvio que seu disco contém um EFI de 300 MiB e provavelmente 4096 bytes de espaço em disco não alocado: (314598400-1024) / 512 = 614448 (= volume principal do bloco inicial) 614448-40-8 = 614400 (= tamanho do EFI)

  • Recrie seu volume principal com:

    sudo gpt add -b 614448 -i 2 -s SizeOfVolume1 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    

    O tamanho do volume principal pode ser determinado pela primeira entrada (corrompida e antiga) da segunda tabela da GPT: (3000592961536/512) = 5860533128 é o número do bloco. Em seguida, o tamanho é calculado por 5860533128-614448 = 5859918680 blocos. Como 5859918680 é divisível por 8 (tamanho do bloco físico 4096 / tamanho do bloco lógico 512), esse é um bom palpite para o tamanho do volume.

    O melhor palpite é finalmente:

    sudo gpt add -b 614448 -i 2 -s 5859918680 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    

    O segundo melhor palpite é:

    sudo gpt add -b 614448 -i 2 -s 5859918672 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    
  • Provavelmente seu volume perdido é montado agora. Verifique o volume com:

    diskutil verifyVolume disk6s2
    

    Se necessário, tente reparar o volume.

    diskutil repairVolume disk6s2
    

Desde que você moveu o disco "corrompido" para outro gabinete e controlador de disco, o tamanho do bloco lógico foi modificado. O mapa de partição antigo provavelmente é baseado em um tamanho de bloco lógico de 4096 bytes.

Para recuperar o mapa de partição no caso antigo (4096b), você teria que digitar o seguinte para restaurar a GPT (com base na resposta de David Anderson):

  • Crie um novo gpt:

    sudo gpt create /dev/disk6
    
  • Primeiro recrie a entrada EFI com:

    sudo gpt add -b 6 -i 1 -s 76800 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/disk6
    
  • Recrie seu volume principal com:

    sudo gpt add -b 76806 -i 2 -s 732457067 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    
  • o mapa final da partição fica assim:

     sudo gpt -r show disk1
           start        size  index  contents
               0           1         PMBR
               1           1         Pri GPT header
               2           4         Pri GPT table
               6       76800      1  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
           76806   732457067      2  GPT part - 48465300-0000-11AA-AA11-00306543ECAC
       732533873       32768         
       732566641           4         Sec GPT table
       732566645           1         Sec GPT header
    

Com base na parte 4096b, isso é "retranslado" após a instalação do disco em um caso de tamanho de bloco lógico 512b para:

  • Crie um novo gpt:

    sudo gpt create /dev/disk6
    
  • Primeiro recrie a entrada EFI com:

    sudo gpt add -b 48 -i 1 -s 614400 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/disk6
    
  • Recrie seu volume principal com:

    sudo gpt add -b 614448 -i 2 -s 5859656536 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    

Isso difere da primeira parte (aceita) da minha resposta, mas é a correta! Como a EFI realmente está "vazia" e os blocos não alocados 262144 contêm apenas zeros, a resposta "primeira e de alguma forma errada" não afeta a operacionalidade do volume.

Klanomath
fonte
2

Esta não é uma resposta, mas um exemplo de como extrair as informações da partição GPT dos dados que você apresentou. As entradas da partição GPT secundária (de backup) foram usadas porque você não publicou o conteúdo das entradas da partição GPT principal. O documento " Tabela de partição GUID " foi usado para interpretar os dados.

O último LBA utilizável pode ser encontrado no cabeçalho da GPT. Isso ocorre no endereço 8244. O valor é

70 14 aa 2b 00 00 00 00 little endian = 0x2baa1470 = 732566640 @ 4096 bytes/block.

O início das entradas secundárias da GPT (de backup) começa no próximo bloco. O valor é

(732566640 + 1) * 4096 = 3000592961536 bytes.  

Usando isso como o início da entrada da tabela de partição EFI, obtenho os seguintes valores. O início da partição EFI, localizado no endereço 3000592961568, é

06 00 00 00 00 00 00 00 little endian = 0x6 = 6 @ 4096 bytes/block.

O final da partição EFI, localizado no endereço 3000592961576, é

05 2c 01 00 00 00 00 00 little endian = 0x12c05 = 76805 @ 4096 bytes/block.

O que fornece um tamanho de partição de

76805 - 6 + 1 = 76800 @ 4096 bytes/block.

O início da partição HFS, localizado no endereço 3000592961696, é

06 2c 01 00 00 00 00 00 little endian = 0x12c06 = 76806 @ 4096 bytes/block.

O final da partição HFS, localizado no endereço 3000592961704, é

70 94 a9 2b 00 00 00 00 little endian = 0x2ba99470 = 732533872 @ 4096 bytes/block.

O que fornece um tamanho de partição de

732533872 - 76806 + 1 = 732457067 @ 4096 bytes / block.

Se você usar um tamanho de bloco de 512 bytes, os resultados acima deverão ser multiplicados pelo valor de 8 para converter em 512 bytes / bloco.

David Anderson
fonte
+1 Temos um tamanho e bloco de partida idênticos para o EFI e um bloco de início idêntico, mas com um tamanho diferente do volume principal.
klanomath