我有一台安装了 Windows 的 MAC(使用 Bootcamp),但硬盘损坏(15 个 SMART 错误)。如果我将磁盘连接到 Linux 机器,它会报告以下数据:
Disk /dev/sdc: 1953525168s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 40s 409639s 409600s fat32 EFI system partition boot, esp
2 409640s 586498047s 586088408s hfs+ Customer
3 586498048s 587767583s 1269536s hfs+ Recovery HD
4 1565007872s 1953521663s 388513792s ntfs Basic data partition msftdata
到目前为止,一切似乎都正确,除了 NTFS 分区非常小,并且有 977.240.289 个扇区未使用(这样做没有意义)。如果我尝试挂载它:
root@werkstatt-debian-lenovo:~# mount /dev/sdc4 /mnt/
mount: wrong fs type, bad option, bad superblock on /dev/sdc4,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
然后我在 Windows 中打开它,它显示了一个完整的 651.24 GB 分区。
除了 Windows 无法启动之外,使用 Windows 检测到的分区上的数据似乎很好,但那是另一回事。
在 Windows 上使用 RAW 磁盘编辑器会显示以下结构:
原始(保护性)MBR:
原始 GPT:
让我困惑的是,Windows 的行为就像 GPT,但原始磁盘编辑器和 Linux 却说它是 MBR。难道 MBR 是错的,而 GPT 是对的?
答案1
驱动器使用混合分区方案。这意味着 Windows 使用主引导记录 (MBR) 表中的值。OS X (macOS) 使用 GUID 分区表 (GPT) 中的值。大多数情况下,Linux 也使用 GPT 中的值。混合分区通常会导致 MBR 分区表的第 2、3 和 4 个条目中存储的公共值在 GPT 中重复。所谓公共,是指代表分区类型和分区所在位置的值。
OS X (macOS) 知道 MBR 分区表和 GPT 中都存储了值。但是,Windows 只知道 MBR 分区表。
您的问题重复如下:
让我困惑的是,Windows 的行为就像 GPT,但原始磁盘编辑器和 Linux 却说它是 MBR。难道 MBR 是错的,而 GPT 是对的?
不,你错了。Windows 认为它是 MBR,而 Linux 认为它是 GPT。实际上有两个分区表:MBR 分区表和 GPT。
MBR 分区表和 GPT 中的第 2 和第 3 个条目相同(理应如此),但 Windows 的第 4 个条目不同。如果 MBR 分区表条目正确,则 Linux 读取了存储在 GPT 中的错误值。
1565007872
GPT 的第 4 个条目中扇区的起始值(第一个 LBA)大概应该是值587767808
,即 MBR 分区表中的起始值。假设可以对分区的第一个扇区进行十六进制转储,以查看 NTFS 标头是否正常。或者,进行更改并查看分区(NTFS 卷)是否挂载。