在新建Hyper-v磁盘的时候 有3种选项

Hyper-v之利用差异磁盘快速创建多个虚拟机_第1张图片

其中分别是 固定大小 动态扩展 和 差异(differencing,个人习惯叫 差分)

其中

固定大小是新建的时候 Hyper-v创建一个设置大小值的文件,然后才就可以使用

优点是 速度相对比较快 而且不容易产生物理上的磁盘碎片

缺点 一开始就占用了所设置值的空间 占用空间大 而且新建的时候产生的时间要很久(因为系统要填充这个虚拟磁盘)

建议用于实际生产环境

动态扩展是新建的时候只占用很小的空间(大概是4m左右吧)然后使用的时候随着占用空间的增大跟着增长其空间

优点是 虚拟磁盘占用的空间随着使用的增长而增长 有效提高硬盘利用率 新建速度很快

缺点 速度比较慢,而且由于是动态增长可能会在物理磁盘上产生碎片

建议用于实验性环境

差异 这个需要一个父磁盘为基础,差异的磁盘连接到父磁盘,然后差异的那个磁盘引用父磁盘的数据,同时保存相对于父磁盘的更改数据

其结构类似于下图

Hyper-v之利用差异磁盘快速创建多个虚拟机_第2张图片

差异磁盘建议用于很多数据是相同的情况下 把相同的数据保存为一个父磁盘 然后创建差异磁盘引用那个父磁盘的数据

 

很多时候 我们在使用虚拟机的时候 都要新建虚拟机 然后在里面安装系统

而一个系统 现在的win7/8或者其他系统 都基本接近10g左右的体积,如果要多个虚拟机的情况下 这是一笔很客观的硬盘占用

那么 我们可以使用差异磁盘的方式,先装好一个系统,然后进行初始化封装之后做成一个父磁盘,在新建n个差异磁盘,这样就可以很方便的可以快速新建n个虚拟机了

 

 

说了一堆基础的东西之后

下面说如何用差异磁盘来快速创建虚拟机

首先,先创建一个父磁盘,在里面安装好系统(本文以ws2012为例)

先装好系统(这个不用详说了吧?)进入系统,然后可以给系统做一些基础配置,比如ws2012有些人不喜欢开机跳出那个服务器管理器 可以取消

然后诸如winrar或者.net 3.5一类的常用的东西也可以安装好来

之后使用sysprep进行系统封装

在ws2012下按 win+x 然后a   或者其他办法 用管理员打开命令行提示符

输入 sysprep\sysprep

然后如下图选择(关于sysprep的详细介绍可以参考微软官方的文档http://technet.microsoft.com/zh-cn/library/cc766049(v=ws.10).aspx)

Hyper-v之利用差异磁盘快速创建多个虚拟机_第3张图片

确定之后 稍等片刻等系统清理完信息 就会自动关机 自此 父磁盘就创建好了

(虽说不用sysprep也可以差分磁盘也可以使用,但是那样子用差异磁盘建立的多个虚拟机的SID是一样的,如果之后要做诸如域一类的实验的话就会有问题了,sysprep就可以清除掉那些信息

然后在下一次开机的时候就会像重装电脑完之后那样对电脑进行初始化设置,比如扫描硬件 新建一个新的sid等)

有了父磁盘之后,照着上面步骤创建一个差异磁盘

打开hyper-v管理器,新建-磁盘

image

然后跳出向导,在2个下一步之后,在选择磁盘类型里选择 差异

Hyper-v之利用差异磁盘快速创建多个虚拟机_第4张图片

然后指定新建的差异磁盘保存位置和名字

Hyper-v之利用差异磁盘快速创建多个虚拟机_第5张图片

在下一步后指定父磁盘的位置,即刚才创建的那个带操作系统的盘的位置

Hyper-v之利用差异磁盘快速创建多个虚拟机_第6张图片

 

至此创建好了一个差异磁盘

该差异磁盘完整的引用了父磁盘的所有数据,一开始使用的时候,跟直接使用父磁盘是完全一致的

然后该差异磁盘会保存其相对于父磁盘的差异配置,比如父磁盘里没有qq,但是你在差异的那个磁盘的系统上装了qq,那么差异磁盘就会保存有qq的数据

新建一个使用差异磁盘的虚拟机

新建-虚拟机

在连接虚拟磁盘那一步,选择刚才新建的那个差异磁盘即可

Hyper-v之利用差异磁盘快速创建多个虚拟机_第7张图片

 

每次需要一个新的系统的时候,先新建一个差异磁盘并且引用封装好的那个父磁盘,然后在新建虚拟机的时候使用该差异虚拟磁盘即可

使用差异磁盘的注意事项

1.由于差异磁盘的父磁盘只有一个文件,当多个虚拟机使用差异磁盘的时候大家都是用这个父磁盘,需考虑硬盘io问题,所以建议父磁盘最好放在比较高速的地方,比如ssd里(就算不通过差异的话貌似这也是个相当纠结的问题)

2.一旦封装好父磁盘之后,就不要在直接使用父磁盘来启动,不然会破坏父磁盘封装然后导致所有差异磁盘的引用失效

 

ps:虚拟机的快照其实也是利用了差异磁盘的原理