VHD, Microsoft Virtual Hard Disk format, 微软开发的虚拟磁盘文件(VMware开发的虚拟磁盘文件为VMDK)。使用微软的Virtual PC、Virtual Server、Hyper-V均可对此格式进行操作。

VHD Native Boot, Windows 7 和 Windows Server 2008 R2中的新功能,可以使windows系统直接从物理硬盘上的VHD文件启动,启动后,VHD中的OS直接访问硬件,不是运行在虚拟机环境中。而且与普通硬盘启动类似,可以在VHD中安装驱动程序,包括显卡在内的所有硬件均可正常工作。使用Virtual PC等工具创建的虚拟机,操作系统也是保存在VHD文件中,操作系统在虚拟机中的启动可以称之为VHD Virtual Boot。

Windows 7 和 Windows Server 2008 R2支持在磁盘管理中直接创建和打开VHD文件,如下图,在Windows 7中,最多同时挂载512个VHD文件。

p_w_picpath

VHD中的系统的页面文件(page file)是保存在物理硬盘上的,防止造成过多的碎片,并提高性能。

支持从VHD启动的系统有:Windows 7 Enterprise、Windows 7 Ultimate、Windows Server 2008 R2。

从VHD启动的计算机,不支持系统休眠(Hibernation),不支持over Server Message Block(SMB)shares。保存VHD文件的卷,无法被Bit-Locker加密。VHD文件的父分区不支持volume snapshot。VHD不能被配置为动态磁盘,也不支持创建软件RAID。

VHD包含三种类型:Fixed hard-disk p_w_picpath, Dynamic hard-disk p_w_picpath(size<2TB), Differencing hard-disk p_w_picpath。 推荐使用Fixed hard-disk p_w_picpath, 稳定性和性能相对提高。

要使用VHD Native Boot,前提条件是,在硬盘的引导扇区内必须有windows7版的boot-environment files 和 Boot Configuration Data (BCD) store。例如,在双系统环境中,如果计算机已经安装了windows 7或者server 2008 R2,那么这一点不需要担心,完全满足条件。但是如果计算机上已经安装的操作系统是XP,那么需要额外的配置才能支持第二个系统从VHD启动。

与VHD Native Boot有关的工具

  • BCDboot ,包含在windows 7和server 2008 R2中, 用于把windows的引导文件写入到硬盘的引导分区内。
  • BCDedit , 包含在windows 7和server 2008 R2中,用于编辑计算机启动时选择系统的引导条目
  • Diskpart , 磁盘分区配置命令
  • ImageX ,用于将wim文件中的内容释放到VHD文件中
  • Windows Deployment Services , 可以将VHD磁盘文件通过WDS部署在计算机硬盘上。

制作万能VHD磁盘文件

所谓万能,是指这个VHD文件可以用于任何硬件平台,不受硬件平台限制。这里以创建Server 2008  R2 Standard的VHD文件为例。

1. 创建一个空VHD磁盘文件,可以利用下图所示的命令行创建新的VHD文件,也可以右击磁盘管理,选择Create VHD,在图形化界面下进行创建。当运行命令行时,一定要以管理员的身份运行。

Diskpart, 磁盘分区配置命令

Create vdisk file=d:\vhd\svr2k8r2.vhd maximum=30270 type=fixed, 命令中指定该VHD文件的保存路径、名称、大小(以M为单位)以及类型为固定尺寸。

p_w_picpath

2. 选择、挂载、分区、格式化VHD文件,同样的,这些步骤也可以在磁盘管理的图形化界面下进行。

Select vdisk file=d:\vhd\svr2k8r2.vhd, 指定要进行操作的VHD文件

Attach vdisk, 挂载指定的VHD文件

Create partition primary, 为刚刚挂载的VHD文件,创建分区,未指定分区大小,说明所有空间分配到一个分区

Assign letter=r, 给此分区分配一个盘符为R

Format quick label=VHD fs=ntfs, 快速格式化上述分区,卷标命名为VHD,格式为NTFS

p_w_picpath

格式化完成之后,打开磁盘管理和资源管理器,可以看到该磁盘,与在计算机上连接了第二块磁盘的用户体验一模一样。

p_w_picpath

p_w_picpath

3. 利用ImageXVHD安装系统 ImageX包含在WAIK工具包内(WAIK工具包下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=5753,下载并安装后,到目录C:\Program Files\Windows AIK\Tools下将ImageX拷贝到合适的位置即可。但是,需要注意的是,ImageX的版本有32位、64位和安腾64位的区别,需要根据即将安装的操作系统的版本到相应x86/amd64/ia64目录下选择,比如,我们即将安装的是64Server 2008 R2,需要选择C:\Program Files\Windows AIK\Tools\amd64下的ImageX可直接拷贝到C:\Windows\System32下,这样以后只要打开命令行,就可以使用这个命令了)。

Imagex /apply d:\vhd\install.wim 1 r:

Install.wim, 指Server 2008 R2 Standard系统安装盘中的install.wim文件, 内包含Windows 2008 R2各个版本的安装镜像,如下图:

1, 因Windows 2008 R2安装光盘中的install.wim文件中包含了多个版本,所以要指定即将要释放到VHD中的版本,索引号1,指标准版,完全安装。要确定即将安装的操作系统的索引号,可以使用DISM命令查看,详见博文:Windows 7部署(二):DISM命令简

R, 指VHD磁盘对应的盘符。

p_w_picpath

p_w_picpath

命令完成后,可以看到R盘中已经包含了下列文件夹

p_w_picpath

4. 卸载VHD,然后可以对此VHD文件做个备份,留作以后用,这个VHD可以运行在任何平台上,与硬件无关。

p_w_picpath

应用场景一:双系统,第二个操作系统运行在VHD中

假设一台计算机已经安装了Windows 7,现在需要安装第二个操作系统Windows Server 2008 R2 Standard

方法一:使用系统的安装光盘或U盘引导,并安装系统到VHD中

1. 使用安装光盘或U盘引导

2. 当出现下面这个窗口时按键“Shift+F10”,则出现命令行界面。

p_w_picpath

3. 在命令行中相继输入下列命令:

Diskpart, 磁盘分区配置命令

List disk, 显示计算机的磁盘信息,图示只有一个磁盘Disk0

Select disk 0, 选择想要存放VHD文件的磁盘

List part, 显示当前磁盘下的分区信息,图示当前磁盘有三个分区,如果显示没有分区,则需要使用“create partition primary”命令创建分区

Select part 3, 选择想要存放VHD文件的分区

Detail part, 显示所选分区的详细信息,关键是需要获得Ltr, 即存放VHD文件分区 的盘符。如果LTR为空,则需要运行命令“assign letter=X”为该分区分配一个盘符,X指分配的盘符。

p_w_picpath

4. 使用下列命令创建、挂载VHD

p_w_picpath

5. 关掉命令行窗口,点击Next进行安装

6. 在“Which type of installation do you want”界面,选择“Custom”

7. 在“Where do you want to install windows”界面,一定要选择刚刚创建的VHD文件形成的驱动器。点击Next以完成系统安装。

p_w_picpath

8. 安装完成之后,在启动计算机时,会出现熟悉的双系统选择界面。

p_w_picpath

9. 如上图所示,默认登录的系统为Windows Server 2008 R2,如果想更改为Windows7,登录到任何一个系统下后,右击Computer,  Properties,Advanced System Settings,单击Startup and Recovery 下的Settings,更改Default operating system为Windows 7, 在这里也可以自定义倒计时时间。

p_w_picpath

方法二:在现有系统下操作

1. 首先按照“制作万能VHD磁盘文件”小节中的介绍创建一个VHD磁盘文件,并将系统利用ImageX导入到该VHD磁盘文件中。将此文件拷贝到合适位置

2. 运行以下命令,创建第二个系统的启动条目,并将此条目指向刚刚创建的VHD文件。

Bcdedit /copy {default} /d “SVR2K8R2 in VHD”, 指定第二个系统的启动条目名称为“SVR2K8R2 in VHD”,此命令执行后,会返回一长串数字,称为GUID。

Bcdedit /set {guid} device vhd=[e:]\svr2k8r2.vhd, 此命令中,GUID需要用上面返回的一长串数字代替,e:, 代表的是VHD文件的存放路径

Bcdedit /set {guid} osdevice vhd=[e:]\svr2k8r2.vhd

Bcdedit /set {guid} detecthal on

Bcdedit /default {guid}

p_w_picpath

应用场景二:裸机下部署VHD Native Boot

在裸机下使用VHD native boot 启动系统,需要用到Windows PE盘,至于如何制作 Windows PE盘,请查看另一篇博文: 制作可引导Windows PE盘,   http://techmsc.blog.51cto.com/1719384/1113590http://blog.sina.com.cn/s/blog_bf69687f0101atu7.html

1. 首先使用Windows PE光盘启动计算机,并对计算机的硬盘进行分区、格式化操作。

在创建分区时,首先需要创建一个大小为200M的小分区s,这个分区就是引导分区。剩下的空间,创建第二个分区。

 

p_w_picpath

p_w_picpath

2. 将制作好的VHD磁盘文件拷贝到计算机的本地硬盘上

p_w_picpath

p_w_picpath

3. 挂载VHD磁盘文件

p_w_picpath

4. 使用BCDboot工具,制作引导分区

cd d:\windows\system32

bcdboot d:\windows /s s:

5. 卸载VHD磁盘文件,并关闭命令行窗口,计算机将会重启,并通过VHD引导, 操作完成。

p_w_picpath

 

VHD下系统的性能与物理硬盘上系统的性能比较

据微软官方测试,VHD性能非常接近物理硬盘性能。

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

其他参考资料:

Understanding Virtual Hard Disks with Native Boot

http://technet.microsoft.com/en-us/library/dd799282(WS.10).aspx

Walkthrough: Deploy a Virtual Hard Disk for Native Boot

http://technet.microsoft.com/en-us/library/dd744338(WS.10).aspx

Add a Native-Boot Virtual Hard Disk to the Boot Menu

http://technet.microsoft.com/en-us/library/dd799299(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