今天装 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
你好,比较纳闷只有一个硬盘时候用的py脚本怎么弄,无法卸载所有分区嘛- -
毕竟系统在运行,那个Mac PE内貌似也没有py无法运行这个程序,求教
OS X可以装在U盘上的……我的问题是出在外置硬盘上。或者也可以尝试拆下硬盘接到到Linux修复。