从VHD启动计算机如果说你对在Windows 7中映射和使用VHD文件无动于衷,那么,我相信从VHD启动计算机一定会抓住你的眼球。
我之前提到了,在Windows 7中,微软把VHD的驱动内置进了操作系统,也包括在了Windows 7的引导程序中。这也就是说,在启动计算机的阶段,Windows 7的引导程序可以大摇大摆的直接访问VHD文件,并且启动VHD中安装的系统。
慢着,什么是Windows 7的引导程序?简单地说,引导程序就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备(加载必要的驱动程序)、建立内存映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。我们在裸机上安装Windows 7时,首先做的,就是把Windows 7的引导程序写入磁盘的特殊位置。Windows 7的引导程序带有VHD驱动,因此可以从VHD启动。
要完成从VHD启动计算机,需要以下几个步骤:
你必须得让VHD中有一个操作系统先。有几种办法,可以用Virtual PC或者Virtual Server安装一个操作系统在VHD文件中,然后运行Sysprep,接着关闭虚拟机,这个VHD文件就可以用了。运行Sysprep是必须的,否则VHD下次启动时,仍旧加载虚拟机环境下的驱动程序,会导致蓝屏。
如果你想玩一个高级的,可以使用ImageX命令,把Vista的镜像,或者其它的磁盘镜像直接灌入VHD文件,下面是一个具体的演示。这些命令把Vista镜像灌入一个VHD,并且使用WinPE在物理机的磁盘上载入Windows 7的引导程序,用Windows 7引导程序启动硬盘上的VHD文件,注意:物理机本身没有安装Windows 7!
1. 用Diskpart创建VHD这里就不在赘述了,前面一段有这些命令。接着前面的一段命令,我们首先使用ImageX把一个操作系统的镜像,灌入VHD文件。WIM格式文件是Vista及以后版本Windows的安装镜像,在安装DVD中可以找到。
cd \d "c:\program files\<version>\tools\<architecture>\"imagex /apply <wim文件的路径> 1 r:\2. WIM镜像被灌入VHD之后,使用Diskpart把VHD文件从当前的系统中卸载。
diskpartselect vdisk file=c:\windows7.vhddetach vdiskexit3. 把这个准备好的VHD文件放到一个网络共享中备用。
net use y: \\network_share\copy c:\windows7.vhd y:\network_share\vhd\4. 使用Windows 7版本的WinPE光盘启动你的试验计算机,并运行如下命令把当前磁盘上的分区和数据清空。(注意,此操作会导致无法挽回的数据丢失,请一定要备份数据先)
diskpartsel disk 0clean5. 接下来用Diskpart创建两个分区,分别是200M的S盘和默认剩余硬盘空间尺寸的C盘。S也成为系统分区,用于保存Windows 7的引导程序和相应必须的一些文件。然后把刚才放到网络共享的VHD文件,复制到C盘的根目录。
create partition primary size=200format quick fs=ntfsassign letter=sactivecreate partition primaryformat quick fs=ntfsassign letter=cexit6. 用Diskpart命令加载VHD到当前的WinPE环境下,访问VHD中的Windows System32目录,并执行bcdboot命令完成启动所必需的初始化配置。bcdboot这个命令很神气,文档中的具体描述是:Use the BCDboot tool, located in the \System32 directory of the Windows 7 VHD, to copy the boot-environment files from the\Windows directory in the VHD to the system partition. The BCDboot tool will create the BCD configuration to boot from the VHD. For more information about the BCDboot tool, see BCDboot Command-Line Options in the OEM Preinstallation Kit (OPK) User's Guide or the Windows Automated Installation Kit (Windows AIK) User's Guide.
diskpartselect vdisk file=c:\windows7.vhdattach vdiskexitcd v:\windows\system32bcdboot v:\windows /s s:7. 把WinPE光盘从光驱中移走,重启试验计算机,你会发现系统直接进入了VHD里面的Windows 7!
8. 如果你想在已有的Windows 7环境下配置配置一个从VHD的多启动选项,可以使用BCDEdit命令。(具体操作步骤在此)
上图是从VHD启动的大致结构,请注意VHD中操作系统的页面文件和Crashdump,不是包含在VHD中的,他们被保存在VHD文件的同一个目录中。
我们也需要了解一下VHD启动的一些注意事项和局限性:
1. 从VHD启动是有版本限制的,目前(2009年1月)的文档指出只有Windows Server 2008 R2、Windows 7商业版及以上版本,才支持此功能,未来正式发布时可能会有变化,敬请留意。
2. UDFS文件系统暂时不被支持(UDFS是什么?不支持也罢…)
3. 启动用的VHD文件,不能保存在压缩或者加密的NTFS磁盘之上(这一点很多人会忽略)
4. 根据一些朋友的反馈,动态的VHD文件无法启动,需要在建立vhd是设置成立即分配才可以从vhd启动
5. 如果你的物理硬盘是RAID格式,则必须要在VHD中的操作系统镜像中注入RAID的驱动程序,可以使用peimg命令。这个我没有测试过,感谢yueyezhan的反馈
性能性能性能大家一定关心VHD的性能问题。相比物理磁盘,VHD的读写I/O性能指标对比如下,测试数据根据Windows 7 Build 6801获得,这些数据在近期的WinHEC大会上获得的。我们可以发现,相对于物理硬盘,VHD的读写开销非常小,只有在进行连续区块写入操作时,才跟物理硬盘有较明显的性能差异。
引用一些网友关于VHD的描述:
实验成功!原系统是win7X86,灌装了一个X64的win7,在虚拟机里vhd上的X64win7成功启动速度上感觉不出有差异已经成功从VHD启动 从磁盘管理可以看到当前系统盘C盘也就是20G的DISK2当然是VHD的啦,呵呵.启动和运行速度和真机差不多吧~~结论就是很好很强大,有着和真机几乎一样的速度,可以照完所有3D游戏,说白了用起来和真机几乎没任何区别。Win7让多系统变得简单,根本不用为分区烦恼,一个系统就一个vhd镜像,蹦了复制一份替换即可,就像用虚拟机一样。当然虚拟的系统貌似只能是Win7及以上系统如server2008R2。企业应用场景和未来展望个人用户的多启动解决方案
企业操作系统的批量部署
接合差异磁盘的无盘(小盘)工作站,可以替代硬盘保护卡