如何修复显示为Fdsik_partition_scheme的Mac硬盘驱动器分区


8

我的情况似乎与如何修复损坏的MBR的GUID硬盘驱动器非常相似,但是有足够的差异,我无法提供一个有信心的解决方案。

我在USB机箱中有一个3TB东芝驱动器,该硬盘正在OS X El Capitain 10.11.3的Mac上使用。

该驱动器设置有一个分区。该驱动器不可引导,并且没有安装系统,因此我假设它也没有恢复分区。我不能肯定地说它从未安装过系统,但是我不这么认为。它尚未与Bootcamp或任何非Mac计算机一起使用。

该驱动器正常工作了很长时间,但是最近未能被识别。在使用Disk Utility进行调查时,它显示为具有FDisk_partition_scheme分区类型。我确定它最初是GUID分区图的典型默认格式,格式为OS X Extended(Journaled)

我想不出任何可能引起更改的特定用途或事件。

这是我从驱动器中收集的信息。

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信息/ 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中的驱动器启动

正如其他答案中所建议的那样,我开始寻找从偏移409642开始的HFSJ字符串,但在附近没有找到它。因此,我从驱动器的开头开始进行搜索,发现了第一次出现在偏移量314598400处的情况。

但是,如果继续搜索HFSJ的出现,我会发现它们中的很多看起来完全相同,并且周围有很多零空间,就像第一个一样。那些从360424448开始,相距32768。例如,在偏移量360424448 360457216 360489984 360522752 360555520

我在wxHexEditor中使用了“ 查找全部”搜索,并在几分钟后停止。那时它已经找到了数千个。我不知道该怎么做,如果有的话。

我还能够找到偏移量为3000592961536的标有EFI系统分区的部分。该部分还显示了驱动器的名称“ Rosie”。

这是第一个HFSJ分区和EFI系统分区的屏幕截图。根据评论添加了偏移量8192的屏幕截图。

第一个HFSJ分区,末尾为EFI分区,偏移量为8192。

谢谢你的帮助。


如果出现,则您的磁盘的块大小为4096字节,现在大小为512字节。由于块大小没有存储在磁盘本身上,因此我的问题是:您是否以任何方式更改了硬件?另外,如果块大小为4096字节,那么您应该能够读取从8192字节开始的旧GPT表条目。到目前为止,您仅发布了以4096字节为起始的GPT标头。使用此处提供的信息,可以将十六进制转储转换回正确的十进制值。
David Anderson

@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)
Doug Smith

Answers:


9

请尝试以下操作:

  • 获取外部3 TB驱动器的磁盘标识符

    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 MiB 一个大小为300 MiB。显然,您的磁盘包含300 MiB 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(基于David Anderson的回答):

  • 创建一个新的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未分配的块仅包含零,因此“第一个错误的”答案不会影响该卷的可操作性。


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分区表条目的开始,我得到以下值。位于地址3000592961568的EFI分区的开始是

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

位于地址3000592961576的EFI分区的结尾是

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

分区大小为

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

位于地址3000592961696的HFS分区的开始是

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

位于地址3000592961704的HFS分区的结尾是

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's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.