<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="虚拟鸡和虚拟鸭">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2009-06-15 09:25<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
好久不写正经的技术介绍了。
&ldquo;我K～谁&hellip;谁&hellip;谁&hellip;谁说我换行啦？我还在做皮匠这份很有前途的职业哩！&rdquo;
好吧，为了不让人误会，我还是介绍点咚咚吧。可介绍点啥哩？
有了！让我来隆重介绍两个概念：SAN和NAS&hellip;&hellip;别吐，别吐，我不说了还不行吗！救护车～～～

唉，也是，存储技术里也没啥有意思的新咚咚了。FCoE？这东西只能让我联想起周星星同学发明的&ldquo;太阳能手电筒&rdquo;&mdash;&mdash;只有在有光的地方才能亮，在没有光的地方，坚决不亮。

想来想去，EMC收购VMware之后，好多存储人开始注意虚拟主机技术，咱们就说说这虚拟技术吧。不过事先声明，这方面我也不懂，我姑且一说，您姑且一听，如假不换，管杀不管埋&hellip;&hellip;前排的同学注意了，不要再乱扔西红柿了，不然我要讲回SAN和NAS喽！

说起虚拟技术呢，首先当然要提这一领域的四大天王，他们是：VMware、XEN、MS Virtual Server、Virtuozzo和OpenVZ。
（哄噢～有人不识数喔～）
听我慢慢说啦！OpenVZ是用Virtuozzo全套源码的一个开源项目，所以技术上说，Virtuozzo和OpenVZ是一家，就像CentOS和Red Hat的关系一样。当然CentOS和Red Hat实在太相像了，而Virtuozzo和OpenVZ还是稍微有点区别的。比如Virtuozzo能支持Windows，而OpenVZ就不行；Virtuozzo有很多图形节目的管理工具，OpenVZ目前还只能用命令行。

叙述的有点乱，还是逐个介绍一下四大天王先。

首屈一指的当属VMware公司。这个公司在虚拟主机方面的产品贼丰富，技术也贼成熟，顺其自然的，其看家护院的产品&mdash;&mdash;ESX Server&mdash;&mdash;卖的也就贼贵贼贵的。

这个ESX Server是直接安装在裸机上的，不需要安装任何操作系统，或者说，ESX自己就是个特殊的操作系统。因为ESX的安装界面很像RedHat，里面的指令和服务也很像，所以有些人误以为ESX = RedHat + VMware Server，其实不是酱子滴。

ESX里的大部分底层驱动都由VMware重新写过，而且还内带好多咚咚，比如SAN文件共享和多路径冗余。VMware为了表示自己的确干了好多活，就把这个kernel命名为VMkernel。
而整个ESX基本可以看作VMkernel + Console。这个Console基本就是RedHat AS3的改版，可以看做是个特殊的虚拟机。

本人觉得VMware最酷的技术是VMotion，就是能让虚拟机活着搬家。我曾伙同另外一个家伙测过VMotion的效率，在虚拟机从一台服务器搬家到另外一台服务器的过程中，持续ping这台虚拟机的IP地址，结果发现整个过程中只有一个ping响应略有延迟。厉害！

当然喽，要实现VMotion，就肯定需要后端有一个共享SAN文件系统。ESX里面带的SAN文件系统叫VMFS，实现的功能跟SANergyFS和ADIC StorNext FS差不多，不过VMFS是对称式的。也就是说，安装ESX的时候，不需要给VMFS指定MDC。

ESX里集成的多链路功能也不错，主流光纤卡都能支持（要求太低了点儿吧～）
还有，多链路聚合和切换是在驱动层完成的，不是靠device-mapper或MD。也就是说，在双卡的机器上安装ESX之后，在/proc/scsi/scsi里看到的，就已经是合并之后的设备，不需要像powerpath那样再搞东搞西的。

另外ESX还支持iSCSI和NFS，用来连接IP-SAN和NAS（咦？这回居然没人呕吐，那我再大声说一遍，&ldquo;IP-SAN和NAS～&rdquo;OK，我爽了，你慢慢吐先。）
其实ESX里面是有Samba Client的，而且我试了试，访问一般的Windows共享没啥问题。但是VMware的官方文档里，目前还没有对CIFS的支持，也许是人家对自己严格要求吧。

VMware产品系列中，除了ESX以外，还有两个虚拟引擎&mdash;&mdash;VMware Server（也就是原来的GSX），VMware Workstation以及最近即将发布的VMware Fusion。
Sorry，这回真的数错了，是三个，三个产品。Server、Workstation和Fusion。
与ESX相比，这三个产品运行的层次要高一些，都是要安装在操作系统上的。Server和Workstation运行在Windows和Linux上，Fusion运行在苹果的Mac OS上。

为了配合这些个虚拟引擎，当然主要是为了配合ESX，VMware还有一些管理软件和工具。比如Virtual Center、Importer、Convertor、P2V、Player等等。
这些工具中很多是免费的，也有些如Virtual Center这样的工具，是跟ESX打包在一起卖的。ESX + VC的组合叫Virtual Infrastructure，简称VI。

顺便提一下，虚拟技术世界里，简称VI的咚咚好多，一不留神就容易搞混。比如有家公司叫Virtual Iron，而且其产品也叫Virtual Infrastructure，另外在InfiniBand交换技术里还有个协议层叫Virtual Interface。下次有人跟你说VI的时候，最好问清楚是哪个VI，免得最后驴被马性骚扰。
类似的重名现象还有VDI这个缩写。VMware有一个包叫Virtual Desktop Infrastructure，Virtual Iron公司也有个名字完全相同的产品包。当然里面的咚咚是完全不同的啦。

造成这严重的重名现象至少有两种可能：
一是这些公司在起名字的时候太缺乏创意，哪像咱存储界的厂商，明明东西一样，名字也起得五花八门。
二是人家故意把名字弄得一样，以表示说&ldquo;对啦，我就是跟你竞争的！&rdquo;

事实上Virtual Iron也确实是VMware的一个有力竞争者。咱们要说的第二个天王，XEN，确切的说不是一个人在战斗，而是一个庞大的阵营。其中就包括Virtual Iron公司。

XEN本是一个剑桥搞的开源项目，最近几年发展得超级迅速，目前几乎所有的Linux版本都搭配了这个咚咚，就连一些Unix也开始考虑勾搭之。XEN的技术特点是Para-virtual，即&ldquo;并行虚拟&rdquo;也叫&ldquo;半虚拟&rdquo;技术，就是说XEN能让虚拟机中的某些程序直接访问硬件。

打个比方说，VMware ESX像是穿在服务器硬件上的一层衣服，这层衣服把硬件包裹得很严实。ESX中的虚拟机所看到的硬件资源，100%都是由ESX虚拟出来的。虚拟机中的操作系统，是不能直&ldquo;接触&rdquo;摸到真正的硬件资源的。
而XEN呢，则像是穿在服务器硬件上的性感的比基尼泳装，虚拟机不仅可以看到，而且可以直接摸到&hellip;&hellip;
同学～你口水流出来啦！赶快擦擦。

记得早些年间要在XEN上装Linux的时候，还需要手工改内核。现在Intel和AMD在CPU里提供的新的虚拟技术之后，XEN不仅可以不改内核直接安装Linux，还可以支持Windows虚拟机。技术的进步真是快啊！

啥？你问Intel和AMD是啥技术？别急，我后面会说到。本来我脑子就乱，你这一打岔，我就更乱了。
咳～咳～刚才说到哪了？
噢，对了，是说XEN阵营。

这里面的两大主力是Virtual Iron和XenSource公司。这个Virutal Iron公司原本是有自己一整套从软到硬的虚拟产品，不过近来发现XEN年轻貌美，便放弃了自己半老的旧引擎，全套采用XEN为其核心。早年记得Virtual Iron还有些基于InfiniBand交换的硬件虚拟技术，现在在他的网站上也看不到了。看来告别过去的决心有够坚决。

XenSource公司没有什么旧关系的瓜葛，就是靠的XEN的发展而发展起来的。现在业界使用最广泛的XEN商用版本就来自这个公司。XenSource发布的商用版本一共有三个&hellip;&hellip;等会儿，让我再数一遍。OK，没问题，的确是三个：XenEnterprise、XenServer、XenExpress。

虽然在XEN的阵营中，XenSource提供了类似VMware的P2V和Importer工具，Virtual Iron提供了集中管理工具，但是总体来说，XEN的管理软件和工具还是远不如VMware完整和成熟。好在XEN阵营还在日益扩大，除了各大Linux厂商、Sun和IBM，听说最近微软也来凑热闹，跟XenSource谈起了合作。如此看来，XEN真是前途不可限量啊！

说到微软，也就是咱们要认识的第三位天王，总是让人想起IE、Media Player等&ldquo;经典&rdquo;之作，虽然他不是第一个做出来，而且技术也不见得更好，但是一旦开始免费的捆绑在Windows里面，对手的日子就难过了。如今微软在虚拟技术上的手段，也是如此。

到目前为止，微软一共推出了四个咚咚，安啦～不会再数错啦，Virtual PC 2004、Virtual PC2007、Virtual Server 2005、Virtual Server 2005 R2。这些咚咚的工作层次跟VMware Server和Workstation的层次相同，都是需要安装到操作系统上。当然了，用胳膊肘都能猜出来，微软的咚咚只能安装在Windows上喽。不过微软对虚机系统的支持倒是显得比较现实，声称在未来会支持Linux虚拟机。

让对手最害怕的是，微软号称在Windows 2008里面要开始捆绑他的虚拟产品。这可吓坏了VMware，尽管MS VSR现在做得很土，基本不具备任何实用性可言，VMware还是忙不迭的把自己的VMware Server变成免费产品，以免被微软打个措手不及。

由此也可以看出微软这三号天王也非浪得虚名，虽然东西做得不咋地，但至少可以隔山打牛。最终受益的还是咱们用户，可以免费使用功能性能都不错的VMware Server。
啥？你说你原本也可以免费使用？拜托～用盗版就不要这么大声嘛！

这四号天王，就是前面被打岔时说过的Virtuozzo和OpenVZ。这两串勾勾文都是产品的名字，背后的公司名字叫SWsoft。如前面已经说过的那样，Virtuozzo OS Virtualization和Virtuozzo Server Virtualization是SWsoft公司的商业版产品，OpenVZ是采用SWsoft源码的开源项目。

与前三个天王的产品相比，SWsoft的产品运行在更高的层次上。用业内行话说，Virtuozzo和OpenVZ属于Application Container&mdash;&mdash;应用程序的容器。好像有点难懂，咱们用点通俗的话说，不过你放心，这里没有比基尼什么事。

VMware、XEN、MS VSR这些咚咚所虚拟出来的，都是一个个&ldquo;硬&rdquo;的主机，你得在这些虚机上再装操作系统。而Virtuozzo和OpenVZ所虚出来的，是一个个已经装好系统的主机。
也就是说，VMware、XEN、MS VSR所虚拟的是硬件资源，而Virtuozzo和OpenVZ所虚拟的是操作系统环境。

所以Virtuozzo和OpenVZ里面没有VM（Virtual Machine）这个概念，取而代之的是VE（Virtual Environment）或称VPS（Virtual Private Server）。而进到VE/VPS里面，看到的就是一个现成的操作系统环境。
等着听比基尼故事的人失望了～

具体来说。比方说Windows下安装某个程序，要改注册表是吧？还有创建目录和文件是吧？Virtuozzo能把这些动作统统截获，并且偷偷在其它地方执行，而不真正修改原来的系统环境。这样程序自以为万事OK，很Happy的运行，殊不知却是被Virtuozzo给骗了。

Virtuozzo这个有所不同的机制，对资源管理更为灵活，某个虚拟环境只有活动的时候，才会被分配资源。因此在相同的硬件资源下，Virtuozzo可以配置出更多的虚拟环境。一般VMware和XEN只能在一台服务器上跑几十个虚拟机，而Virtuozzo号称可以一台机器支持5000个虚拟环境！

当然Virtuozzo也有很明显的不方便之处，就是Linux上只能虚拟Linux，Windows上只能虚拟Windows。而且像VMware或Xen那样在服务器之间挪动虚拟机，也是异常困难的。
盼望比基尼出现的人这下彻底失望了～
图在最后一贴
说完了虚拟界的四大天王，再来说说四小天鹅。

第一天鹅是Sun公司。
好像把这么大的公司算做小天鹅有点那个，不过在虚拟界Sun的影响确实不如前面那几位大嘛。没办法，暂时委屈一下喽。
Sun以前就有个很类似Virtuozzo的软件，叫Solaris Container。从名字就能看出来，这咚咚也是个应用容器。最近Sun在虚拟技术方面的热情很高，新推出了一个叫做Logical Domain的咚咚，简写的模样很怪异&mdash;&mdash;LDoms。

第二天鹅是Parallels公司。
这家公司跟前面提到的SWsoft其实是姊妹公司，幕后投资人就是SWsoft的大老板。所以你在SWsoft的主页上还能找到Parallels的链接呢。
Parallels主攻的方向是桌面虚拟，在Windows、Linux和Mac OS上都有产品。以Parallels掌握的技术，完全可以实现，在Windows上运行Mac OS程序，在Mac OS上运行Windows程序。但是目前的产品只支持后者，因为苹果公司的授权条约限制了前者的合法性。
苹果真是够&ldquo;独&rdquo;，居然禁止别的平台运行自己的程序！

第三天鹅是InnoTek公司。
这家公司非常识时务，发现自己无论如何也打不过VMware等对手，就干脆把自己的VirtualBox做成开源项目。现在大家可以在网上任意下载VirtualBox来玩。
这一招还真管用，刚开源没多久的时间，VirtualBox的用户，当然主要是玩家型的用户啦，就迅速增加。看来还是免费的午餐更好吃啊！

第四天鹅是Thinstall公司。
这家公司其实不属于传统虚拟主机这个圈子，从名字就能猜出来，它更多的是和一些所谓&ldquo;瘦终端&rdquo;厂商勾搭。但是它的产品却从名字到功能，都不折不扣的属于虚拟范畴。
它的产品叫Thinstall Virtual Suite，运行起来的效果跟Virtuozzo差不多，也是蒙骗应用程序，不让应用改动系统环境。


虚拟技术世界里，除了这四大天王和四小天鹅，还有很多配套工作。比如前面提到的Intel和AMD的新技术，就是配合这些虚拟软件滴。

Intel的虚拟技术叫Intel-VT，其中VT是Vanderpool Technology的缩写。嘿嘿，不好意思，我刚开始看到的时候还以为是Virtual Technology的缩写呢。这个技术的效果就是把一个CPU分成若干分区，然后把指令的执行范围限定在分区内。简单点说，就是在硬件上，把一个CPU虚拟成几个CPU。

按照Intel的设想，将来都不需要什么虚拟软件了，它自己的CPU直接就能同时运行多个操作系统。不过现阶段这只是个梦，Intel-VT技术还是要搭配VMware或者XEN才能起作用。当然啦，VMware和XEN都是很给面子的，Intel-VT刚刚发布没几天，这两个天王就都纷纷支持了。至于Virtuozzo这样的&ldquo;应用容器&rdquo;，由于主要是跟操作系统和应用打交道，暂时还不用搭理CPU里面的这些技术。

AMD的虚拟技术正式名称叫AMD-V，但也有很多人喜欢称呼原来那个内部用名，Pacifica。跟Intel-VT一样，AMD-V技术的原理也是在CPU上划分区，同时隔离指令。
对用户来说，让人有点不爽的是Intel-VT和AMD-V互相是不兼容的。目前VMware和XEN都是要专门针对两个技术分别做工作。
啥？你说没关系？那下次跟你谈薪水的时候，咱们说美元，发钱的时候数字不变，票子变成日元试试看。

Intel和AMD这边虚拟得热火朝天，IBM和Sun也怕落后，在新的PowerPC和SPARC处理器里，也弄了一堆虚拟技术。不过相比x86上的虚拟成分要&ldquo;软&rdquo;很多，我的意思是说要更多的依靠软件，不要想歪哦！

其实，虚拟技术，说到底就是一个字&mdash;&mdash;骗。
Virtuozzo对应用程序说：&ldquo;来吧，来搞我吧，我就是操作系统。&rdquo;
VMware和XEN对操作系统说：&ldquo;来吧，来弄我吧，我就是主机硬件。&rdquo;
Intel-VT和AMD-V对操作系统说：&ldquo;来吧，来x我吧，我&hellip;我&hellip;我&hellip;还是x86 CPU。不过我是好几个CPU哦，你想x哪一个？&rdquo;

这些技术虽然在骗，但是骗得都不够狠。虚拟技术里，有一类狠角色，真是说瞎话不眨眼。
N久以前有个名叫Bochs的骗子，他就可以在任何CPU上运行，来模拟IA-32环境。可惜这个骗子的寿命不长，M久以前就翘辫子了。

跟Bochs几乎同时代的还有个PearPC开源项目，他可以在任何CPU上模拟PowerPC。也就是说，你可以在家里的PC上安装Linux，然后编译PearPC代码，然后运行PearPC，然后在模拟出的环境中安装AIX或者老版本的Mac OS！酷吧？！

可惜PearPC也寿禄不长，2005年底弄出模拟G4的0.4.0版之后，就再没动静了。后来另外一个叫做CherryOS的开源项目接过PearPC衣钵，又折腾了一年多时间，到处对人说他可以在PC上安装Mac OS，结果却一再推迟发布日期。后来人民群众不爱搭理他了，他也就如烟般散去了。

这些项目虽然最终不了了之，但是他们为后来的大骗子遗留下很多宝贵的骗术遗产。今天业界知名的大骗子&mdash;&mdash;QEMU就还一直沿用着Bochs遗留下来的BIOS模拟技术。
当然QEMU比他的前辈们出息多了，他已经发展成一个家族。用句文言文说，QEMU家族可谓NB得不得了。

他们可以平台无关的模拟x86、ARM、PowerPC、SPARC环境，而且速度非常快。据说效率可达80%，当然，俺也不知道这个80%是意味着什么，反正肯定不是送过去100个指令，最后只执行80个。

只要不太傻的人都知道，光有CPU是P也干不了的。还得有总线、I/O之类的外部环境。还好今天的QEMU已经可以完整的模拟一个主机环境，让你可以在Linux上模拟出IBM或Sun的小机工作站，甚至能模拟一个阵列控制器。

当然了，NB的事情总是高难度的。使用QEMU可不像使用VMware或者XEN那么容易，对各种真实硬件的支持也很不到位。可以原谅嘛，人家才是0.9版，而且还是个免费的开源，都是靠雷锋们为QEMU添砖加瓦。也不容易啊！

如果你只对商业软件感兴趣，可以关注一下Transitive这家公司。他们的产品叫QuickTransit，可以让Unix的程序在x86 Linux上运行。而且据说效率也很高。
现在QuickTransit可以支持的跨平台方式有：
SPARC Solaris到x86/x86_64 Linux；
SPARC Solaris到x86 Solaris；
PowerPC或MIPS到x86 Linux
这些不同的虚拟技术，虽然今天看来走得路子很接近，但是他们的祖宗并不是一个。
状如QEMU这样的CPU模拟器，最早源于那些写编译器的高手。这些又牛又懒的高手总想省事，恨不得写一个编译器就可以在各种CPU上到处用，于是就产生了今天跨平台指令实时互译的雏形。

而VMware和XEN，甚至包括Intel-VT、AMD-V的套路，主要师从于一个叫做&ldquo;服务器分区&rdquo;的技术。这是一门同样古老的技术，玩过Sun E10000的人一定对这种咚咚很熟悉。先在一台E10000里插上若干CPU、若干内存、若干板卡、若干菜刀&hellip;&hellip;然后再跑到console台上把某些CPU跟某些内存以及某些I/O划分成一个Domain。每个Domain就是一台机器，最后在Domain上装Solaris系统。
说到这里，不由得想起当年中国移动总局规划的一个愚蠢方案&mdash;&mdash;居然采购两台E10000做双机！那个脑子进水的技术主管显然没搞懂E10000咋用。

x86平台的服务器分区技术出现的也非常早，UniSys公司的机器就是用一堆x86 CPU搭成的类似E10000的模样。不过从&ldquo;分区&rdquo;到&ldquo;虚拟&rdquo;还是有明确界限的。如果分区的时候只能操作整个的CPU，就算&ldquo;分区&rdquo;；如果能把一个CPU切开，分配半个甚至更小的CPU资源，就算&ldquo;虚拟&rdquo;了。从这个角度说，E10000、UniSys和其它大冰箱，都还是只能分区不能虚拟。这也正是大部分刀片服务器，一般都会搭配VMware的原因。
不过例外总是有的。一个叫做Egenera的公司就做了几乎纯硬件的虚拟系统。
此外，一些InfiniBand交换设备也能提供类似的虚拟功能。
前面说操作系统虚拟的时候，忘了提一个挺酷的咚咚，在这打个补丁。
ReactOS是一个开源项目，目标是模拟一个Windows环境，让你的Windows程序可以直接运行在这个不花钱的操作系统上。

说Virtuozzo的时候没想起来ReactOS，是因为这两个软件虽然都是模拟操作系统环境，但是模式还是明显的不同。Virtuozzo是安装在操作系统上的软件，省不下买Windows的钱，而ReactOS本身就是一个完整的操作系统。不过ReactOS不能像Virtuozzo那样以一当十，只能起到女扮男装冒名顶替的作用。
对！有点像花木兰，不过Windows可不是ReactOS他爹，一点亲戚关系都没有。

有了ReactOS，你就可以理直气壮的运行那些原本只能在Windows上安装运行的程序，比如Office 2003，而不必担心查盗版的警察叔叔来敲门了。当然，要想不被警察叔叔带走，还有两个前提：
一是Office 2003本身不是盗版；
二是警察叔叔听说过ReactOS这个咚咚。

看来这两条都有点难，而且ReactOS目前还没做到那么好，暂时还不能支持Office 2003（昏倒！），只能运行Mozilla FireFox和部分Open Office组件。况且ReactOS目前支持的硬件也很有限，如果不想看到它启动中出现蓝屏，最好的办法就是用VMware或QEMU的虚机启动。
可以原谅嘛～雷锋们做的开源，而且还仅仅是0.3.1版本而已，已经很不错啦。

哦，对了，还有个补丁&hellip;&hellip;Stop扔ing西红柿！
不怨我这个蹩脚裁缝，实在是虚拟产品和技术太多，而且变化太快。CU上曾经有个2005年的帖子，给出过一些虚拟引擎的链接，今天再看的时候，90%以上的链接都已经实效了。

对于习惯了产品比较的坛友来说，下面这个链接也许能有点用。
http://en.wikipedia.org/wiki/Comparison_of_virtual_machines
这里总结了将近50个虚拟引擎，全面虽然谈不上，但还算是收录的比较多了。

前面颠三倒四的说了&ldquo;操作系统环境虚拟&rdquo;、&ldquo;主机资源虚拟&rdquo;、&ldquo;CPU模拟器&rdquo;等等，这些并不是虚拟世界的全部，还有很多&hellip;&hellip;
你说啥？虚拟存储？拜托～大家都是医生，就没必要互相开药方了吧。
我要说的是一个比较新的提法&mdash;&mdash;&ldquo;服务虚拟&rdquo;。
当然这个名词跟其它很多新名词一样，只是个新瓶子，里面装的是新旧混杂的鸡尾酒。







本文来自ChinaUnix博客，如果查看原文请点：http://blog.chinaunix.net/u/22468/showart_361898.html
</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
