开源虚拟化系统知多少
2010-03-27 17:25:29 阿炯

虚拟化使企业能够最大限度地利用现有的硬件资源,从而节省在IT上的投入,虚拟化平台目前已然成为VMware,微软和思杰三足鼎立之势,但也不乏有一些开源虚拟化产品可供人们选择,我们找到的一些有代表性的开源虚拟化平台供您参考和使用。

开源虚拟化系统1、VirtualBox
VirtualBox是一个强大的x86和AMD64/Intel64虚拟化产品,既可以在企业中应用,又可以在家里使用,VirtualBox不仅具有丰富的功能,可以为企业提供高性能产品,而且它也是基于开源GPL协议的唯一专业虚拟化解决方案。但不知Oracle收购SUN后会如何处置它。

开源虚拟化系统2、Xen
Xen管理程序是一款功能强大的开源虚拟化行业标准,为x86,x86_64,IA64,ARM和其它CPU架构的虚拟化提供了一套强大,高效和安全的特性,它支持几乎所有的客户机操作系统,包括Windows,Linux,Solaris,以及不同版本的BSD操作系统。

开源虚拟化系统3、Cooperative Linux
Cooperative Linux的缩写就是coLinux,它允许微软Windows和Linux内核同时并行运行在同一机器上。

开源虚拟化系统4、FreeVPS
FreeVPS是一个遵循GPL许可的Linux内核虚拟化补丁,它允许将单个服务器使用操作系统级虚拟化技术分隔成相对独立的虚拟私有服务器(Virtual Private Server,VPS)。

开源虚拟化系统5、OpenVZ
OpenVZ是一个基于容器的Linux虚拟化平台,OpenVZ在一台物理服务器上创建多个安全的,孤立的容器(或称为虚拟环境或VPS),从而更好地利用服务器,并确保应用程序不会发生冲突。每个容器就象一个独立的服务器一样独立执行。容器可以重新启动,并有root 访问权限,用户,ip地址,内存,进程,文件和应用程序,系统库和配置文件。

开源虚拟化系统6、Bochs
Bochs是一个便携式x86和x86_64 IBM PC兼容的模拟器和调试器,它可以模拟处理器(包括保护模式),内存,磁盘,显示器,以太网,BIOS和普通的PC硬件外设。

开源虚拟化系统7、Open Virtual Platforms
OVPsim是一个多处理器平台模拟器,它使用动态二进制转换技术,实现高速模拟,它提供了公共API,允许用户创建他们自己的处理器,外围设备和平台模式。

开源虚拟化系统8、PearPC
PearPC是一个独立于架构的PowerPC平台模拟器,它可以运行许多PowerPC操作系统,包括MAC OS X,Darwin和Linux。

开源虚拟化系统9、基于内核的虚拟机(Kernel-based Virtual Machine,KVM)
KVM是x86上完整的Linux虚拟化解决方案,包括虚拟化扩展(Intel VT和AMD-V)。

开源虚拟化系统10、Mac-on-Linux
Mac-on-Linux是一款为了在PowerPC上运行的Linux上运行MAC OS X的虚拟机程序,他也可以用来运行另一个基于PowerPC的操作系统的实例。

开源虚拟化系统11、Linux On Linux
正如它的名字所包含的意义那样,Linux On Linux就是让你一个Linux上运行另一个Linux的。

开源虚拟化系统12、Linux-Vserver
Linux-VServer提供GNU/Linux虚拟化,它是通过内核级隔离实现的,可以一次运行多个虚拟单元,这些单元之间有充分的隔离,以保证其所需的安全,同时可以有效地利用现有资源,因为它们运行在相同的内核上。

开源虚拟化系统13、Gxemul
GXemul是一个全系统计算机架构模拟器,有几个真实的机器在这个框架内已经实现,包括处理器(ARM,MIPS,Motorola 88k,PowerPC和SuperH)和周边硬件设备,如缓冲存储器,中断控制器,总线,硬盘控制器和串行控制器。这个模拟器相当稳定,可以同时运行多个客户端机操作系统。

开源虚拟化系统14、Hercules
Hercules可以模拟为IBM大型机(System/370,System/390和zSeries)设计的程序运行在其它硬件平台上的情况,特别是低成本的个人电脑。虽然还有其它的模拟器执行类似的功能,但Hercules让个人有机会在他们的PC机上运行大型机应用程序。

开源虚拟化系统15、JPC
JPC是一个用纯Java语言编写的x86模拟器,它可以运行在任何支持Java虚拟机的平台上,它可以创建Virtual PC兼容的可以运行在MS-DOS或其它x86操作系统上的虚拟机。JPC中的程序可以达到原生处理器速度的20%。

操作系统能感知自己是在虚拟机中运行吗

如果系统使用了systemd来做为初始管理系统,可以运行systemd-detect-virt指令来看主机操作系统运行时的环境。

该命令的工作原理其实不难:通过一系列预设的探索策略,检查运行在虚拟机中的操作系统的“隐秘角落”,寻找真相。比如,最简单的策略之一就是扫描如下文件:
/sys/class/dmi/id/product_name、sys_vendor、board_vendor、bios_vendor、product_version

若在其中发现 VirtualBox、VMware、AmazonEC2、QEMU 等关键词,就可以知道自己是运行在对应的虚拟机中。

/sys/class/dmi 是什么
在 Linux 系统中,/sys/class/dmi 是一个虚拟文件系统路径(执行 mount 命令可以看到, sysfs on/sys type sysfs(rw,noexec,nosuid,nodev)),用于访问有关硬件系统的信息,尤其是与 DMI(Desktop Management Interface)相关的数据。

DMI 是一种用于在计算机系统中管理硬件的信息接口,提供系统厂商(sys_vendor)、主板(board_vendor)、BIOS(bios_vendor)等详细信息。systemd-detect-virt 会优先根据从 /sys/class/dmi/id/ 中看到的内容为判断依据,接收来自此处的信号。那是否能通过篡改这些文件从而让操作系统误以为运行在另一个虚拟空间中呢?理论上是可以的,只不过这些文件的权限是不能被直接修改的。

其他策略还包括探索 /proc/device-tree/、/sys/hypervisor/ 等路径的内容。当无法从这些特殊的文件中找到有价值的信息时,该命令还会执行 x86 架构 CPU 中的一条特殊指令 CPUID,以此来获取虚拟环境的信息。

此外该命令还能判断操作系统是否运行在 Docker、LXC 等容器中。除了 systemd-detect-virt 命令,hostnamectl 命令也能输出有关操作系统运行环境的信息。


该文章最后由 阿炯 于 2024-12-16 10:44:53 更新,目前是第 3 版。