我64位的windows 7 ultimate操作系统,由于现在微软的服务器产品基本上都需要安装在64位平台上,用VPC很多虚拟环境就无法搭建。虽然说桌面端虚拟化有VMware Workstation可以模拟64位的硬件环境,但有时候不方便,尤其给客户展示微软技术的时候。。。。另外,Hyper-v的性能令人垂涎。为了便于测试,需要在自己的本本上安装64位的Windows 2008 R2,用它的Hyper-v等功能。目前的问题是,我本本就2个分区,C和D,实在不愿意迁移数据重新给08 R2开辟空间,所以想到了使用VHD来作为新系统的安居地。
       实现将VHD的里面的系统作为第二系统过程非常简单。大致流程仅两步,第一步将做好的系统的VHD复制到某个分区,第二步使用BCDEdit工具添加一个到该VHD的启动项。过程如下:
       我直接在另外一台Hyper-v服务器上搭建了一个全新的Windows 2008 R2 64位虚拟机(需要执行Sysprep,否则后续引导此VHD时极有可能出现蓝屏——估计直接删除Hyperv的虚拟机附件也可以吧),将该Win2k8R2.VHD文件复制到了D盘下,完成了第一步;然后使用管理员权限打开CMD命令窗口,使用BCDEdit工具完成启动项的添加。
依次执行如下命令:
bcdedit (查看当前引导配置信息)、
01
bcdedit /copy {current} /d "Win2K8R2-VHD" (复制当前系统的启动信息作为VHD的启动信息)
02 
bcdedit (查看复制后的当前引导配置信息)
03 
bcdedit /set {9739785d-eccf-11de-9dc5-bad31531f48e} osdevice vhd=[d:]\Win2K8R2.vhd (更改VHD的启动信息,使其指向VHD文件), 04
bcdedit (查修改后的当前引导配置信息)
05 
 
最后重启电脑,就会发现多了“Win2K8R2-VHD”这个启动菜单选项。
      但是选择“Win2K8R2-VHD”准备进入windows 2008 R2并不顺利,刚到加载操作系统的滚动条,就蓝屏了。一大串英文,大致意思是VHD所在的主机分区空间不够云云。刚开始没注意,还以为是虚拟机驱动和硬件不兼容导致,因为对Win2K8R2.vhd没有执行sysprep系统封装。于是回头再做了次sysprep,不过问题依旧,这才好好看了下蓝屏信息:不对呀,我D盘剩余空间有40多G呢,VHD文件才7G多,怎么不够?!只好在Hyper-v机器上再次检查VHD模板,VHD做的是动态磁盘,上限是65G,推测是从Win2K8R2.vhd启动的时候,将需要D盘的65G。果然,将D盘30G的数据剪切走后再次启动VHD中的08就正常启动了,功能、性能与直接安装在真实硬盘上的系统没有什么区别,还能启用Hyper-v,效果不错,达到目的。在windows Server 2008 R2系统中看C盘,65G。。Win2K8R2.vhd变成65G了!不过重启电脑进入win7,查看D盘的Win2K8R2.vhd仍然是7G多。有意思,为了避免VHD启动时候占用太大空间,决定下次做个上限小的动态磁盘替换掉这个。
      其他:关于支持VHD启动,可能只有企业版以上的Win7和win2008才行;制作VHD启动方法有很多,直接使用Hyper-v或VPC事先创建,使用微软的p_w_picpathx或第三方的工具在VHD内灌装Win7和win2008都可以。有兴趣的可以看看这些大大们的文章 《深入研究Windows 7中的Virtual Hard Disk (VHD) 技术》(原理和概念)、[虚拟化实战]无需借助虚机安装,就能从VHD原生启动 》(个人使用)、《 全程图形化创建VHD系统及差分启动实验测试》(差分磁盘)、 利用WDS实现零接触部署Windows 7 VHD(大规模应用之一)、
微软BCD官方文档 ,相信使用VHD启动可以带来很多实用和有意思的系统部署解决方案。