关于 Mac 磁盘及分区表的几个 Tips

今天装 BootCamp 差点没给我打趴下,先是手贱搞坏了 PMBR,然后是备份盘的最后一个分区被莫明其妙地干掉了……(真倒霉= =)特此把几条经验贴上来以供参考,希望我的悲剧不会成为你的杯具~

1. 清空 GPT 的 PMBR:
一般我们用:

dd if=/dev/zero of=/dev/disk0 bs=440 count=1

恢复 PMBR 到初始状态(就是没有 BootCamp 过的状态,此时 Hybrid MBR 不存在)。
由相关资料得知 GPT 的第一扇 512 字节都是 PMBR,所以我就把整个 LBA0 给清空了……然后,就没有然后了T_T
后来又由相关资料得知,LBA0 的前 440 字节才是可以动手的,后面那几十字节如果动了就肯定会杯具(至少是在 Mac 上是这样的),所以如果你需要清空 PMBR,dd 命令的 bs 参数那里一定要填 440 ,不要把整个 LBA0 都干掉……

2. 修复空白 LBA0
如果已经把整个 LBA0 填零了怎么办?方法很简单:找台 Mac,或者已经用磁盘工具格式化为 GPT 的硬盘,提取其 LBA0 回写到 LBA0,然后抹掉前 440 字节填零即可。

3. 修复由 Windows 造成的 "invalid BS_jmpBoot in boot block: 000000"
虽然 Windows 下 BootCamp 自带的 HFS+ 驱动是只读的,但是我还是遇上了分区表损坏的情况,具体表现为最后一个 HFS+ 分区无法挂载,分区类型显示为 “MSDOS”,使用磁盘工具修复时提示"invalid BS_jmpBoot in boot block: 000000"。其实数据还是完整的,因为放到 Windows 下就能挂载并查看内容。修复方法在这里找到了,很简单:

先下载 GPT 修复工具:gpt_surgeon.py

下载后解压,并给予运行权限:

chmod +x gpt_surgeon.py

然后运行

./gpt_surgeon.py list [磁盘位置(/dev/disk0)]

查看磁盘的当前状况,比如我的显示为:

local:~ root$ ./gpt_surgeon.py list /dev/disk2
Read MBR and GPT from /dev/disk2.
partition 0:
type: EFI System
name: u'EFI System Partition'
flags: 0x00000000
partition 1:
type: Apple HFS+
name: u'Time Machine HD'
flags: 0x00000000
partition 2:
type: Microsoft Basic Data
name: u"Bill's Documents"
flags: 0x00000000

如红色部分,本来应该是 Apple HFS+ 的,但是变成 FAT 格式了,肯定是损坏了。
所以呢,认准是2号分区,打开磁盘工具将此设备所有分区卸除,开始修复了:

diskutil unmountDisk disk2 //一定要先卸除硬盘再进行操作!
sudo ./gpt_surgeon.py repair [磁盘位置(/dev/disk0)] [分区编号]

即可得到类似输出:

local:~ root$ sudo ./gpt_surgeon.py repair /dev/disk2 2
Read MBR and GPT from /dev/disk2.
Changing type of partition #2 on /dev/disk2 to HFS+...
    Opened /dev/disk2 for writing.
    Wrote MBR.
    Wrote GPT header.
    Wrote GPT entries.
    Closed /dev/disk2.
Done.

完成后磁盘会自动挂载,应该可以看到分区了。

2 Comments

  1. Max Sky says:

    你好,比较纳闷只有一个硬盘时候用的py脚本怎么弄,无法卸载所有分区嘛- -

    毕竟系统在运行,那个Mac PE内貌似也没有py无法运行这个程序,求教

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.