分享

Windows XP 与Win7 VHD双启动 - Windows 7 - Abner K...

 冰火S 2011-03-13










 

Windows XP Win7 VHD双启动

 

一、目的:在装有Windows XP的硬盘上部署Windows 7 VHD镜像,修改启动信息,最终实现 Windows XPWindows 7双系统启动。这样做的好处显而易见,无需安装系统,适合于快速批量部署Win7,用于对Win7的测试和试用

 

二、环境

1、可启动的VHD文件。建议使用vpc在实际要部署win7的物理机上制作,并安装好驱动(VHD成功启动后,在Win7 VHD下安装驱动)。将制作好的vhd文件Win7.vhd放到物理机的D盘,C盘为Windows XP系统。

2、win7安装盘中的boot文件夹、sources下的boot.wimbootmgr拷贝到文件服务器上,并共享

使用命令拷贝

xcopy  k:\boot\*.*  e:\share\boot /s /r

copy  k:\bootmgr  e:\ share\

Copy  k:\sources\boot.wim e:\sources

KWin7安装光盘的盘符 E为文件共享服务器的盘符

3、BCD备份文件放到文件服务器上,共享。(如何制作,后面会讲到)这个BCD备份数据是在已经配置好双启动的机器上备份出来的,当配置下一个机器时可以直接从备份恢复BCD数据,并加以修改。

 

三、原理

1XPwin7的引导方式有着根本性的不同。

XP时代系统通过NTLODER读取boot.ini的数据进行引导,win7则使用bootmgr即启动管理器,去读取BCD中的数据,从而引导系统。BCDBoot Configure Data 引导配置数据,它的作用就是用于存放当前机器上的操作系统信息,安装了多少操作系统,每个操作系统所在分区等等。它相当于XPboot.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盘存在一个系统,即VHDWin7系统,问是否保存到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数据之后,deviceosdevice信息显示为未知,需要重新修改

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 XPwin7 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

但是在这个命令下却不能用,不知何故

 

 









    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多