【文章版权归作者和CNBLOG所有,转载请务必注明原始出处】

猫尾巴的狐狸

导航

Imagex灌装Windows7到VHD,差分VHD还原保护,BCDEDIT创建XP&Windows7多系统引导

Windows7/Windows2008 R2     差分VHD     还原保护  BCDEDIT

【本文前面实际操作部分为原创,转载请联系。后续资料部分来至网络,未经验证。】

本文将介绍
利用Imagex将Windows7(Windows server 2008 R2同样的操作)灌装到VHD文件中;
利用BCDEDIT.exe实现从VHD文件启动计算机;
创建和XP共存的引导系统;
创建差分VHD(实现类似GHOST/还原卡的还原备份功能)

【BTW】差分VHD将占用很少的硬盘空间,相关信息和好处,缺点,请Google.

需要用到的工具除了 MS AIK 中的Imagex.exe【点击这里下载】 其他全部来自Windows7的安装光盘。

Imagex.exe 下载:http://cid-9f8cff17f1236314.skydrive.live.com/self.aspx/%e5%85%ac%e5%85%b1/imagex.zip

需要用到Windows7启动光盘,或者利用UltraISO工具将windows7的iso文件灌装到U盘,从U盘启动计算机。
【BTW】需要使用UltraISO 9.3及其以上的版本,在 (启动光盘) 菜单中选择(写入硬盘映像),然后选择你的U盘驱动器即可。
具体操作中遇到相关问题可以Google解决。

这里介绍从一台计算机上+已经装入了Windows7文件的启动U盘+Imagex.exe+Windows XP安装文件 来完成整个操作。
如果您已经安装了XP,可以直接进入第2步。

1.分区,按照正常的情况安装XP.(假设您安装到了C盘。)

2.安装Windows7到D盘
【BTW】(不需要占用整个D分区,不需要格式化,但需要确保您有足够的空间。)
关于Windows7 磁盘空间需求和硬件需求信息,请Google.
也可以选择到其他盘(建议放在NTFS分区上,否则创建VHD文件的时候会出问题,
如果您目前不是NTFS格式,可以使用Convert命令做快速转换。)

利用U盘启动计算机,在出现,[选择windows7的安装语言的界面],停下,按Shift+F10 调出命令行界面。
【图1 启动界面】

 

 

A.键入DISKPART ,创建母盘VHD文件。
(1)  list volume (显示卷,找到你的盘信息) 
(2)  create vdisk file="D:\w7b.vhd" maximum=15000 type=expandable
(在D盘创建主VHD文件,创建了一个动态磁盘,最大容量maximum要计算好,因为一会儿还要创建差分VHD,差分VHD在使用时会占用父VHD文件定义的最大容量) 
(3)  select vdisk file="D:\w7b.vhd"   
(4)  attach vdisk     (连接虚拟磁盘文件) 
(5)  create partition primary  (创建主分区) 
(6)  assign letter=L  (分配驱动器号L 并装载,这里的 L  只是临时用用。) 
(7)  format fs=ntfs quick label=vhd  (快速格式化为ntfs,设置卷标为vhd)
(8) exit (退出DISKPART工具)

B.将windows7 灌装到刚才创建的VHD里面。
进入imagex.exe所在的目录,这里我们将imagex.exe放在启动u盘跟目录的。

(1) imagex.exe /info E:\sources\install.wim 
E:\sources\install.wim 是windows7安装光盘的路径。【这里是u盘】
(用U盘上的imagex软件查看windows7安装光盘中所含的版本,记住版本号 image index="n",我这里的Ultimate版是5) 

(2)imagex.exe /apply E:\sources\install.wim 5 L:\
(用U盘上的imagex软件解压windows7 Ultimate版到虚拟磁盘的挂接点L盘--上面设定的盘符。)

到这里,母盘的制作就完毕了,下面将添加启动信息到系统,启动刚才灌装进去的Windows7.

3. 添加启动信息,设置XP的启动信息。
 
(1)  bcdboot L:\windows /s
(向主分区中写入刚才灌装的Windows7的boot信息,L盘就是刚才灌Windows7那个盘。)
(2)(更新系统分区上的主启动代码,由NTLDR切换到BOOTMGR)
C:
Cd boot
Bootsect.exe /nt60 sys
(3)还原XP的启动项
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 (查看是否已经添加成功)

到这里 您已经具备了具有XP和Windows7共存的双系统了。Windows7实际存在于W7b.vhd这个文件里面。
你可以启动到Windows7系统里面,安装一些驱动和常用的软件,等等。
下面将创建差分VHD,实现类似影子系统的还原功能。

4.创建差分VHD,实现类似影子系统的还原功能

和前面一样。利用U盘启动计算机,在出现,选择windows7的安装语言的界面,停下,按Shift+F10 调出命令行界面。
(1)  diskpart       (打开diskpart) 
(2)  list volume    (显示加载的卷列表) 
(3)  create vdisk file="D:\w7d1.vhd" parent="D:\w7b.vhd" (创建差分VHD,主VHD设置成刚才创建的) 
(4)  exit            (退出diskpart)
(5)  copy D:\w7d1.vhd D:\w7d1.vhd.bak  (备份差分VHD文件,非必须) 


5.为差分VHD添加引导信息到系统。

(1)bcdedit
列出所有的启动项信息,找到刚才添加进去的母盘的项目,找到它的identity ID
假如为611FD78F-03D4-4D94-81BA-30DB9600CDA9
(2)bcdedit /copy {611FD78F-03D4-4D94-81BA-30DB9600CDA9} /d "Windows7-2"
拷贝这个母盘的项目,再做修改,设置成刚刚创建的差分VHD信息。
这里执行成功以后会返回一个类似于{38B5682A-4CA0-49D7-83A8-87F75CE85127}的SID,下面将用到。
(3)bcdedit /set {SID} description "Windows7-2"
(4)bcdedit /set {SID} device vhd=[D:]"\W7D1.vhd"
(5)bcdedit /set {SID} osdevice vhd=[D:]"\W7D1.vhd"
(6)bcdedit /set

到这里,您已经具有3个启动项了.XP,Windows7(母盘),Windows7-2(差分盘。)
整个过程基本结束。

如果您已经有了XP,或者是只想将Windows7装到VHD里面 不打算使用差分硬盘,等等,可以参考整个过程,略去一些步骤就好了。

以下是一些补充。
1.我更改了母盘,差分VHD的子系统还能启动吗?
按照很多文档的说法,母盘的更改,会导致基于该盘的子盘无法使用。
但实际使用中发现,如果我启动到母盘里,更新某个软件,子盘还是可以启动,但母盘的更改没有反应到子盘里面。
如果你需要将母盘的更改反应到子盘,可以再次执行(4)里面的步骤,如果创建的差分VHD位置和名字未变,就不用再用BCDEDIT去整启动项了。
如果改了名字,就需要了。
注意,如果你更改了母盘的大小,子盘将不能再使用。比如发现母盘空间不足,在DISKPART里面 使用了
EXPAND VDISK命令扩展母盘的大小,则子盘必须重新创建了。

2.子盘的大小怎么计算,怎么扩展空间?
子盘的可用大小=母盘的可用大小。不能单独设定子VHD的大小。
在DISKPART里面 先Select 母盘的文件,再 EXPAND VDISK命令扩展母盘的大小,子盘必须重新创建。


3.我在子盘执行了某些更改,我需要合并VHD到母盘。
在DISKPART里面 先Select 子盘的文件,再 Merge Vdisk Depth=1 命令合并即可。

4.相关的VHD文件的实际大小等问题。
在Windows XP 里面,你看到
VHD文件大小就是实际大小,比如前面创建了最大容量为15G的母盘,但实际用了5G,那么它就是5G.
差分VHD也是实际的大小,不会是之前设置的容量。
在Windows 7 母盘启动进去,你看到
差分VHD也是实际的大小,不会是之前设置的容量;但母盘VHD文件大小将显示为当时设定的母盘最大容量。
在Windows 7 子盘启动进去,你看到
母盘VHD也是实际的大小,不会是之前设置的容量;但子盘VHD文件大小将显示为当时设定的母盘最大容量。

5.实现简单的还原
删除 子VHD文件,再次执行(4)里面的步骤即可。参考补充1.
你也可以做成Bat脚本,每次开机都是新的子VHD,实现每次还原。个人觉得没有太大必要。

 

×××××××××××××原创内容的分割线××××××××××××××××××××××

 

下面是相关的一些问题。(来至于网络或者相关文档。非原创,也没有实际测试过。)

1 从VHD启动,还需要哪些必备的条件?
对于VHD启动本身,对硬件并没有多少要求,只能能运行系统即可。不过对于软件方面来说,系统必须是以下版本,
Windows 7 Enterprise
Windows 7 Ultimate
Windows Server 2008 R2
XP和Vista是不行的,因为驱动问题。而WIn7 的版本必须是 企业版之上,这个策略限制,如果版本不对的话,会提示不支持。

2 从VHD启动之后的系统,到底是运行在虚拟机上?还是直接运行在物理硬件之上?
是运行在物理硬件上。
在Win7以及WIn2008 R2 中的引导程序和系统本身都包含了对VHD文件的读写(虚拟)驱动程序,以及虚拟的VHD磁盘控制器。
不要被这个虚拟所误导,这里指的是模拟硬件,比如最常见的虚拟光驱。
因此我们可以在启动计算机的时候,访问VHD并且从其上启动;也可以在Windows 7中直接创建、加载和卸载VHD文件。
不过行为有些不同,这些驱动是在系统内核中的,系统本身也会知道自己运行在VHD文件上。
因此,会把虚拟内存文件放到非VHD磁盘的 物理磁盘上,也不会写入到VHD内部。

3、是否会有性能的损失?
会有一些损失,但很小可以忽略。
主要原因是对文件系统读写访问的时候,需要经过额外的一层VHD读写驱动的解析,这里面有一些微量的I/O性能开销,
但是跟虚拟化的情况相比,性能基本上接近了真机。
下图是在网上找到的测试资料,有一组直接读取硬盘和读写VHD的比较,性能差别微乎其微。
【图2 VHD性能】

 

4、是否可以挂接X64和X86 系统?
可以。只要你的硬件支持。 在启动引导中添加相应的条目即可。


下面是VHD补充介绍,来至网络。
一、VHD 文件有哪些不同的类型?
  VHD 文件分为三种类型,可以使用 Hyper-V 管理器或在 Windows 7 中使用Windows磁盘管理工具创建这些文件类型:
  1. 固定 VHD。固定 VHD 文件被分配的虚拟磁盘大小为创建 VHD 时指定的虚拟磁盘大小。例如,如果创建的虚拟硬盘大小为2 GB,系统将创建一个大小约 2 GB 的文件,其中部分空间用于内部 VHD 结构。 固定VHD的大小不会随着向虚拟硬盘写入数据而变化。

  2. 可扩展或动态 VHD。在任何给定时间,可扩展或动态 VHD文件的大小均与写入该文件的实际数据大小相同。随着写入更多的数据,该文件也会动态增加。 例如,支持 2 GB虚拟硬盘的文件最初在主机文件系统中的大小约为 2 MB。随着不断向此虚拟硬盘中写入数据,文件逐渐增大,直到达到 2 GB的容量上限。

  3. 差异 VHD。差异 VHD 类似于动态 VHD,但只包含相关父虚拟磁盘的修改后的虚拟磁盘块。 差异 VHD链接到特定的父VHD,称为子 VHD。 父 VHD 文件为只读文件;所有修改都是针对子 VHD 进行的。 父 VHD 的 VHD文件类型可以是这三种VHD 类型中的任意一种,包括另一个差异 VHD。 多个子 VHD 文件可形成一个差异链。

  二、为什么建议将固定 VHD 文件用于生产中?
  建议将固定 VHD 文件用于生产的原因如下:
  " 由于不需要动态扩展 VHD 文件,因此 I/O 性能是三种 VHD 磁盘类型中最高的。 同时,如果向固定VHD文件进行写入操作,不会因为动态 VHD 要求扩展而使 VHD 文件的基础主机卷用完所有可用磁盘空间而失败。

  " 动态和差异 VHD 文件取决于多个数据写入操作以及内部块分配信息,如果未完成主机卷和物理磁盘上 VHD 文件的所有I/O操作并且未将其保存在物理磁盘上,这些信息可能会变得不一致。当基础磁盘用完全部存储空间或系统突然断电时,便可能会出现这种情况。

  三、什么时候适用于使用动态或扩展 VHD 文件?
  动态 VHD 在以下非生产环境中使用 Windows 映像时非常有用:存储要求较低,并且与 VHD中数据访问的可靠性相比,替换VHD 文件的便利性更具有优势。 例如,测试环境可以将许多动态 VHD存储在网络共享中以节省空间,无需分配固定 VHD格式情况下类似映像中未使用部分所需的存储空间。通常,测试环境可以轻松重建,也可以重新生成用于测试的 VHD 映像。 将较小的动态VHD文件从网络共享复制到本地磁盘时,速度比传输同等最大大小的固定 VHD 文件更快。 如果能够从其他资源重新生成动态VHD的全部内容,并且关键数据存储在动态 VHD 以外的其他卷中,则可以考虑在生产环境中使用动态 VHD。

  四、当子级差异 VHD 的父 VHD 更改时会出现什么情况?
  子级差异 VHD 包含特定父 VHD 中的修改后的数据块。 如果父 VHD 发生更改或替换为具有相同文件名的其他VHD文件,则父 VHD 和子 VHD 之间的块结构将不再匹配,并且子 VHD 的内容也会破坏。

  五、差异 VHD 的父级是否可以位于与子级不同的卷或远程共享上?
  对于本机 VHD 启动,子级差异 VHD 到父 VHD文件的链接要求这两个文件位于同一个卷中。即使父磁盘和子磁盘驻留在同一本地磁盘,也无法驻留在不同的卷中。 附加本机 VHD启动之外的VHD(如映像管理操作)时,差异磁盘的父级可以位于其他卷甚至是远程共享中。

  六、"创建 VHD"和"附加 VHD"有哪些功能?
  磁盘管理工具(DiskPart 命令行工具和磁盘管理控制台)都支持创建、附加和分离操作。"创建VHD"能够按照选项指定的类型和大小创建新的 .vhd 文件。 可以将新创建的 .vhd 文件看作与原始磁盘类似。"附加VHD"操作要求存储系统将 VHD 用作连接到系统的磁盘。 在执行"附加 VHD"操作后,可以使用磁盘管理工具在VHD内创建一个或多个磁盘分区,并在 VHD 内格式化 NTFS 文件系统。 如果在执行"附加VHD"操作时,VHD已有磁盘分区和文件系统卷,则系统会给 VHD 内的卷分配一个驱动器号,并且该卷将处于可用状态,这与您向 USB连接器中插入 USB磁盘驱动器时出现的情况类似。 "附加 VHD"有时称为"显示 VHD",这是因为VHD中的文件系统会被分配一个驱动器号并且显示出来,而且可供使用。 (也许可以将显示 VHD比喻为潜水艇浮出水面并且可以看到。)

  执行"附加 VHD"操作后,系统将为 VHD 中的所有卷分配驱动器号,并且使其在全局命名空间中可见。 是否可以看到附加的VHD卷并不限于当前用户上下文。 所有用户都能够看到附加的 VHD,就像查看物理磁盘 七、VHD 可以使用哪些文件系统?

  如果已有一个 .vhd 文件,则可以将该 .vhd 文件保存在任何 FAT、ExFAT、NTFS 或 UDFS卷中。但是,只能附加位于 NTFS 卷的 VHD。 对非 NTFS 卷上的 VHD 执行附加操作将失败。

  创建 VHD 时,可以在 VHD 中创建一个或多个分区,并且可以使用 FAT、ExFAT 或 NTFS格式化这些分区。附加操作可使 VHD 中的一个或多个卷可用。

  八、Windows 7 是否可以附加位于远程共享的 VHD?
  是的,可以附加位于远程 SMB 共享的 VHD 文件,并且该 VHD 文件将显示为本地磁盘。 不支持其他远程文件系统,如NFS或 FTP。 系统将为包含在 VHD 中的卷分配驱动器号,并且这些卷可供本地系统中的所有用户访问,具体取决于VHD卷内数据的安全权限。 远程 VHD 附加支持远程映像管理。

  九、是否可以对 VHD 文件使用 NTFS 压缩或加密?
  在主机卷上用 NTFS 压缩的 VHD 文件将无法作为虚拟硬盘附加。 在主机卷上用加密文件系统 (EFS) 加密的VHD文件也无法作为虚拟硬盘附加。 在主机卷上压缩或加密的 VHD 文件将无法用于 VHD 本机启动。 但是,如果提供其他支持,则VHD内的卷可以使用压缩和加密。

  十、是否可以使用 BitLocker 加密整个 VHD?
  VHD 文件可以保存在受 BitLocker 保护的主机卷上,但是位于 BitLocker 保护卷上的VHD文件无法用于本机启动。 对包含在 VHD 内的卷启用 BitLocker 不是支持的配置。

  十一、什么是嵌套 VHD 以及什么是嵌套限制?
  VHD 是主机卷上的文件。 例如,VHD 文件 c:\vhd\ExampleFixed.vhd 表示位于 c: 卷上\vhd目录下的固定 VHD 文件。 在 ExampleFixed.vhd 中,可以创建一个分区,初始化NTFS文件系统卷,然后临时分配驱动器号 m:。 还可以在 m:\vhd\AnestedFixed.vhd 下创建一个新的 VHD文件。第二个 vhd 文件是在第一个 vhd 文件中的文件系统卷上创建的。 这就是嵌套 VHD。对c:\vhd\ExampleFixed.vhd 执行"附加 VHD"操作将使 m: 卷可用。而对m:\vhd\AnestedFixed.vhd 执行"附加 VHD"操作将使另一个卷(例如 "n:")可用。 最多只能附加 2层嵌套VHD。这意味着,可以在另一个附加 VHD 内再附加一个 VHD。 但是,如果在另一个已经是另一个附加 VHD 的附加 VHD中附加VHD,则会失败。

十二、是否可以将两个附加 VHD 配置为动态磁盘?
  动态磁盘是一种针对动态存储初始化的磁盘,它包含动态卷,如简单卷、跨区卷、带区卷、镜像卷或 RAID-5 卷。 附加的VHD不能配置为动态磁盘
一样。VHD只能由拥有卷管理权限的用户(默认情况下仅授予管理员)附加,因为附加磁盘相当于使磁盘或卷联机。


下面是相关资料:
参考:
Understanding Virtual Hard Disks with Native Boot
http://technet.microsoft.com/en-us/library/dd799282(WS.10).aspx

Windows 7对VHD文件的内建支持
http://blogs.technet.com/fyu/archive/2009/01/19/windows-7-vhd.aspx

从VHD文件启动计算机
http://blogs.technet.com/fyu/archive/2009/01/19/vhd.aspx

深入研究Windows 7中的Virtual Hard Disk (VHD) 技术
http://blogs.technet.com/fyu/archive/2009/01/21/windows-7-virtual-hard-disk-vhd.aspx

再谈从虚拟磁盘文件启动计算机
http://blogs.technet.com/fyu/archive/2009/02/01/3195439.aspx

BCDboot 命令行选项
http://technet.microsoft.com/zh-cn/library/dd744347(WS.10).aspx

BCDEdit 命令行选项
http://technet.microsoft.com/zh-cn/library/cc709667(WS.10).aspx


工具
Windows(R) 7 的 Windows(R) 自动安装工具包 (AIK)
http://www.microsoft.com/DOWNLOADS/details.aspx?familyid=696DD665-9F76-4177-A811-39C26D3B3B34&displaylang=zh-cn

posted on 2009-12-04 16:53  GinoHuo  阅读(6698)  评论(0编辑  收藏  举报