扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
来源:ZDNet 2009年03月18日
下面的内容,是由微软全球技术中心工程师收集和整理的虚拟化技术资料集锦。基本上涵盖了学习和应用基于Hyper-V架构的虚拟化平台所需要掌握的知识和资料。非常的有价值。
1.Hyper-V的安装部署
在Windows Server 2008 X64上面安装Hyper-V和添加任何一个Windows组件都一样,都是从System Manger里面添加role开始的。
进入 Server Manager 后,单击选中视图左窗口导航菜单中的"Roles",之后单击视图右窗口中的"Add Roles",以添加角色。
弹出 Roles 安装向导,点击 "Next"。
选择服务器角色界面中,勾选"Hyper-V",并点击"Next"。
创建虚拟网络,这里会显示出当前系统可供 Hyper-V 使用的网络连接。
通过向导收集完信息后,点击"Install"进行 Hyper-V 的安装。
安装过程结束后,向导会提示必须重启服务器,点击"Yes"重新启动服务器。安装完成后大家就可以去Hyper-V Manager中去进行虚拟机创建和管理工作了。
另外需要提醒大家的是我们在Windows Server 2008 RTM中集成的Hyper-V只是Beta版本,因为Window Server 2008是今年2月份RTM的,而Hyper-V的最终正式版是在今年6月时候推出的。所以大家需要去我们的网站上下载RTM版的Hyper-V进行安装。
下载地址如下:http://www.microsoft.com/downloads/details.aspx?FamilyId=F3AB3D4B-63C8-4424-A738-BADED34D24ED&displaylang=en
2. Hyper-V对硬件的兼容性
Hyper-V对于软件和硬件有一些requirement,其中比较主要的如下:
首先就是它只支持64位的windows server 2008, 也就是说它不能装在X86位的windows 2008上.
其次, Hyper-V需要CPU支持虚拟化技术, 对应到不同的厂商就是Intel VT和AMD-V。
除此外,CPU还必须支持DPE(hardware-enabled Data Execution Prevention)技术, 这个是为了安全性,Intel系的CPU中管这个叫做XD(execute disable),AMD的里面叫做NX(No execute)
最后,当然需要你的机器拥有越多越好的内存。
也就是说假如您使用的是Intel的CPU,请确认它支持Intel-VT和XD,假如您使用的是AMD的CPU,请确认它支持AMD-V和NX。其次请您确认您是否在机器的主板设置当中启用了以上功能(在BIOS里面,多数情况下,这两个功能叫做Hardware Assistant Virtualization和Date Execution Protection)
对于其他的一些IO设备,对大多数设备来说,只要硬件设备能够在Windows Server 2008下工作,那么就肯定能够在虚拟机下工作。而对于诸如DAS, FC SAN, iSCSI SAN等共享存储设备的各种功能的支持,详细信息您可以参考:http://blogs.technet.com/josebda/archive/2008/02/06/storage-options-for-windows-server-2008-s-hyper-v.aspx
3.虚机的文件大小
Hyper-V和其他一些虚拟化产品,比如Virtual PC和Virtual Server一样都使用了VHD格式的虚拟磁盘文件。Microsoft Virtual Hard Disk(VHD)格式是用于提供统一产品支持系统的常用虚拟化文件格式,它为客户提供了更加完美的可管理性、安全性、可靠性和更高的成本效益。VHD虚拟磁盘文件的最大尺寸为2040 GB
您在Hyper-V当中可以建立三种类型的虚拟磁盘文件(VHD),第一种是动态磁盘,这种磁盘的大小会随着你写入的数据的增多而变大,直到达到您在新建它时所选定的磁盘大小;第二种是固定磁盘,这种磁盘文件从一开始就被固定了大小,不管它里面实际被写入了多少数据;第三种就是差异磁盘,它能够建立其相对于某一个母盘的差异磁盘,适合快速大量建立虚拟机的场合。其中,第一种和第三种都能够达到节约磁盘空间的效果
4.利用模板来快速创建虚拟机
在实际生活和工作中我们经常需要批量建立虚机,这样的话如果我们还是按照前面那种方法创建虚机就会很麻烦,因为这样会很慢,而Hyper-V也为我们提供了差异磁盘技术来解决这个问题。利用这种技术我们可以先创建一个虚机系统,并进行相关的设置,如桌面等。然后以此系统为模板(严格来说是此虚机系统安装后的硬盘为母盘)建立差异磁盘,并将此差异磁盘指派给新的虚拟机来使用。当你使用新的虚拟机后,它仍会以母盘内系统来启动,但是此后在此系统内所进行的任何变动都会被保存在差异磁盘内,而不会改变母盘内的内容。这样不但能够快速地创建新的系统,而且节省了磁盘空间。而实际您使用这个虚拟硬盘的时候,它会在背后把您的母盘文件和这个差异文件连接在一起作为一个实际的硬盘使用。
简单步骤如下:
(1)在已经建立好母盘的情况下,在Hyper-V Manager 中,新建一个hard disk
(2)在下面这个画面当中选择第三个选项,这个选项的就是所谓的“差异磁盘技术“
在这里选择您新建硬盘文件的名字和存储位置:
然后您可以在下面的画面中选择您想要参照的母盘:
(3)在创建完虚拟硬盘文件后,我们可以新建虚机了
(4)然后在下面这个画面当中选择您刚刚建立的虚拟硬盘文件:
这样您建立好的虚机就是以你母盘为基础的,而且建立过程非常迅速。而您所说的快照方式(Snapshot)是用来保存虚拟机当前状态的,不是用在这个地方的。在实际使用过程中,一般我们都会先创建一些母盘,然后将母盘设置成为只读,接下来供以后各个虚机建立时候参照。
5.产品架构,以及虚拟化的产品线:
一般来说在Hyper-V之前Windows平台常见的操作系统虚拟化技术一般分为两种架构。第一种就是下面的Type 2架构,它的特点是:Host物理机的硬件上是操作系统,操作系统上跑着VMM, VMM也就是Virtual Machine Monitor,作为这个架构当中的Virtualization Layer,其主要工作是创建和管理虚机,分配总体资源给各个虚机,并且保持各个虚机的独立性,大家也可以把它看作一个管理层。在VMM上面跑的就是各个Guest虚拟机。就是这样一个架构,这个架构有一个很大的问题,就是Guest虚机要穿越VMM和Host OS这两层来访问硬件资源,这样就损失了很多的性能,效率不高。采用这种架构的典型产品就是Java Virtual Machine以及.NET CLR Virtual Machine。
第二种架构就是Hybrid架构,下面是它的架构图,和Type 2架构不同的是,VMM和Host OS是处于同一个层面上,也就是说VMM和OS同时跑在内核模式交替轮流地使用CPU。这种模式比Type2架构快很多,因为在Type2模式下VMM通常跑在用户模式当中,而Hybrid是跑在内核模式中。这样架构的典型产品就是面向桌面操作系统的VPC 2007和微软上一代面向服务器操作系统的Virtual Server 2005。
而我们推出的Hyper-V没有使用上面所说的两种架构,而是采用了一种全新的架构(下图): Type 1的架构,也就是Hypervisor架构。和以前的架构相比,它直接用VMM代替了Host OS. Host OS从这个架构当中彻底消失,将VMM这层直接做在硬件里面,所以Hyper-V要求CPU必须支持虚拟化了吧。这种做法带来了虚拟机OS访问硬件的性能的直线提升。VMM这层在这个架构中就是我们说的Hypervisor, 它处于硬件和很多虚拟机之间,其主要目的是提供很多孤立的执行环境,这些执行环境被称之为分区(partition),每一个分区都被分配了自己独有的一套硬件资源:内存,CPU, IO设备,并且包含了Guest OS. 以Hyper-V为基础的虚拟化技术拥有最强劲的潜在性能。
大家可以来看一下Hyper-V内部比较详细的结构图:
在底层支持虚拟化的硬件之上,Hypervisor运行着,而在它之上,运行着很多独立的分区,大致可以把分区分成四种类型。
首先来看最左边的,也就是父分区,也就是控制和创建其他分区的root分区。我们来看看它的构成,在这个分区的内核模式下有longhorn server的内核,还有一个叫做VSP的东西,它的全称是Virtualization Service Provider,它负责和device driver直接对话,为每一个需求提供硬件服务,VSP可以将request直接通过驱动程序传入物理设备,也可以把它传给自己本地的服务去处理,比如一些文件系统,VSP在硬件设备如何工作中充当了关键的角色。以前的虚拟化产品都是通过模拟方式来让guest OS访问硬件的,但就像刚才所说的那样这样做在兼容性上是不错的,但是性能不强,而VSP不存在这个问题。而每个分区都有的VM BUS类似于电脑里的总线,用来在虚机之间传输发送的request和data。
在父分区的用户模式下有很多VM Work Processes,每一个process都代表了系统当中一个特定的虚机,它是跑在前面所说的虚拟栈里面的。另外还有VM Service,它提供了一套工具和后台服务,用来管理虚机以及work processes,在它上面就是我们所说的WMI接口,其实它是VM Service暴露的一组接口。我们可以利用它去编写编写自己的管理工具,使虚拟机相关的操作自动化。
然后看左边第二个分区,这个是一种子分区,应用程序跑在用户模式下,而这个分区虚机的内核模式下跑的是Windows 2008。它就是一个被启蒙的Guest OS,也就是说这个系统完全知道自己是跑在hyper-v上面的虚机,它访问硬件不需要用任何的模拟。我们看其内核模式下还有一个VSC,它的全称是virtualization service client。它是一个跑在子分区里面的client组件,它能够通过消费VSP提供的服务来完成实际的工作。对每一个设备类型来说,都有一对VSP/VSC来完成对这种类型硬件的使用。举个例子来说,过程是这样的。首先虚机上面操作系统中的应用程序需要访问某设备中的文件系统,然后相关驱动程序通知VSC要访问硬件,然后VSC把相关的request通过VM BUS传给父分区里面的VSP,然后VSP提供相应硬件供应操作。是这样一个过程。
然后第三个分区,这是一种另外的子分区,在这个子分区里面跑的是没有被启蒙过的操作系统,比如一些早期windows操作系统和DOS, 它必须使用模拟来提供操作系统所能够明白的硬件环境,所以没有VSC组件跑在内核模式下。
最后第四个分区,这也是第三种子分区,它里面跑的根本不是windows的操作系统,而是一些Linux的操作系统。微软同样认识到有些顾客需要在hyper-v上跑其他的OS, 比如Linux,微软没有仅仅让Linux跑在模拟出来的硬件上,而是让一些合作伙伴来 build 面向Linux的VSC,争取有越来越多的Linux虚拟机也能够使用VSP/VSC的方式来更有效的访问硬件。
Hyper-V还有一个优势,就是它背后有一个很庞大的解决方案。微软为虚拟化技术提供了非常丰富和全面的产品线,从服务器虚拟化的Virtual Server, Hyper-V,到应用程序虚拟化的SoftGrid,到桌面虚拟化的VPC,再到用户界面虚拟化的Terminal Services,一应俱全。所以微软能够为用户提供一套完整的虚拟化解决方案。
这里简单的提一下微软的其他虚拟化产品。操作系统的虚拟化包括了面向桌面操作系统的产品,也包括了面向服务器操作系统的产品,前者的代表是Virtual PC 2007,而后者的代表就是Virtual Server 2005以及我们这次推出的Hyper-V。
而应用程序的虚拟化,顾名思义,它虚拟的对象不再是操作系统仅仅是应用程序。在一个物理机器上面跑一个OS,然后在这个共享的操作系统上面跑很多虚拟化的应用程序。其相关产品就是微软的SoftGrid Application Virtualization。SoftGrid用它的流传输体系,将任何的Windows应用程序转换为动态服务,这些服务可以集成到Windows管理的Infrastructure当中,以便于用标准组策略的方法对这些服务进行设置和管理。从这点上看,SoftGrid和Server毫无关系,它只是将应用程序以及用户界面,还有运行应用程序所需要的一些环境设置都打包成了文件,这是一个无法忽视的崭新虚拟化技术。
还有一种虚拟化就是用户界面的虚拟化,它为某一个应用程序提供了多个用户界面,可以被不同用户所使用,其实用户界面下面跑的是同一个应用程序,这种架构一个例子就是Terminal Services。
除此之外,微软还为这些虚拟化技术的产品提供了统一的管理平台:System Center, 不管是物理机,还是Hyper-V,VPC,Virtual Server的虚机,甚至是VMware的虚拟机都可以通过System Center的管理工具进行统一管理,并且彼此兼容。另外System Center还提供了快速迁移的功能,也就是说,你可以通过简单的操作将一个虚拟机在各个物理机上进行快速的迁移,这就使得一些灾难恢复的工作变成更加的简单和快速。
6. Snapshot的特点,对虚机文件的影响:
SnapShot,就是所谓的虚机快照,我们能够为虚拟机抓取快照,其内部是通过Microsoft Volume Shadow Copy Service技术完成的。我们可以把某个虚机某个时刻的所有状态,包括其内存啊磁盘啊等全部抓取成一个镜像文件,在以后的任何时间,你就可以通过它来恢复当时的实际状态。就像把某个时间点上的所有东西状态定格为一个文件然后随时恢复回来一样。
创建snapshot后,原有的VHD文件就被停止写入数据了。在你抓取snapshot之后,所有对磁盘的更新都会被写入另一个AVHD文件,同时,还会对你抓取时候虚拟机的内存情况进行备份。也就是说,在你抓取Snapshot的时候,会做两件事情:第一,复制当时虚拟机内存的一份拷贝,这块占用磁盘一般不会太大,其次,新建一个AVHD文件进行差异备份,在这之后所有应该写入磁盘的数据都会被写入这个新的AVHD文件中,保持原有VHD或者AVHD文件不变。每一次抓取snapshot都会做这两件事情。
详细的过程您也可以参照:http://blogs.technet.com/jamesone/archive/2008/05/02/hyper-v-and-snapshots-part-1.aspx
7. 从其他虚拟化软件升级到Hyper-V:
假如您从以前得一些虚拟化软件比如VPC 2007或者Virtual Server 2005升级到Hyper-V的话,在大多情况下,您的VHD文件在这几种虚拟化产品中是互相兼容的。因为在这几个产品变迁当中,VHD这个特定的文件格式并没有更改。假如您将Virtual PC或者Virtual Server下建立的VHD镜像拿到Hyper-V中去创建一个新的虚拟机,然后启动它,那是没有问题的。
这方面的详细信息请您参照:http://blogs.technet.com/jhoward/archive/2008/02/28/are-vhds-compatible-between-hyper-v-and-virtual-server-and-virtual-pc.aspx
不过这样做后您可能会发现有一些驱动认不出来,因为Virtual PC或者Virtual Server的虚拟机中使用的驱动程序和Hyper-V当中不同。所以在您实际的升级过程中,可能需要您在Virtual PC或者Virtual Server下把VHD镜像中操作系统的集成驱动程序VM additions卸载掉,然后在启动新虚拟机后插入Integration Services Setup Disk,并根据提示更新完HAL后进行Microsoft Hyper-V Integration Components的安装,这样才能认出所有的驱动程序并且正常使用。
您可以参考以下网页提供的大概过程:http://www.groovypost.com/howto/microsoft/windows-server/migrate-microsoft-virtual-server-2005-r2-vm-to-windows-server-2008-hyper-v/
8.Hyper-V对比VMWare ESX等的比较:
Microsoft Hyper-V 和 VMware ESX Server都是Bare-Metal虚拟化的产品,他们最大的区别在于,Microsoft Hyper-V采用了微内核的结构,而ESX Server是一个单内核的产品。单内核的主要特点是硬件的驱动程序集中在Hypervisor一层,被Hypervisor上的所有的虚机所共同使用。当一个虚机的OS需要访问硬件时,它通过Hypervisor中的driver model来访问,这种单内核的Hypervisor能够提供很好的性能,但是它在安全性和兼容性上存在缺陷。由于驱动程序和一些第三方代码跑在一个很敏感的区域内,这种模式继承式了拥有了一个很大的被攻击面。设想下某些不怀好意的代码被隐藏在驱动程序当中,然后跑在Hypervisor中,这会影响到所有的客户虚拟机,而且这是很难被发现的,因为对于实际被使用的虚机来说,Hypervisor这层是不可见的,所以无法通过一些病毒软件去监控它。 另外一个问题就是稳定性,假设某个驱动程序当中存在bug,那么它将影响到所有的虚机。另外你还要求Hypervisor去支持所有的驱动程序,造成了这层体积较为庞大。所以单内核的Hypervisor一般被认为是胖Hypervisor。而我们的Hyper-V采用了微内核的结构,它是一个瘦Hypervisor。因为它里面没有驱动程序,所以在体积上Hyper-V更有优势,另外,由于微内核体积较小,所以运行的效率很高。驱动程序是跑在每一个分区里面的,每一个分区内的虚机OS都能够通过Hypervisor直接访问硬件,还使得每一个分区都相互独立,这样就拥有更好的安全性和稳定性。
除此之外,大多数虚拟化解决方案都是采用了硬件模拟来解决硬件访问的兼容性问题,但是也造成了很大的开销和性能损失。而我们的Hyper-V没有采用这样的做法,而是采用了Enlightenment(启蒙)技术。它能够对那些虚拟机操作系统进行启蒙,让它们明白自己是一个虚拟机,被启蒙过的虚拟机操作系统会记住虚拟化,所以他们可以不需要硬件模拟,而是通过VSP/VSC这套组件来进行的,当子分区内的操作系统需要访问硬件的时候,由子分区内的VSC(Virtualization Service Client)通过VMBUS将request发给父分区里面的VSP(Virtualization Service Provider),然后由VSP去提供实际的硬件服务。通过这种方式来使用硬件,相对于使用硬件模拟的方法,其访问性能有了大幅度的提高。
另外这种方式可以兼容大量的驱动程序,而不必像ESX Server一样为虚拟机开发专用的驱动程序。在大多数情况下,只要硬件设备能够在Windows Server 2008下工作,那么就肯定能够在虚拟机下工作。再加上Windows平台的驱动本来就比其他平台的驱动程序丰富,而ESX Server容易遇到兼容性方面的问题,所以在硬件兼容性支持上Hyper-V具有无可比拟的优势。
经过这几年的努力,微软为虚拟化技术提供了非常丰富和全面的产品线,从服务器虚拟化的Virtual Server, Hyper-V,到应用程序虚拟化的SoftGrid,到桌面虚拟化的VPC,再到用户界面虚拟化的Terminal Services,一应俱全。而且为这些所有的产品提供了统一的管理平台:System Center, 不管是物理机,还是Hyper-V,VPC,Virtual Server的虚机,甚至是VMware的虚拟机都可以通过System Center的管理工具进行统一管理,并且彼此兼容。另外微软还提供了自己的服务器操作系统和一些其他服务器产品(比如Exchange Server),能够做到在后台将虚拟化产品和其他服务器产品的联动支持和无缝连接,所以微软能够为用户提供一套完整的虚拟化解决方案。
最后Hyper-V相对于ESX Server,还有一个优势,就是使用成本。相对于ESX Server昂贵的授权费用,Hyper-V价格非常低廉,而且如果你购买了Windows Server 2008的话,Hyper-V是免费附赠的,所以Hyper-V无疑是企业虚拟服务器的最佳选择。
9.在Hyper-V上跑LINUX
目前Hyper-V对Linux虚拟机的支持是这样的:由于Linux操作系统的版本众多,有社区开源的也有属于各个其他不同公司的,所以我们无法一个个测试。据我们的官方文档显示,目前经过了我们的测试,能够在Hyper-V上运行的Linux操作系统版本如下:
Linux Distributions (VMs configured with 1 virtual processor)
· Suse Linux Enterprise Server 10 with Service Pack 2 x86 Edition
· Suse Linux Enterprise Server 10 with Service Pack 2 x64 Edition
· Suse Linux Enterprise Server 10 with Service Pack 1 x86 Edition
· Suse Linux Enterprise Server 10 with Service Pack 1 x64 Edition
另外我们也曾经在Hyper-V上装过Fedora Core 8,具体安装过程,您可以参考以下作为例子:
http://blogs.msdn.com/virtual_pc_guy/archive/2007/12/31/installing-fedora-core-8-on-hyper-v.aspx
微软也为Linux虚拟机提供了集成的驱动程序组件,目前尽管我们没有对所有的Linux版本进行测试,但是理论上它可以支持任何Xen-enabled的Linux,您可以去进行尝试。这个集成驱动程序组件包括了一些Hyper-V虚拟机中网络设备,磁盘设备(IDE and SCSI)以及IO设备的驱动程序,还包括了集成的显卡鼠标驱动程序以及Hypercall adapter。使用它还可以大幅度的提高Linux虚拟机对硬件的访问性能,您可以去我们的网站上下载这个组件:http://connect.microsoft.com/
不过下载之前,您先需要在这个网站上进行注册,其具体的下载地址是:https://connect.microsoft.com/Downloads/Downloads.aspx?SiteID=495
我们在connect.com上还有一个论坛,您可以在这里面看到一些关于使用这个驱动组件的常见问题:https://connect.microsoft.com/community/discussion/richui/default.aspx?SiteID=495
10.虚机P2V迁移
我们刚刚RTM的统一管理工具SCVMM2008支持P2V的功能,使用SCVMM2008,您可以将物理机快速地转换成虚拟机。您可以去以下地址下载评估版:
http://www.microsoft.com/downloads/details.aspx?familyid=ed012990-6e86-4b43-9842-da5c02ff1c83&displaylang=en&tm
SCVMM2008的详细介绍请参见:
http://www.microsoft.com/systemcenter/virtualmachinemanager/en/us/default.aspx