Abner Kou原创
Windows XP
与
Win7 VHD
双启动
一、
目的:在装有Windows XP的硬盘上部署Windows 7 VHD镜像,修改启动信息,最终实现 Windows XP与Windows 7双系统启动。这样做的好处显而易见,无需安装系统,适合于快速批量部署Win7,用于对Win7的测试和试用
二、环境
1、可启动的VHD文件。建议使用vpc在实际要部署win7的物理机上制作,并安装好驱动(VHD成功启动后,在Win7 VHD下安装驱动)。将制作好的vhd文件Win7.vhd放到物理机的D盘,C盘为Windows XP系统。
2、将win7安装盘中的boot文件夹、sources下的boot.wim、bootmgr拷贝到文件服务器上,并共享
使用命令拷贝
xcopy k:\boot\*.* e:\share\boot /s /r
copy k:\bootmgr e:\ share\
Copy k:\sources\boot.wim e:\sources
K为Win7安装光盘的盘符 E为文件共享服务器的盘符
3、将BCD备份文件放到文件服务器上,共享。(如何制作,后面会讲到)这个BCD备份数据是在已经配置好双启动的机器上备份出来的,当配置下一个机器时可以直接从备份恢复BCD数据,并加以修改。
三、
原理
1、XP和win7的引导方式有着根本性的不同。
在XP时代系统通过NTLODER读取boot.ini的数据进行引导,win7则使用bootmgr即启动管理器,去读取BCD中的数据,从而引导系统。BCD:Boot Configure Data 引导配置数据,它的作用就是用于存放当前机器上的操作系统信息,安装了多少操作系统,每个操作系统所在分区等等。它相当于XP的boot.ini
2、单纯修改xp下的boot.ini并不能引导win7.需要使用Bootmgr.exe来引导
3、引导win7的几个必要文件需要放到当前系统分区,即XP的所在的系统分区C盘。
4、对于修改启动配置信息,可以使用系统安装过程中的修复计算机工具中的系统恢复工具,或者使用bootrec.exe工具修复系统引导文件,再或者直接用bcdedit工具导入BCD备份数据,并加以修改。以上三种方式均可以实现正确引导双系统,第一种图形界面的适用个人用户,第三种可以实现脚本化的则适用于企业的批量部署。
四、
过程
1、将物理机引导到winPE,可以用安装盘、也可以用WDS,我用的是后者
2、在选择语言处,按shift+F10,调出命令行,当前命令行位置是X:\sources
3、连接文件服务器,拷贝所需文件(也可以在xp系统下拷贝):
net use z: \\server\share
输入用户名和密码,将服务器上的文件映射到本地Z盘
share下有三个文件夹一个文件
bootmgr:启动管理器,相当于XP/2003时期的Ntldr
文件夹boot:存放安装光盘中的boot文件
文件夹sources:存放本地WinPE启动文件boot.wim
文件夹bcdback:存放BCD备份数据BCD.back
md c:\boot
md c:\sources
z:
copy z:\sources\boot.wim c:\sources (只是第一种方式需要boot.wim文件)
xcopy bootmgr c:\ /s /y /r
xcopy z:\boot\*.* c:\boot
copy z:\bcdback\BCD.back c:\boot
A、修复启动项:第一种方式,图形界面修复
C:
Cd boot
Bootsect.exe /nt60 sys (更新系统分区上的主启动代码,由NTLDR切换到BOOTMGR)
重启电脑,系统自动从本地的boot.wim启动,在选择语言和键盘的地方停止,按shift+F10执行以下命令
Diskpart
List disk
Select disk 0 (winXP所在硬盘)
Select vdisk file=d:\win7.vhd
Attach vdisk
List volume (查看被挂载的vhd的盘符,本例中为H)
回到图形界面,选择时区、键盘,点击下一步
不选择安装系统,选择左下角的“修复计算机”,自动进入系统修复程序
系统会自动查找磁盘中所安装的系统,并添加到启动项。
重启电脑,第一种方式修复结束
(此外:通过另一个图形界面工具,也可修复,文件在
X:\sources\recovery\RecEnv.exe
使用这个工具就不需要拷贝boot.wim,不需要重启系统进入本地的WinPE了)
4、附加VHD盘
Diskpart
List disk
Select disk 0 (winXP所在硬盘)
Select vdisk file=d:\win7.vhd
Attach vdisk
List volume (查看被挂载的vhd盘符,本例中为H)
Exit (退出diskpart)
B、修复启动项——第二种方式,bootrec工具
Bootrec /rebuildbcd (扫描磁盘中所安装的系统,并将启动项添加到BCD中)
系统会扫描到H盘存在一个系统,即VHD的Win7系统,问是否保存到BCD,键盘上敲入Y,回车保存。
Bcdedit 查看是否存在添加启动项
最后备份BCD文件,这就是第三种方式中的备份文件来源
Bcdedit /export c:\boot\BCD.back (备份BCD数据)
Copy c:\boot\BCD.back z:\bcdback (将备份放到文件服务器)
重启电脑,第二种方式修复结束
C、修复启动项——第三种方式,导入BCD备份文件
Bootrec /fixmbr (可以删除 MBR 中的非标准代码)
Bootrec /fixboot (修改xp时代的NTLDR启动为Bootmgr启动)
Bcdedit /import c:\boot\BCD.back(从备份文件恢复引导信息数据BCD)
导入BCD数据之后,device、osdevice信息显示为未知,需要重新修改
Bcdedit /set {default} device vhd=[d:]\win7.vhd
Bcdedit /set {default} osdevice vhd=[d:]\win7.vhd
Bcdedit 查看启动信息是否正确,正确的显示如下:
Windows Boot Manager
--------------------
identifier
{bootmgr}
device
unknown
path
\bootmgr
description
Windows Boot Manager
locale
en-US
inherit
{globalsettings}
default
{default}
displayorder
{default}
toolsdisplayorder
{memdiag}
timeout
30
Windows Boot Loader
-------------------
identifier
{default}
device
unknown
path
\Windows\system32\winload.exe
description
Windows 7 Enterprise
locale
zh-CN
osdevice
unknown
systemroot
\Windows
重启电脑,第三种方式修复结束
5、恢复XP系统(在WinPE环境下,也可以在启动win7后,在win7环境下)
Bcdedit /create {ntldr} /d “windows XP”
Bcdedit /set {ntldr} device partition=c: (选择xp系统所在盘)
bcdedit /set {ntldr} path \ntldr
Bcdedit /displayorder {ntldr} –addlast
Bcdedit /set {ntldr} description “Windows XP”
Bcdedit
至此,Windows XP和win7 VHD双启动全部完成
经过以上步骤,重启电脑之后,出现系统选择菜单,WIN7可以正常进入,xp不能正常进入,显示信息为:
文件: \ntldr
状态:0xc000000f
信息:无法加载所选项,因为应用程序丢失或损坏
解决方法:
win7启动后,把WinXP系统安装盘中i386文件夹下的ntldr和ntdetect.com这两个文件拷贝到XP系统所安装的磁盘根目录下,像上文提到系统安装在E盘中,就把这两个文件放到E盘中.
重启电脑,两个系统都可以进入,问题解决。
五、其他说明
1、查看BCD中的备份信息
bcdedit /store z:\bcdback\BCD.back
2、清除windows XP下的 BCD启动信息
Bcdedit /export c:\boot\bcd_back01 (备份BCD数据)
Attrib c:\boot\bcd –s –h –r
(去掉隐藏只读)
Ren c:\boot\bcd bcd.old (改名)
3、第二种修复方式中,理论上可以做到完全脚本化
将Bootrec /rebuildbcd改成
Echo Y|Bootrec /rebuildbcd 即可以在提示输入YES|NO|ALL的时候,自动输入Y,不需要人工敲入Y
但是在这个命令下却不能用,不知何故
本文出自 “ abner kou” 博客,请务必保留此出处 http://abner.blog.51cto.com/667698/232796