Как исправить раздел жесткого диска Mac, отображаемый как Fdsik_partition_scheme

8

Моя ситуация кажется очень похожей на то, как исправить поврежденный жесткий диск GUID в MBR, но с достаточным отличием, что я не смог собрать уверенное решение.

У меня есть диск Toshiba объемом 3 ТБ в корпусе USB, который используется на Mac с OS X El Capitain 10.11.3.

Диск был настроен с одним разделом. Диск не был загрузочным и не имел установленной системы, поэтому я предполагаю, что на нем также не будет раздела восстановления. Не могу точно сказать, что на нем никогда не было системы, но я так не думаю. Он не использовался с Bootcamp или на любом компьютере не Mac.

Длительное время накопитель работал нормально, но в последнее время его не удалось распознать. При исследовании с помощью Дисковой утилиты он показывает, что имеет тип раздела FDisk_partition_scheme . Я уверен, что изначально это был типичный по умолчанию GUID Partition Map, отформатированный как OS X Extended (Journaled) .

Я не могу думать о каком-либо конкретном использовании или событии, которое могло вызвать изменение.

Вот информация, которую я собрал с диска.

список дисков / dev / disk6

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

информация о диске / 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 / dev / disk6

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

gpt -r -vv show / 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.

Вот скриншот первой части диска в wxHexEditor. EFI PART начинается в 4096 году.

Начало диска в wxHexEditor

Я начал искать строку HFSJ, начиная со смещения 409642, как предлагалось в других ответах, но не нашел ее там. Поэтому я искал, начиная с начала диска, и обнаружил первое вхождение со смещением 314598400.

Однако, если я продолжаю искать экземпляры HFSJ, я нахожу множество из них, которые выглядят точно так же и с большим количеством нулевого пространства вокруг них, как первый. Они начинаются с 360424448 и расположены на расстоянии 32768 друг от друга. Например, в смещениях 360424448 360457216 360489984 360522752 360555520

Я использовал поиск Find All в wxHexEditor и через несколько минут остановился. Он нашел пару тысяч на тот момент. Я не уверен, что делать с ними, если что-нибудь.

Мне также удалось найти раздел с пометкой «Системный раздел EFI» по смещению 3000592961536. Там же указано имя диска «Рози».

Вот снимки экрана первого раздела HFSJ и системного раздела EFI. Добавлен снимок экрана со смещением 8192 на основе комментариев.

Первый раздел HFSJ, раздел EFI в конце и смещение 8192.

Спасибо за любую помощь.

Дуг Смит
источник
Если появится, ваш диск имеет размер блока 4096 байт и теперь имеет размер 512 байт. Поскольку размер блока не хранится на самом диске, у меня возникнет вопрос: изменили ли вы аппаратное обеспечение каким-либо образом? Кроме того, если размер блока составлял 4096 байт, вы должны иметь возможность читать старые записи таблицы GPT, начиная с 8192 байт. До сих пор вы размещали только заголовок GPT, начиная с 4096 байт. Шестнадцатеричный дамп может быть преобразован обратно в правильные десятичные значения, используя информацию, приведенную здесь .
Дэвид Андерсон
@DavidAnderson, Аппаратное обеспечение изменилось в том, что диск находится в другом корпусе USB. Я мог бы получить оригинальное дело, если это поможет.
Даг Смит,
@DavidAnderson Я изменил снимок экрана, чтобы добавить его для смещения 8192. На нем отображается системный раздел EFI .
Даг Смит
@klanomath Да, ваш связанный ответ был правильным. Я перепутал блок и смещение. Это все нули вокруг смещения 209736704, хотя. Я также попытался разделить это на 8 (26217088) на случай, если возникла проблема с размером блока 4096. Это помещает меня в большое количество данных, но не видно ни одной строки HFSJ.
Даг Смит
@klanomath, я начал через ваш процесс. Моя попытка перезаписать первые 40 блоков фактически не записывала никаких данных:0+0 records in 0+0 records out 0 bytes transferred in 0.000013 secs (0 bytes/sec)
Дуг Смит

Ответы:

9

Пожалуйста, попробуйте следующее:

  • Получить идентификатор диска вашего внешнего диска 3 ТБ

    diskutil list
    

    Ниже я предполагаю, что идентификатор диска равен disk6

  • размонтировать диск:

    diskutil umountDisk disk6
    
  • Перезаписать первые 40 блоков:

    sudo dd if=/dev/zero of=/dev/disk6 bs=512 count=40
    
  • Создайте новый gpt:

    sudo gpt create /dev/disk6
    
  • Проверьте информацию о диске с помощью:

    diskutil info /dev/disk6
    

    Убедитесь, что размер блока устройства по-прежнему составляет 512 байт.

    Вы также можете использовать

    sudo gpt -r show /dev/disk6
    

    Если gpt показывает:

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

    у вас есть контроллер диска и диска, который сообщает размер логического блока 512 байт. Пожалуйста, продолжайте со следующего шага.

    Если gpt показывает:

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

    у вас есть контроллер диска и диска, который сообщает размер логического блока 4096 байт. Пожалуйста, остановитесь здесь и добавьте комментарий.

  • Сначала перестройте запись EFI с помощью:

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

    В зависимости от размера диска и версии системы создаются тома EFI разного размера, если они разделены с помощью Дисковой утилиты: один с размером 200 МБ или один с 300 МБ. Здесь очевидно, что ваш диск содержит 300 МБ EFI и, вероятно, 4096 байт нераспределенного дискового пространства: (314598400-1024) / 512 = 614448 (= основной том начального блока) 614448-40-8 = 614400 (= размер EFI)

  • Восстановите ваш основной том с помощью:

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

    Размер основного тома можно определить по первой (поврежденной и старой) записи второй таблицы GPT: (3000592961536/512) = 5860533128 - это номер его блока. Затем размер вычисляется по 5860533128-614448 = 5859918680 блоков. Поскольку 5859918680 делится на 8 (размер 4096 физических блоков / размер 512 логических блоков), это хорошее предположение для размера тома.

    Лучшее предположение наконец-то:

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

    Второе лучшее предположение:

    sudo gpt add -b 614448 -i 2 -s 5859918672 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    
  • Вероятно, ваш потерянный объем монтируется сейчас. Проверьте громкость с:

    diskutil verifyVolume disk6s2
    

    При необходимости попробуйте восстановить объем.

    diskutil repairVolume disk6s2
    

Поскольку вы переместили «поврежденный» диск в другой корпус и на контроллер диска, размер логического блока был изменен. Старая карта разделов, вероятно, основана на размере логического блока 4096 байт.

Чтобы восстановить карту разделов в старом (4096b) случае, вам нужно было бы ввести следующее для восстановления GPT (основываясь на ответе Дэвида Андерсона):

  • Создайте новый gpt:

    sudo gpt create /dev/disk6
    
  • Сначала перестройте запись EFI с помощью:

    sudo gpt add -b 6 -i 1 -s 76800 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/disk6
    
  • Восстановите ваш основной том с помощью:

    sudo gpt add -b 76806 -i 2 -s 732457067 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    
  • окончательная карта разделов выглядит следующим образом:

     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
    

Основываясь на части 4096b, она «ретранслируется» после установки диска в случае с размером логического блока 512b для:

  • Создайте новый gpt:

    sudo gpt create /dev/disk6
    
  • Сначала перестройте запись EFI с помощью:

    sudo gpt add -b 48 -i 1 -s 614400 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/disk6
    
  • Восстановите ваш основной том с помощью:

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

Это отличается от первой (принятой) части моего ответа, но является правильным! Поскольку EFI фактически «пуст», а нераспределенные блоки 262144 содержат только нули, ответ «первый и каким-то образом неправильный» не влияет на работоспособность тома.

klanomath
источник
2

Это не ответ, а пример того, как извлечь информацию о разделе GPT из представленных вами данных. Вторичные (резервные) записи раздела GPT были использованы, поскольку вы не опубликовали содержимое записей основного раздела GPT. Документ « Таблица разделов GUID » использовался для интерпретации данных.

Последний пригодный для использования LBA можно найти в заголовке GPT. Это происходит по адресу 8244. Значение

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

Начало дополнительных (резервных) записей GPT начинается со следующего блока. Значение

(732566640 + 1) * 4096 = 3000592961536 bytes.  

Используя это как начало записи таблицы разделов EFI, я получаю следующие значения. Начало раздела EFI, найденного по адресу 3000592961568,

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

Конец раздела EFI, найденный по адресу 3000592961576, является

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

Что дает размер раздела

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

Начало раздела HFS, найденного по адресу 3000592961696,

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

Конец раздела HFS, найденный по адресу 3000592961704, является

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

Что дает размер раздела

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

Если вы собираетесь использовать размер блока 512 байт, приведенные выше результаты необходимо умножить на значение 8, чтобы преобразовать в 512 байт / блок.

Дэвид Андерсон
источник
+1 Мы получаем идентичный размер и стартовый блок для EFI и идентичный стартовый блок, но другой размер основного тома.
klanomath