此文只适合以下三种用户阅读:
一、折腾党,不折腾不舒服。
二、喜欢GPT分区表却不喜欢UEFI BIOS的用户。(本文参考资料1的用户就是这种类型,富有Linus精神,反对UEFI)
三、家庭轻量级小服务器用户,想用3T单盘+单分区做启动盘,却发现服务器虽然是UEFI BIOS却屏蔽了UEFI引导。(比如说HP的一些服务器)
也许你想过,MBR+UEFI能正常启动吗…也许你还想过,GPT+Legacy BIOS能正常启动吗…
第一个问题你可能已经试过了,当然能,只不过BCD的自动加载设置可能很折腾…
至于第二个问题…
去年六月份时我便考虑过如何在Legacy BIOS下启动放在GPT盘上的Windows,我发现(其实已经有很多人发现了)可以用MBR引导盘(硬盘或U盘)安装(使用第三方程序)/启动/升级GPT盘上的Windows 7及以上版本(vista我试过了,不可以)。
自从论坛上有一贴介绍了使用GPT上的保留扇区启动模拟UEFI(Clover DUET)进而启动Windows 8之后(参考资料4),我便对单盘GPT+Legacy BIOS启动Windows产生了兴趣。那篇帖子彻底颠覆了我对GPT分区表的认识。
后来我又发现有人用GRUB2将VHD虚拟硬盘模拟为启动盘启动Windows的方法(参考资料1,2,3)。
于是我便开始了探索之旅…
一、不顺利的探索
在看了上面提到的帖子和wiki后,我了解到GPT的保护MBR也可以写入引导扇区,GPT硬盘也可以在Legacy BIOS下正常引导(部分Intel原厂主板例外)。抱着试试看的心态,我翻出了硬盘里的Linux开始第一轮虚拟机探索之旅。过程没什么好说的,先用gparted分下区(设为gpt分区表),(linux分区是第三个分区,同时文件系统为ext3),再用安装程序就能把linux装进去了。
装好之后因为我不懂linux,我只好进入win8pe,安装好ext3插件,看看linux是怎么写引导的。
首先我打开了bootice,看到了这块GPT硬盘的MBR引导记录为“GRUB 2”,同时我又看了下PBR,没什么奇怪的东西。
随便写了下第三分区的PBR,发现linux的启动并未受到影响。
我随后尝试了所有分区删除,将备份的第三分区文件恢复入新的第三分区(已从ext3变为ext2),启动未受影响。
最后我将第一、二分区删除,新建新分区,这时发现grub2加载错误,出现grub rescue提示。
根据上面的测试我基本判断出来:
1、grub2是通过写入引导信息到GPT中的保护MBR(第一个扇区)来实现系统加载的。
2、引导哪个分区的信息是写到保护MBR中的。
3、引导分区的确认是通过分区号,并非分区签名/分区标识符。
本想这就可以直接引导bootmgr启动Windows了,可现实却很悲剧…
这就是我当时的试验图片,可以看出不仅bootmgr不读BCD,而且还不读字体,很明显bootmgr在加载BCD之前是根本不认GPT的。
很快我借助古哥找到了参考资料1,看了他的方法后,我大受启发,利用grub2将bootmgr.VHD成功引导。
二、艰难的引导器寻找过程
GRUB2的安装需要Linux,对于我这样的Linux纯小白来说太不方便,我曾尝试提取GRUB2的引导扇区,但因GRUB2的引导扇区过大,扇区0存不下,需要存到GPT分区表之后的一些扇区,无论是备份还是恢复均非常困难,并且因为GRUB2只能从ext分区启动,给我这样的Windows重度用户造成了很大不便。
于是我便到了无忧,看到了Pauly正在做新版本的xorboot,并且宣称支持GPT,心想希望终于要实现了,可惜的是…Pauly已经抛弃了传统BIOS支持…
随后我使用syslinux,可是无论如何都无法启动成功,很快,单盘GPT-BIOS启动Windows的计划就被我搁置了。
四个月之后的2015年1月,那份折腾的passion最终还是找回来了…
下面切入正题。
注意:目前来说此法(模拟MBR引导硬盘法)依旧存在一些bug,下面是已知的bug列表:
1、千万不要使用Metro启动页面/高级启动功能,高级启动功能会导致第二次开机时永远进入这个画面(因为在开机期间Windows无法识别虚拟引导分区,造成无法对一次性BCD选项进行删除操作,同时因为这个原因,Metro版本的多系统选择菜单也不会显示),比如说选择命令提示符则每次开机时都会加载WinRE,造成无法正常开机。
2、因为无法自动识别引导分区,所以WinRE不受密码保护…同时你也无法进行系统还原操作,除非你在命令提示符处加载bootmgr.VHD。
3、此法启动时间肯定要比MBR-Legacy BIOS略慢一点(毕竟有模拟过程)。
4、你无法升级这样安装的Windows,除非你用U盘做了替补引导装置。
5、某些老AMD平台对GPT支持不佳(使用卡顿)不属于本法bug范围内。
6、Diskgenius会破坏保护MBR中的引导扇区和VBoot分区的Legacy BIOS Bootable属性(相当于MBR分区表中的激活主分区),因此请大家尽量使用Windows自带的diskmgmt,diskpart来管理分区。
Step1 你需要准备下列软件/工具:
Windows 安装文件,Win8PE,BOOTICE,GPT FDISK Windows版,VHD Attach,VBoot 2.0,syslinux压缩包中的BIOS\MBR\GPTMBR.bin文件,挂载bootmgr.VHD用的1.bat文件。
以下文件我均会在压缩包中提供。
Step2 进入Win8PE,将硬盘初始化为GPT格式。创建两个分区,一个大小40MB,格式可以任意(FAT32/NTFS),另一个大小任意。
如图所示:
Step3 将压缩包中的vboot-v2文件夹中的所有文件都解压到40MB分区根目录。
Step4 将压缩包中的文件解压。将1.bat放置在D盘根目录(将要安装系统的分区)
打开BootICE,选择你的硬盘,点击主引导记录,将mbr文件夹中的gptmbr.bin恢复入启动扇区。
接下来选择分区引导记录。
选择40M分区,按图安装好PBR。
接下来打开Gdisk,注解都在图上:
最后用磁盘管理删除C盘(40M)盘符,需要注意下:gpt删除盘符是写在分区表中的,因此如果不手动分配,这个盘符永远不会自动挂载。
Step5 创建bootmgr.vhd,并分区。将分区改为活动分区。
如图所示,不再描述:
Step6 使用NT6快捷安装器安装系统
不解释。
Step7 重启,进入Windows安装界面后按Shift-F10,输入\1加载bootmgr.vhd虚拟启动盘,如果不行,多试几次。如果错过了最佳时机,Windows便会提示“Windows 无法配置在此计算机的硬件上运行。”,掌握不好时间的坛友可以将引导文件存在U盘上,然后再重建引导文件。
Step8 在Windows初次设置时继续Shift+F10,输入\1回车,进入系统后打开BOOTICE,按图将启动菜单改为传统模式,禁止自动修复,同时要将WinRE项的winload.efi改为winload.exe(看来WinRE安装程序是通过判断分区表来判断固件类型的。。U盘引导用户也要改这一项),否则WinRE(即系统恢复选项)无法正常加载。
Step9 安装.Net Framework 3.5,然后安装VHD Attach,按图设置为自动挂载bootmgr.vhd,最后设置好VHD Attach服务的依存关系,让它永远领先于TrustedInstaller启动(防止Windows Update在开机时找不到引导分区)。
依存关系是这样设置的:
按Win+x,选择命令提示符(管理员),输入
sc config TrustedInstaller depend= VHDAttach
回车即可。
All done!
参考资料:
1: https://wzyboy.im/post/1049.html
2:http://reboot.pro/topic/19516-ha … ows-in-bios-to-gpt/
3: http://bbs.wuyou.com/forum.php?mod=viewthread&tid=299060
4: http://bbs.pcbeta.com/viewthread-1536721-1-1.html
问下@cjy__05 版主:帖子能否加分~
GPT==LegacyBIOS安装工具.part1.rar (4.99 MB, 下载次数: 23) GPT==LegacyBIOS安装工具.part2.rar (4.99 MB, 下载次数: 17) GPT==LegacyBIOS安装工具.part3.rar (928.57 KB, 下载次数: 16)
顺便说下你应该注意的几点:
1、不必单独分小分区,当然如果你想预防误删文件的情况可以设置个小分区。
2、vboot文件夹下所有.exe,.IMG都不用保留,文件夹只保留cvs,fonts, grub就可以。
3、你的情况是装好的Windows 7,Win7不需要额外安装net3.5
主要步骤是这样的:
①创建bootmgr.VHD于任意非隐藏的NTFS分区根目录,大小设成70M就可以(更小其实也行,我的帖子中是100M,和Win7系统保留一样 大)。最好使用固定大小(尽管vboot可以用动态扩展的盘,但是固定大小的盘基本就可以看作IMG盘+末尾有一个扇区大小的记录,能用IMG的地方就能 用固定大小的VHD,如果你看不懂可以略过不看)
②准备Win8PE,挂载上bootmgr.VHD,分好区,设好活动分区(bootice就可以做到),cmd中输入命令创建引导:
bcdboot WIN7盘符:\windows /f BIOS /l zh-CN /S:VHD盘符:
③复制vboot文件夹文件,参考主贴即可,你可能需要修改\vboot\grub\grub.cfg,将(HD0,2)中的2改成bootmgr.vhd所在的分区,注意下MSR也占用一个分区位置,所以我例子中的分区号是2。
④按照我的教程做好legacy boot bootable,恢复好mbr和pbr
⑤重启电脑,选择legacy启动,你装好的win7就可以正常开机了,接着用vhd attach设置好自动挂载,用管理员cmd设置好依存关系,整个过程就完成了。
win7没有metro系统选择画面,因此高级启动和metro启动画面等bug都不用考虑。
至于启动速度,SSD表示没感觉,HDD表示慢1秒左右,毕竟HDD小文件读写差,vboot必须文件中几乎都是小文件。
其实,如果你的win7是64位的话,你可以直接用UEFI引导,但如果你的UEFI仅兼容win8及以上Windows OS运行的话,你就必须这么弄了。