Linux虚拟化技术分析(下)
z/VM是System z上的操作系统hypervisor。其核心是Control Program(CP),它为客户操作系统,包括Linux,提供了物理资源的虚拟化(参见图5)。这样,多个处理器和其他资源就可以在多个客户操作系统上被虚拟化。

图5. 使用z/VM的操作系统级虚拟化
z/VM也可以为想要相互通信的客户操作系统仿真一个客户局域网(LAN)。仿真完全是在hypervisor中进行的,因此相当安全。
Xen(超虚拟化)
Xen是一个来自于XenSource的操作系统级超虚拟化的免费开源解决方案。回想一下在超虚拟化中,hypervisor和操作系统会共同协作,虽然操作系统需要进行一些更改,但却可以带来接近于原始系统的性能。
就像Xen需要进行协作(对客户操作系统进行修改)一样,只有那些修补过的操作系统才可以通过Xen进行虚拟化。Linux本身就是开源的,所以从Linux角度来看,这是一个很合理的折衷,因为最终可以获得比完全虚拟化更好的性能。但是从广泛支持的角度来看(例如对其他非开源操作系统的支持),这显然是一个缺点。
Windows可以在Xen上作为一个客户操作系统运行,但是它只能在运行Intel Vanderpool或AMD Pacifica的系统上使用。支持Xen的其他操作系统包括Minix、Plan 9、NetBSD、FreeBSD和OpenSolaris。
User-mode Linux(超虚拟化)
User-mode Linux(UML)允许Linux操作系统在其他操作系统的用户空间中运行。每个客户Linux操作系统都存在于宿主Linux操作系统中的一个进程中(参见图6)。这就允许Linux内核(使用自己的相关用户空间)在单个Linux内核中运行。

图6. User-mode Linux中的Linux
在2.6版本的Linux内核中,UML驻留于主内核树内,但它必须提前启用,然后再重新编译才能使用。这些变化除了常见的虚拟化功能之外,还可以提供设备的虚拟化。这样一来,客户操作系统就可以共享可用的物理设备,例如块设备(比如软盘、CD-ROM和文件系统)、控制台、NIC 设备、声音硬件等。
注意由于客户内核是在应用程序空间中运行的,因此它们必须为这种用法而被特殊编译(不过它们可以是不同的内核版本)。这样就产生了主机内核(硬件上的内核)和客户内核(在主机内核的用户空间中运行)。这些内核甚至可以是嵌套的,这样就允许一个客户内核在另外一个运行于主机内核的客户内核上运行。
Linux-VServer(操作系统级虚拟化)
Linux-VServer是一个操作系统级虚拟化解决方案。Linux-VServer对Linux内核进行虚拟化,这样多个用户空间环境——又称为Virtual Private Server(VPS)——就可以单独运行,而不需要互相了解。Linux-VServer通过修改Linux内核实现用户空间的隔离。
要将各个用户空间与其他用户空间隔离开来,就需要从上下文的概念入手。上下文是给定VPS进程使用的一个容器,这样通过诸如ps之类的工具就可以了解VPS的进程。内核为最初的引导定义了一个缺省的上下文。另外管理端还能查看所有的上下文(所有的执行进程)。正如您可能猜到的那样,内核和内部数据结构也需要进行修改来支持这种虚拟化方法。
Linux-VServer还使用了一种chroot格式来为每个VPS隔离root目录。虽然chroot允许指定新root目录,但还是需要其他一些功能(称为 Chroot-Barrier)来限制VPS脱离其隔离的root目录回到上级目录。给定一个隔离的root目录之后,每个VPS就可以拥有自己的用户列表和root密码。
2.4和2.6版本的Linux内核支持Linux-VServer,它可以运行于很多平台之上,包括x86、x86-64、SPARC、MIPS、ARM 和 PowerPC。
OpenVZ(操作系统级虚拟化)
OpenVZ是另外一个操作系统级的虚拟化解决方案,它与Linux-VServer类似,不过也有一些有趣的区别。OpenVZ是一个支持虚拟化的内核(修改过的),可以支持用户空间隔离、VPS和一组用户管理工具。例如,您可以简单地从命令行创建一个新的VPS: |