gpt的悲剧

最早,我把这个分区用win7的diskpart做成gpt格式的分区,但是发现它无法启动win7(我现在在想能不能用grub2让它支持),所以就改成了mbr格式。方法是,我用pq 8对这个硬盘重新分区。一切都良好,但是freebsd认不出来新的分区表。用gpart show,看到的是这样

#gpart show ad0
=> 34 976773101 ad0 GPT (466G)
34 976773101 - free - (466G)

但是fdisk能认出来mbr中的分区表。

询问了delphij后得知,是我没有清除gpt的primary gpt header的备份。网上搜了一下关于这个的位置以及如何清除,http://forum.ubuntu.org.cn/viewtopic.php?f=77&t=190435。原来ubuntu的早期版本也有这个问题,但是9.10肯定没有,因为我刚装了。那个帖子下面的简直就是装神弄鬼满口胡言。grub那么肥,重装grub的时候,把它装在硬盘的开始而不是分区的开始,自然就把主的干了。

从的我是这么清的:

先用gpart看硬盘信息:

# gpart list ad0
Geom name: ad0
fwheads: 15
fwsectors: 63
last: 976773134
first: 34
entries: 128
scheme: GPT
Consumers:

  1. Name: ad0 Mediasize: 500107862016 (466G) Sectorsize: 512 Mode: r0w0e0

然后用dd复制出来看看,skip到last+1的位置
#dd count=100 skip=976773135 if=/dev/ad0 of=/tmp/backup
33+0 records in
33+0 records out
16896 bytes transferred in 0.004368 secs (3868073 bytes/sec)

恰好是33个。用emacs打开看,果然在最后一个扇区的开头找到了”EFI PART”标记。算好位置,用dd覆盖掉(last+33)
#dd count=1 seek=976773167 of=/dev/ad0 if=/dev/zero

再拿gpart show看,终于对了。

谢谢delphij

p.s.dd很强大,写盘需谨慎

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥