好多年前,应景写过如何制造一个包含Windows 8或者Windows Server 2012的VHD,并且在Windows 7或者Windows 8环境中直接启动到VHD中的系统。
换了一家公司后,一直忙于学习新的系统,但仍然关注Windows的进展。时间总是过得很快,感觉还是不久以前给全国的合作伙伴讲Windows Server 2012,转眼间Windows 8.1 Preview / Windows Server 2012 R2 Preview 就已经出来了。Windows 8.1也就罢了,Windows Server 2012 R2 还是有不少新特性可以看看的,以后有机会可以另起一贴介绍。
言归正传,介绍一下如何创造一个可以直接启动的Windows 8.1 / Windows Server 2012 R2的VHD。
之前用的是WIM2VHD.wsf,这是一个把WIM文件转化为VHD文件的脚本,我在几年前介绍过如何完成这一工作,有兴趣可以搜索我之前的Blog。
但是问题在于,这个脚本当年是为Windows 7 / Windows Server 2008写的,而正如我几年前写的,Windows 8 的 Boot Manager重写了,所以使用这个脚本做出来的VHD是无法启动的,必须手动传送一个启动环境给VHD上的系统。具体作法请搜我之前写的内容中bcdboot命令行。
为了解决这一问题,我之前写了一个脚本程序,用于自动挂载VHD磁盘,自动完成传送工作。好消息是,现在这个脚本更新了,变成了一个PowerShell脚本,叫做Convert-WindowsImage.ps1,有关的信息可以在这里查到:http://gallery.technet.microsoft.com/scriptcenter/Convert-WindowsImageps1-0fe23a8f
具体作法我就不废话了,站点上都写得很明白。我想介绍的是在我的 UEFI 启动环境中,出现的问题和解决的办法。
第一个问题,也许你会发现这个PowerShell 脚本无法运行。这需要修改PowerShell的运行策略,可以参考图中命令行。此外,由于这个脚本是从网站上下载过来的,NTFS会记录其文件属性,因此运行时会给出安全提示。
第二个问题,你会发现运行脚本时,在修改bootmgr的时候,提示找不到BCD Store。(ERROR : Could not get the BootMgr object from the Virtual Disks BCDStore.)这个问题是由于UEFI启动环境的目录与传统BIOS方式的不一样,不是boot,而是efi\microsoft\boot,所以脚本会找不到bcd文件,即bcd store。原本想改写一下这位兄弟的PowerShell脚本,但一直真的忙死了,还是在他页面上留几句话算了。
第三个问题,我使用了EasyBCD来添加启动项,但是发现选择启动项无法启动到VHD的操作系统。这是由于使用了UEFI系统,而默认添加的启动项所使用的加载路径是\Windows\System32\winload.exe,需要把它改成\Windows\System32\winload.efi。
使用支持UEFI的Windows 8启动环境的好处是,看上去漂亮多了。
你可以看到更多的启动选项,他们是由硬件 UEFI 提供的启动选项。在这里,我又遇到两个问题。
第一个问题,我点击了EastBCD的Save。实际上,你不点击这个按键,添加的记录也会在。点击了以后,漂亮的UEFI的选项界面不见了,回到了Windows 7以前的字符界面。把美丽的UI还给我!尝试了很久,从重新传送启动文件,到替换bootmgr,都没有用。最后发现,你可以关掉displaybootmenu,终于,美丽的UI又出现在我眼前。要是有个办法可以让妹纸也重新出现在我眼前多好啊!
第二个问题,新加的启动项一般在最后。以前的字符界面还好,内容不多。可是现在图形的启动选项有10几个,你确定每次都有耐心翻到最后?一个字,改!分析了一下,其实也很容易,重新填写displayorder参数就可以了。标记,粘贴到写字板,按照启动项对应的标识符,调整顺序,再贴回命令行,搞定。
Windows 启动加载器 C:\Windows\system32>bcdedit /set {40a7c004-f7af-11e2-b9f8-dd44c2d22392} path \Wi C:\Windows\system32>bcdedit /set {bootmgr} displayorder {current} {40a7c003-f7af |
最后,放一下我的BCD的最终版……
C:\Windows\system32>bcdedit Windows 启动管理器 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) 固件应用程序(101fffff) Windows 启动加载器 Windows 启动加载器 Windows 启动加载器 |