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文件。
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为单位)以及类型为固定尺寸。
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
格式化完成之后,打开磁盘管理和资源管理器,可以看到该磁盘,与在计算机上连接了第二块磁盘的用户体验一模一样。
3. 利用ImageX向VHD安装系统 。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目录下选择,比如,我们即将安装的是64位Server 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磁盘对应的盘符。
命令完成后,可以看到R盘中已经包含了下列文件夹
4. 卸载VHD,然后可以对此VHD文件做个备份,留作以后用,这个VHD可以运行在任何平台上,与硬件无关。
应用场景一:双系统,第二个操作系统运行在VHD中
假设一台计算机已经安装了Windows 7,现在需要安装第二个操作系统Windows Server 2008 R2 Standard
方法一:使用系统的安装光盘或U盘引导,并安装系统到VHD中
1. 使用安装光盘或U盘引导
2. 当出现下面这个窗口时按键“Shift+F10”,则出现命令行界面。
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指分配的盘符。
4. 使用下列命令创建、挂载VHD
5. 关掉命令行窗口,点击Next进行安装
6. 在“Which type of installation do you want”界面,选择“Custom”
7. 在“Where do you want to install windows”界面,一定要选择刚刚创建的VHD文件形成的驱动器。点击Next以完成系统安装。
8. 安装完成之后,在启动计算机时,会出现熟悉的双系统选择界面。
9. 如上图所示,默认登录的系统为Windows Server 2008 R2,如果想更改为Windows7,登录到任何一个系统下后,右击Computer, Properties,Advanced System Settings,单击Startup and Recovery 下的Settings,更改Default operating system为Windows 7, 在这里也可以自定义倒计时时间。
方法二:在现有系统下操作
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}
应用场景二:裸机下部署VHD Native Boot
在裸机下使用VHD native boot 启动系统,需要用到Windows PE盘,至于如何制作 Windows PE盘,请查看另一篇博文: 制作可引导Windows PE盘, http://techmsc.blog.51cto.com/1719384/1113590 或 http://blog.sina.com.cn/s/blog_bf69687f0101atu7.html。
1. 首先使用Windows PE光盘启动计算机,并对计算机的硬盘进行分区、格式化操作。
在创建分区时,首先需要创建一个大小为200M的小分区s,这个分区就是引导分区。剩下的空间,创建第二个分区。
2. 将制作好的VHD磁盘文件拷贝到计算机的本地硬盘上
3. 挂载VHD磁盘文件
4. 使用BCDboot工具,制作引导分区
cd d:\windows\system32
bcdboot d:\windows /s s:
5. 卸载VHD磁盘文件,并关闭命令行窗口,计算机将会重启,并通过VHD引导, 操作完成。
VHD下系统的性能与物理硬盘上系统的性能比较
据微软官方测试,VHD性能非常接近物理硬盘性能。
其他参考资料:
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