开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2019.04.01
以前,虽然听说过这个特性,但一直没有尝试过。最近有机会尝试了一下,本以为是很难的东西,但实际操作起来,还是很简单的。首先,先解释一下什么是原生VHD启动(NativeVHDBoot)?实际上,Win7可以启动VHD里面的系统,并且里面的系统知道运行在VHD磁盘上。那么VHD是什么?VHD是MS的虚拟硬盘文件,实际上,如果用过VPC,VirtualServer,Hyper-V,WindowsVirtualPC。那么你应该也会知道了。现在大家应该知道这个启动是怎么回事了,如果还没有理解,可以这么想想一下,在Win7内核以及启动引导中,增加了对VHD文件的磁盘控制器的虚拟硬件。
好的,接下来,说说要求和限制要求VHD启动需要依赖一下几点:1.磁盘上至少有2个分区:一个值作为启动的,另一个是用来存放文件的。(注意不要加密)2.包含VHD文件的分区必须拥有足够大的可用空间。(稍后说明)
要强调的是,VHD启动不仅需要Win7的启动引导,还需要Win7系统,即VHD里面的安装的是WIn7或者WIn2008R2。想安装XP是不可能的了。那么,接下来说说制作步骤。整个过程大概分成2部分。1、准备VHD镜像2、部署VHD镜像
1、准备VHD镜像文件
这个部分又分成2中方式,一是从安装镜像中,直接提取系统文件。二是在虚机中安装系统,然后使用sysprep进行封装。
1.1、从安装镜像提取文件这个需要用到Windows(R)7的Windows(R)自动安装工具包(AIK)中的ImageX工具。在开始之前,先说一下,我的实验环境是Win2008R2虚拟机,并且已经安装了Win7的AIK。为了以后的方便,(为了以后),先把安装光盘中的文件复制到硬盘上,例如D:/Sources
首先是建立VHD磁盘,步骤如下:1:在单击开始,输入“Diskmgmt.msc”,启动磁盘管理。
2:单击“显示/隐藏控制台树”(位于“磁盘管理”中)按钮。
3:在“磁盘管理(框线项目)”上右键单击。
4:单击“创建VHD(菜单项目)”。
5:单击“浏览(B)...”,并选择一个虚拟磁盘的保存位置,并起一个文件名,这里是“Test.vhd”,然后单击保存。
6:选择一个磁盘类型,这里选择“动态扩展(D)”。(注:选择哪个都可以,只不过,选择固定的创建起来有点费时,另外,后期可以通过虚拟机的磁盘管理器进行转换。)
7:在“虚拟硬盘大小(S):”输入要创建的虚拟硬盘大小,这里输入“60”单位选择“GB”,然后单击确定。(注:有关这个大小的注意,请看后面)
8:在“磁盘管理”中,右键单击新建的磁盘行头,选择“初始化磁盘(I)”。
9:在弹出的“初始化磁盘”对话框中,选择需要初始化的磁盘,并单击“确定”。
10:右键单击虚拟磁盘的空白区域,选择“新建简单卷(I)...”。
11:按照“新建简单卷向导”中的提示操作,创建一个新的分区。
再来就是提取安装镜像文件
1:单击“开始”,“所有程序”,“MicrosoftWindowsAIK”,单击“部署工具命令提示”,打开PE环境控制台。(如果不这么做的话,会提示ImageX文件无法找到,当然,你也可以指定完整路径)
2:在“管理员:部署工具命令提示”中输入“imagex/apply'D:/Sources/Win7X64/sources/install.wim''Windows7ULTIMATE'g:/”,展开镜像(解释一下,Imagex是WIM的编辑的工具,/apply是解压,'D:/Sources/Win7X64/sources/install.wim'是Win7X64安装盘所在位置(install.wim是固定的),'Windows7ULTIMATE'是Win7版本,这个是必须是影响中已经存在的,可以通过“imagex/info安装镜像WIM文件'D:/Sources/Win7X64/sources/install.wim'”来查看g:/要解压到的位置)
好,到此为止就算解压完镜像文件了。如果你想放入自动应答,让安装程序自动完成一部分。可以现在就做,否则,跳过。
1、定位到虚拟磁盘上的Windows目录下,然后新建一个文件夹,名字是“Panther”(注:一定要是这个名字)2、然后将应答文件复制到这个目录中,并重命名为“unattend.xml”。(注:一定要是这个名字)3、如果应答文件中,使用了其他工具或者批处理文件,请将这些文件复制到对应的路径中。
那么接下来,就是卸载VHD虚拟磁盘文件了
1:打开“磁盘管理”,在虚拟磁盘的行标头上右键单击,选择“分离VHD”。
2:在“分离虚拟硬盘”对话框中单击“确定”,即可分离磁盘了。
1.2使用虚机制作VHD文件其实,使用虚机制作,就是用虚机去来安装系统,然后把VHD文件拿出来的过程。这里我以Hyper-V虚机为例,进行演示。
1、打开“Hyper-V管理器”,在操作中选择“新建”,“虚拟机”。
2、在打开的“新建虚拟机向导”对话框,单击下一步,输入虚机的名字,然后单击下一步。
3、设置分配给虚机的内存,这里输入1024,即1G,然后单击下一步。(注:内存最少可以是512M,最大是物理内存大小,请根据具体情况选择合适大小)
4、配置网络,选择一个可用的网络,如果想配置干净的虚机,可以不设置或者选择一个不能上网的测试网络,免得安装补丁,单击下一步继续。
5、创建虚拟磁盘,可以创建一个新的虚拟磁盘,也可以选择一个现有的,单击下一步继续。(关于虚拟磁盘的大小问题,稍后会有说明)
6、设置安装光盘镜像的位置,单击下一步继续。
7、单击“完成”,开始创建虚机。
8、在“Hyper-V管理器”中,选中新建的虚机,单击操作中的连接。
9、启动虚机,并安装系统。
10、(可选)如果希望减少以后安装的麻烦,可以现在先安装上必要的工具。(如:VS,输入法,什么的)(注:虚机插件可以不用安装,Win7自带了对Hyper-V的驱动)11、封装系统,用管理员权限打开命令行,执行如下命令:(如果怕出问题,可以先做个备份或者快照)
当封装完毕后,虚机系统会自动关闭。然后,我们可以在优化一下VHD文件的大小。
1、参考上一部分的内容,将VHD文件附加到计算机上。2、然后清理一下VHD的虚拟磁盘上的东西,比如可以删除页面文件(pagefile.sys),还有者临时文件夹的内容。3、清理完后,卸载VHD镜像。4、在“Hyper-V管理器”中,选中对应的虚机,然后单击右边的“设置”。5、选中“硬盘驱动器”,确认磁盘文件所在位置。6、在“Hyper-V管理器”中选择,“编辑器磁盘”。
7、在“编辑虚拟磁盘向导“对话框中单击下一步继续。
8、选择刚才确定文件位置,然后单击下一步继续。
9、选择“压缩”,然后单击下一步。
10、单击确定,开始压缩VHD。
好,这样就获得了VHD系统文件。VHD的准备就到此结束了。然后就是系统部署了。(压缩之后,一般可以大幅度的减少大小,我这成功的将40G清理到30G,这样在部署下载时候,能提高速度。)
2、部署VHD文件
部署VHD也分成2个部分,一个是裸机部署,一个是在已有系统上进行部署。那么先从裸机部署开始。在开始之前,请先把要部署的VHD文件放到共享中,或者FTP中。2.1裸机部署VHD文件所谓的裸机,是指硬盘上没有系统,或者要把原有硬盘内的东西清理掉,从而,机器中没有启动引导的一种状态。
1、使用Win7或者Win2008R2的安装光盘,U盘也可以,启动机器。(注:在启动之前,可以往U盘中复制一些FTP工具等,方便操作。至于使用是X64位还是X86安装盘,请根据VHD文件内的系统类型选择。还有X64的安装盘启动的PE里面也是X64的,精简掉了32位运行子系统,所以工具需要是64位版的)2、进入安装界面后,选择好正确的语言,单击“下一步”。
3、选择“修复计算机”,稍等一会,之后出来系统恢复选项,单击下一步,然后选择“命令提示符”。
4、可以先输入“start”命令,打开一个新的命令行窗口,然后在输入“startnet”开启网络支持。
5、切换到另一个窗口,输入“Diskpart”,对系统进行分区。6、(可选)清除硬盘上的分区,在命令提示窗口中输入:ListDisk查看系统上磁盘Selectdisk1选择一个系统硬盘,根据上面返回的索引信息。Clean清除磁盘上的所有内容。
7、创建系统分区(用于启动引导)。例如,这里建立一个100MB的系统分区。在命令提示窗口中输入:createpartitionprimarysize=100formatquickfs=ntfsassignletter=sactive创建分区格式化分配盘符激活(非常重要)8、接下来在创建一个主分区。例如,可以用剩余空间。在命令提示窗口中输入:createpartitionprimaryformatquickfs=ntfsassignletter=c
9、接下来,将VHD复制到计算机上,切换到另一个命令窗口。
如果使用FTP的话,建议使用第三方工具,系统内部的FTP因为一些问题无法正常工作。
10、下载完成后,就可以附加VHD文件到系统了,切换回原来的窗口。这里假设VHD文件名字是“Windows7.vhd”,在命令提示窗口中输入:selectvdiskfile=c:/windows7.vhdattachvdisk
11、当附加完VHD文件之后,系统会自动分配一个盘符。可以通过卷列表查看盘符。在命令提示窗口中输入:listvolume
12、使用BCDboot工具(位于VHD内的Windows/System32或者WindowsPE媒体中),来将启动环境文件从VHD中的/Windows文件夹复制到系统分区。BCDboot工具会自动创建BCD配置文件来启动VHD。有关BCDboot的更多信息,请看本文最后的参考。cdv:/windows/system32bcdbootv:/windows/ss:(v是附加VHD文件的卷的盘符)
13、这完成后就可以分离VHD文件了。在命令提示窗口中输入:selectvdiskfile=c:/windows7.vhddetachvdiskExit
14、重启计算机。
2.2在已有系统的机器上部署原生VHD启动
其实,这个部分,可以换一个说法。就是将VHD文件添加到启动菜单中。1、先将VHD文件复制到本地机器。2、使用管理员模式打开命令行。3、复制已有的启动引导,然后使用VHD信息来修改启动数据。
bcdedit/copy{current}/d'vhdboot(locate)'(注:/d后面的是显示的启动名字,可以自定义,中文也可以,但如果你的系统不是中文的,会乱码。)当成功执行完这个命令后,会返回一个{GUID}字符串。4、复制上一个命令输出的{GUID}字符串,以便之后使用。5、设置VHD启动项目的device和osdevice选项。bcdedit/set{guid}devicevhd=[locate]/windows7.vhdbcdedit/set{guid}osdevicevhd=[locate]/windows7.vhd
(将{GUID}替换成之前复制的内容,[locate]内容换成本地盘符)6、在某些x86系统中需要在启动配置中设置一个选项,来探测硬件信息。
bcdedit/set{guid}detecthalon
7、重启计算机
重启玩之后,Windows启动管理器将会启动VHD文件中包含的系统。之后就可以随意使用了,和正常的使用没有多少区别。
大家可能会有一些疑问,那么接下来,我来做一些回答。1、从VHD启动之后的系统,到底是运行在虚拟机上?还是直接运行在物理硬件之上?答:是运行在物理硬件上。在Win7以及WIn2008R2中的引导程序和系统本身都包含了对VHD文件的读写(虚拟)驱动程序,以及虚拟的VHD磁盘控制器。不要被这个虚拟所误导,这里指的是模拟硬件,比如最常见的虚拟光驱。因此我们可以在启动计算机的时候,访问VHD并且从其上启动;也可以在Windows7中直接创建、加载和卸载VHD文件。不过行为有些不同,这些驱动是在系统内核中的,系统本身也会知道自己运行在VHD文件上。因此,会把虚拟内存文件放到非VHD磁盘的物理磁盘上,也不会写入到VHD内部。
2、从VHD启动,还需要哪些必备的条件?答:对于VHD启动本身,对硬件并没有多少要求,只能能运行系统即可。不过对于软件方面来说,系统必须是以下版本,Windows7EnterpriseWindows7UltimateWindowsServer2008R2
XP和Vista是不行的,因为驱动问题。而WIn7的版本必须是企业版之上,这个策略限制,如果版本不对的话,会提示不支持,然后关机的。
3、是否会有性能的损失?答:会有一些损失,但很小可以忽略。主要原因是对文件系统读写访问的时候,需要经过额外的一层VHD读写驱动的解析,这里面有一些微量的I/O性能开销,但是跟虚拟化的情况相比,性能基本上接近了真机。下图是在网上找到的测试资料,有一组直接读取硬盘和读写VHD的比较,性能差别微乎其微。
下图就是一个事例,Win7Base.vhd是父盘,Win7Disk.VHD是当前正在使用的系统文件。可以看到它的大小已经变成了设置的最大大小(127G)
另外,也可以看到页面文件,因为VHD文件本身会有一点性能损失,加上一些其他问题等,所以页面文件不会放到VHD文件内部。
5、在裸机部署完之后,重启后,看到菜单是英文的?答:是的。即使你用的是中文版的安装盘在第一次启动的时候,也是英文的,但不要紧,进入系统之后,下次重启时就会变成中文的了。主要原因是,在设置启动引导项目的时候,默认的语言是en-us,而不是zh-cn。
6、是否可以挂接X64和X86系统?答:可以。在启动引导中添加相应的条目即可。如果使用的是PE环境部署的,建议使用PE里面的bcdboot来设置启动项。(有待补充)
最后附上一个自动应答文件,也可以使用“Windows系统映像管理器”创建一个。请自行替换XML中【】内容