致敬前文:https://wzyboy.im/post/1049.html
前文总结:
- BCD只能工作在BIOS + MBR或是UEFI + GPT的组合上
- 但是启动完BCD怎么加载
\Windows\System32\winload.exe
就随意了
windoge的辣鸡启动器功能又弱、要求又高,BIOS + GPT这种组合在GRUB下是完全没有问题的,一到windoge就问题多多。而且更烦人的是,窝的core.img
在/dev/sda1
,Linux装在/dev/sda2
,而windoge装在/dev/sdb1
,现在想把windoge重新安置在/dev/sda3
。重装一遍windoge简直是噩梦一般的存在,而M$是绝对不会告诉你怎么安全移动windoge分区而又不至于无法启动的。
那为什么这篇文章又叫做 伪 呢?原因是前文采用的是虚拟一块MBR盘,而窝采用的是Hybrid MBR/GPT。Hybrid MBR/GPT可能是分区里最暗黑的技术了。GPT为了兼容MBR,头部(0扇区)仍然是有效的MBR分区表,尽管里面只有一个类型为ee、从1扇区开始跨越整个磁盘的分区。这么做的目的,是用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做Protective MBR。那么MBR实际支持4个分区,还有3个分区是不是可以拿来用呢?答案是完全可以的。这样,不支持GPT的软件仍然能够看到3个MBR分区(和一个不认识的ee分区),支持GPT的软件看到ee分区后就会转而去读取GPT分区表(但愿如此)。如意算盘打得劈啪响,实际情况却是:
- 几乎每家对Hybrid MBR/GPT的实现都不一样!Linux只认Hybrid中的GPT,而windoge如果发现Hybrid就只认其中的MBR。如果你还想装其他的OS(比如水果、BSD),务必先检查它们对Hybrid MBR/GPT的实现情况,再做考虑。
- 似乎Linux如果看到GPT Protective Partition不以Sector 1开始,就会抹掉Protective MBR(但这个Protective Partition可以不是MBR第一项)。在得出这个结论之前,窝还以为kernel和Hybrid MBR/GPT有仇。
- 其中的MBR和GPT是两张独立的分区表,意味着你可以在MBR和GPT中指定完全不同的分区位置,甚至可以交错。当然,这么干的后果要自己想清楚。常见用法是,在MBR中写出某些GPT分区的位置,而其他地方留空,在使用Protective MBR时不要进行分区操作。
- Hybrid MBR/GPT已经是非标准了,Hybrid MBR/GPT里面再玩扩展分区则是非标准中的非标准,有些分区软件根本不让你在Hybrid MBR中创建扩展分区。不要这么玩,除非你想自沙。
因此,windoge使用的实际上还是MBR,并没有享受到GPT分区表的好处。如果这么搞双系统的话,windoge能使用的分区不会超过三个。考虑到窝windoge就是个弟弟系统,只能使用一两个分区不是问题,然而和前文相比就要差一点了。
使用ntfsclone
将/dev/sdb1
复制到/dev/sda3
,并且设置好Hybrid MBR/GPT(具体请Google)。此时如果执行update-grub
,应该已经可以找到/dev/sda3
的Windows Boot Manager
。如果不想执行update-grub
或者没有找到,也可以在grub命令行手动输入
set root=(hd0,gpt3)
chainloader +1
boot
就能顺利进入BCD了,然而试图启动windoge却找不到\Windows\System32\winload.exe
?!推测应该是由于分区UUID改变导致BCD条目失效。最后发现,只要进入任意windoge系统,执行
bootsect /nt60 d: /mbr
bcdboot d:\Windows /s d:
其中d:是你的新windoge所在分区,就功德圆寂满了!
通过搜索引擎来到这里,留名
太恐怖了,我选择clover(留下了没有技术的泪水
is it unlimit?
unlimit 1