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
双启动全部完成
五、其他说明
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
但是在这个命令下却不能用,不知何故
本文转自 abner110 51CTO博客,原文链接:http://blog.51cto.com/abner/232796,如需转载请自行联系原作者