【仅限折腾党】单盘GPT+Legacy BIOS安装Windows-Windows,Legacy,GPT,BIOS,引导 Windows Legacy-远景论坛-微软极客社区

此文只适合以下三种用户阅读:

一、折腾党,不折腾不舒服。

二、喜欢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了,可现实却很悲剧…

 

230944fwjwf3vhwz33xx0p.png

 

 

这就是我当时的试验图片,可以看出不仅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),另一个大小任意。

如图所示:

 

1.png

 

 

 

Step3 将压缩包中的vboot-v2文件夹中的所有文件都解压到40MB分区根目录。

 

Step4 将压缩包中的文件解压。将1.bat放置在D盘根目录(将要安装系统的分区)

打开BootICE,选择你的硬盘,点击主引导记录,将mbr文件夹中的gptmbr.bin恢复入启动扇区。

 

2.png

 

 

 

接下来选择分区引导记录。

选择40M分区,按图安装好PBR。

 

3.png

 

 

 

接下来打开Gdisk,注解都在图上:

 

4.png

 

 

 

最后用磁盘管理删除C盘(40M)盘符,需要注意下:gpt删除盘符是写在分区表中的,因此如果不手动分配,这个盘符永远不会自动挂载。

 

Step5 创建bootmgr.vhd,并分区。将分区改为活动分区。

如图所示,不再描述:

 

5.png

 

 

 

Step6 使用NT6快捷安装器安装系统

不解释。

 

6.png

 

 

 

Step7 重启,进入Windows安装界面后按Shift-F10,输入\1加载bootmgr.vhd虚拟启动盘,如果不行,多试几次。如果错过了最佳时机,Windows便会提示“Windows 无法配置在此计算机的硬件上运行。”,掌握不好时间的坛友可以将引导文件存在U盘上,然后再重建引导文件。

 

Step8 在Windows初次设置时继续Shift+F10,输入\1回车,进入系统后打开BOOTICE,按图将启动菜单改为传统模式,禁止自动修复,同时要将WinRE项的winload.efi改为winload.exe(看来WinRE安装程序是通过判断分区表来判断固件类型的。。U盘引导用户也要改这一项),否则WinRE(即系统恢复选项)无法正常加载。

 

7a.png

 

 

 

7b.png

 

 

 

Step9 安装.Net Framework 3.5,然后安装VHD Attach,按图设置为自动挂载bootmgr.vhd,最后设置好VHD Attach服务的依存关系,让它永远领先于TrustedInstaller启动(防止Windows Update在开机时找不到引导分区)。

 

8.png

 

 

依存关系是这样设置的:

按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运行的话,你就必须这么弄了。

来源URL:http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1573292&extra=page%3D1%26filter%3Dtypeid%26typeid%3D1210%26typeid%3D1210