搜档网
当前位置:搜档网 › BIOS方式安装、引导GPT分区单硬盘中的win7和win8系统问题

BIOS方式安装、引导GPT分区单硬盘中的win7和win8系统问题

BIOS方式安装、引导GPT分区单硬盘中的win7和win8系统问题

首先要说明的是,在我安装和引导过程中,得到了510819776等网友的热心指点,在此表示感谢!在我以下的阐述中,由于水平所限,错误在所难免。对于阐述中的错误,敬请各位网友指出,谢谢!

一、win7/win8系统安装

假如一电脑仅有一GPT分区的单硬盘,第一分区为esp分区,第二分区、第三分区拟安装以UEFI方式启动的win8、WIN7的64位系统,第四分区拟安装win7的32位系统。

下面,对UEFI方式启动的win8、WIN7的64位系统安装不予阐述,仅对win7的32位系统安装到gpt分区及VHD系统作阐述。

(一)原本机上安装的第二硬盘以MBR方式启动的WIN7的32位系统克隆到gpt分区
1.用CGI64/32一健还原工具(支持gpt分区),克隆到gpt分区硬盘的第四分区上。

2.在winpe下,用skyiar工具,在该分区为ahci硬盘模式安装驱动。

3.对win7的32位系统进行注册表盘符清理。
凡将一个分区安装的系统克隆到另一个分区,无论是nt5.x系统,还是nt6.x系统,均要进行注册表盘符清理,否则将进不了系统桌面,因其注册表中的系统盘符一般不是克隆到的盘符。
如克隆到的gpt分区的盘符为H:盘(要记住,以下要用)。方法是:
①在WIN7PE/win8pe中,打开regedit, HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices,将H:盘对应的两项(其中一项为其ID号)保留。若无ID号项,则双击H:盘项,复制出显示在注册表项右侧的二进制值,修改型如“\??\Volume{ffee9440-0deb-11e3-8493-7845c4387ae8}”的某一项的二进制值为刚才复制的该值。其余项全部删除。导出本机HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices为reg文件保存到某盘某目录下,用记事本打开该reg文件,把内容[HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices]改成[HKEY_LOCAL_MACHINE\000\MountedDevices]保存备用。如为sys.reg。

②在WIN7PE/win8pe中,打开regedit,用加载配置单元命令,把 H:\Windows\System32\config\system 挂上HKEY_LOCAL_MACHINE 取名为000;把HKEY_LOCAL_MACHINE\000\MountedDevices 中的所有信息删除;导入以上保存备用的sys.reg文件 ,编辑 MountedDevices,把\DosDevices\H: 改为 \DosDevices\C:,即把克隆到的gpt分区盘符H:盘修改为系统盘符C:(此步是关键,保证系统盘符为C:);选中000项,卸载配置单元,退出regedit。

4.用bootice对该分区的win7系统boot目录下的BCD进行编辑。

注:
经测试及有网友说,用bootice现发布的各版本、easybcd、BcdTool等工具,编辑esp分区\boot\目录下的bcd、esp分区\EFI\Boot\目录下的bcd、esp分区\EFI\Microsoft\Boot\下的BCD、各gpt分区中安装的win7/win8系统boot目录下的BCD、存放在gpt分区中的win7.vhd/win8.vhdx中的\boot\目录下的bcd,因微软故意按此设计的原因,以ue

fi方式启动时能正常读取BCD和正常启动系统,而以bios方式启动涉及gpt分区的win7/win8系统及其VHD/VHDX系统时,bootmgr启动管理器不能读取bcd,会启动失败。

且经我测试表明,将该gpt分区硬盘用DiskGenius无损改回mbr分区方式,不改各分区的bcd能正常启动;将存放在gpt分区的win7_x32.vhd复制到mbr分区硬盘上,不改bcd能正常启动;挂载存放在gpt分区的win7_x32.vhd,用Qemu启动测试器增强版测试挂载的盘,不改其内的bcd也能正常启动。

但此步修改bcd,对下步的启动来说,又是必须修改的。

(二)用从网上下载封装的win7_x32克隆版的iso安装到gpt分区
经测试,与(一)的方法基本相同,但要注意:一是从iso文件中首次克隆到分区中时,由于系统内的盘符信息在封装时已被清理过,注册表盘符清理这步就不做了。二是有的网友说,将系统克隆到gpt分区硬盘的前四个分区,成功的几率要大些,安装完成后再将之克隆到5-n(n最多为128)中的某一个gpt分区上,但切记要进行注册表盘符清理。

(三)将mbr或gpt分区安装好的win7_x32系统安装为vhd系统
1.将该WIN7的32位系统克隆备份为win7_x32.gho。
2.用Windows_VHD_VHDX辅助处理工具(2013_2012.12.25更新),选win7_x32.gho,生成win7_x32_gpt.vhd,存放在gpt分区(如第6个分区)。
3.在winpe下,挂载win7_x32_gpt.vhd,用skyiar工具,为ahci硬盘模式安装驱动。
4.对win7_x32_gpt.vhd进行注册表盘符清理。按一中(一)之3步进行,只是盘符是上步挂载win7_x32_gpt.vhd后的系统盘符,而非其第3步所说的win7系统所在的gpt分区的盘符。
5.bootice1.321对win7_x32_gpt.vhd中boot目录下的BCD进行编辑。

(四)系统的激活处理

1.软激活软件:失败
在涉及gpt分区中安装的nt6.x及其vhd系统,均不要再用Windows 7 Loader 1.9.5及以后版本等软激活软件来激活了,因其激活原理是:
①生成激活文件为XQAPR、win7.ld(或为其他名称)。
②若VHD系统虚盘的前部有64个扇区时,用bootice处理虚拟硬盘的mbr为wee查找XQAPR启动,设置pbr为bootmgr引导代码;若无64个扇区,则用bootice处理虚拟硬盘的mbr为nt5.x,设置分区pbr为ntldr但改名为XQAPR。
③启动时将先调用XQAPR,再搜索启动win7.ld所在硬盘分区(不搜索虚拟软盘分区)的bootmgr。
但涉及gpt分区时,bootmgr读取BCD会出错,所以此法不能采用。

2.写系统内核的激活软件:成功
对安装到gpt分区的nt6.x系统或存放在gpt分区的nt6.x的VHD/VHDX系统,不论是用bios方式还是uefi方式启动,win7_x32/win7_x64及其VHD系统均推荐采用Activite0.9激活;win8_x32/win8_x64及其VHD/vhdx系统,均推荐采用KMSAuto Net方式激活。以上激活可在bios方式或是uefi方式启动后激活,则以uefi或bios之另一方

式启动后系统也是激活的。

二、以bios方式启动win7/win8系统
(一)方法一:xorboot搜索esp分区某目录下的grldr--启动boot_winnt6.ima包

1.将win8的64位bootmgr及boot目录(含其下的文件),复制到临时目录下,其中boot目录下仅保留Fonts(只保留wgl4_boot.ttf、chs_boot.ttf两个文件)、zh-CN子目录及bcd、boot.sdi、memtest.exe文件。

2.用bootice1.05编辑上步boot目录下的bcd,以启动win7.VHD系统(用bootice1.05编辑BCD可使BCD文件保持原大小为256kb,其他版本要精减bcd的文件大小),然后打包成boot_winnt6.ima包,存放到esp分区boot目录下。

3.用bootice分别对安装到gpt分区的win7_x32、win7_x64、win8_x64系统的\boot\目录下的bcd文件进行编辑,使其分别启动本分区的win7/win8系统。

4.在esp分区boot目录下拷入grldr,内置如下菜单:
title win7/win8.VHD--boot_winnt6.ima
#map (hd1) (hd0)
#map (hd0) (hd1)
#map --hook
#若gpt分区硬盘启动为第二硬盘时,下同
#boot_winnt6.ima内的bcd已修改为启动VHD系统的BCD
#但不能替换为vhd系统boot目录下的BCD
set pathgrub=/boot/
find --set-root --devices=h %pathgrub%boot_winnt6.ima
map --mem %pathgrub%boot_winnt6.ima (fd0)
map --hook
rootnoverify (fd0)
chainloader +1

title win7/win8/x32/x64_gpt--boot_winnt6.ima
#map (hd1) (hd0)
#map (hd0) (hd1)
#map --hook
#若gpt分区硬盘启动为第二硬盘时,下同
set pathgrub=/boot/
set sysdsk=(hd0,6)
#上句表示gpt分区系统所在的分区,不同的系统修改上句所指的分区编号即可
find --set-root --devices=h %pathgrub%boot_winnt6.ima
map --mem %pathgrub%boot_winnt6.ima (fd0)
map --hook
rootnoverify (fd0)
dd if=%sysdsk%/boot/bcd of=()/boot/bcd
#即用所在GPT分区系统boot目录下的BCD替换boot_winnt6.ima包中boot目录下的BCD
chainloader +1

注:①xorboot搜索esp分区某目录下的grldr的详细方法,请见帖子《BIOS方式引导、安装GPT分区的XP系统用户经验汇总》。
②经测试,此法能正常启动安装在gpt分区的win8_x64/win8_x32/win7_x64/win7_x32系统,及存放在GPT分区的VHD/vhdx系统,且已激活。

(二)方法二:xorboot搜索esp分区某目录下的grldr+ntboot包启动存放在gpt分区中的win7_x32.vhd

复制ntboot通用工具包到esp分区boot目录下,并将chenall大完善后的ntboot复制到ntboot目录下替换原有的ntboot(此点是关键),grldr中内置如下菜单:
title boot win7_x32.vhd--ntboot
set pntboot=/boot/ntboot/ntboot
find --set-root --devices=h %pntboot%
set pntroot=%@root%
find --set-root --devices=h /vhdos/win7_x32.vhd
%pntroot%%pntboot% nt6=/vhdos/win7_x32.vhd
boot

注:
①若不用chenall大完善后的ntboot,因不能读取win7_x32.vhd内boot目录下的bcd,启动失败。
②若将win7_x32.vhd复制到mbr分区中,不更改win7_x32.vhd内的bcd,按此法能正常启动。且因win7_

x32自身含有对gpt分区的支持文件,因此启动后能正常读写各gpt分区的文件。
③经测试,此法能成功启动存放在gpt分区中的win7_x32.vhd/win7_x64.vhd/win8_x64.vhdx系统。因此,强烈推荐此法。

(三)方法三:xorboot搜索esp分区某目录下的grldr+chenall大完善版ntboot启动安装在gpt分区中的win7/win8系统
title win7/win8/x32/x64_gpt
#map (hd1) (hd0)
#map (hd0) (hd1)
#map --hook
#若gpt分区硬盘启动为第二硬盘时,下同
set sysdsk=(hd0,6)
#上句表示gpt分区系统所在的分区,不同的系统修改上句所指的分区编号即可
set pntboot=/boot/ntboot/ntboot
find --set-root --devices=h %pntboot%
%pntboot% nt6=%sysdsk%
boot

注:经测试,此法启动成功。

(四)其他方法:均失败。
1.用xorboot直接搜索esp分区的bootmgr、各gpt分区的bootmgr,或用xorboot搜索grldr启动esp分区的bootmgr或各gpt分区的bootmgr
因一中(一)之4步备注所述原因,不能读取bcd文件,因此会启动失败。

2.用xorboot直接搜索esp分区boot目录下的boot_win8.ima包
按(一)中方法打包boot_win8.ima,用xorboot直接搜索之启动时会出现"bootmgr is missing"的出错提示,未能成功。

注:这应是xorboot的功能缺陷问题

三、其他问题
(一)如何用grub4dos判断是gpt分区硬盘还是mbr分区硬盘,以根据判断结果采取不同的后续操作

1.网友510819776 提出的方法:

用g4d判读磁盘是gpt分区表很简单
dd if=(hd0)+1 skip=450 bs=1 count=1 of=(md)400+1
checkrange 0xee read 0x32000 && echo gpt
原理是gpt硬盘的分区表保留的mbr里面第一个主分区分区id是0xee
代码的意思是:判断硬盘0扇区偏移450字节是否为0xEE 如果是就执行echo gpt,当然你可以换成你自己的命令

问:若gpt分区硬盘的0扇区写入了xorboot的主启动代码,是否还可这样判断

网友510819776答:
xorboot只是负责启动而已,不会修改mbr或者gpt的分区表,如果分区表都修改了,那就不是引导工具,而是分区工具了。
gpt的头一个扇区保留mbr结构是:只有windows系统才会优先解读,0xee 是必须的,如果你分区表没有0xee,就一定不是标准的gpt分区表。

2.chenall大师的方法:
判断的话可以用NTBOOT(chenall完善版)里面的方法:
root (hdx,y)
checkrange 0xee read 0x8334 && echo gpt

(二)如何用grub4dos隐藏及显现gpt分区,以在启动某一gpt分区操作系统前先显现该分区,并隐藏其余gpt分区操作系统所在分区。

经chenall大师的修改,grub4dos-0.4.5c-2014-08-17或grub4dos-0.4.6a-2014-08-17已经能正常显示隐藏gpt分区了:

用hide/unhide命令来隐藏显示gpt分区。至于parttype对于gpt分区无效,新的版本已经禁止parttype对gpt分区的操作,以防止出错。

相关主题