如何分辨VPS属于哪种虚拟化环境

Kevin 教程 1,068 次浏览 抢沙发

在受限制的虚拟服务器中运行程序,有时会因为不支持某些功能模块而无法使用。因此很多教程文档建议先确认VPS虚拟化环境,然后再安装配置。如果你在VPS商家处没有得到相关信息,可以使用下面方法检测VPS使用何种虚拟化技术。

使用virt-what程序快速检测

virt-what是一个检测服务器虚拟化环境的shell脚本,支持识别大量虚拟机管理程序。可以从系统软件包管理器里获取,安装命令如下。

操作系统 安装命令
CentOS yum install virt-what
Ubuntu & Debian apt-get install virt-what
Fedora dnf install virt-what
Arch Linux pacman -S virt-what
Gentoo emerge virt-what
备注:如果安装提示无法找到virt-what,先运行更新一遍软件包管理器再尝试

其他Linux发行版系统,可以通过virt-what源代码编译安装(需确保系统有安装合适的编译器)

# 编译安装命令示例
wget -N --no-check-certificate https://people.redhat.com/~rjones/virt-what/files/virt-what-1.18.tar.gz && tar zxf virt-what-1.18.tar.gz && cd virt-what-1.18 && ./configure && make && make install

安装virt-what后,运行virt-what命令即可检测。支持检测的虚拟化类型可以参考下面表格。

检测结果 虚拟环境
kvm 基于硬件结构支持与Linux内核模块的虚拟化
openvz 基于Linux操作系统层的容器式虚拟化
xen 基于硬件的系统级虚拟化,区分Xen-HVM全虚拟和Xen-PV半虚拟,前者需要CPU虚拟化扩展支持,后者应用较广泛,不依赖硬件辅助,但需Linux内核支持
xen-dom0 运行在Xen管理程序之上的初始启动虚拟机,具有特殊权限,能直接访问硬件和与其他虚拟机(DomU)交互
xen-domU DomU是非特权虚拟机简称,与Dom0对应
xen-hvm Xen完全虚拟化类型,宿主机CPU硬件需具备虚拟化功能,虚拟机不需要特殊系统内核
vmware 硬件虚拟化,VMware ESXi管理程序直接运行于物理机,以控制管理虚拟机
vmm 系统级虚拟化,由OpenBSD本地虚拟机管理程序创建运行虚拟机
hyperv Hyper-V是基于管理程序的虚拟化技术,根据分区实现虚拟机隔离
virtualpc 系统级虚拟化,由Microsoft VirtualPC虚拟机软件创建运行虚拟机
virtualbox 硬件虚拟化,在没硬件辅助虚拟化情况下,VirtualBox采用基于软件虚拟化
virtage 硬件辅助虚拟化,Virtage硬件分区系统
qemu 广泛应用的开源计算机模拟器软件,分用户模式与系统模式两种运行模式
uml 用户模式Linux虚拟机,系统应用程序类虚拟化,集成于Linux内核中,虚拟机可以访问主机文件系统和硬件
lxc Linux软件容器虚拟化,利用Linux内核cgroups功能与命名空间为程序提供独立的系统环境
bhyve FreeBSD虚拟机管理程序,可模拟BSD、Linux和Windows虚拟机系统环境
rhev 红帽RHV虚拟化平台,基于KVM虚拟机管理程序技术,额外提供一系列增强功能,为企业级可扩展性和性能而设计
docker 系统层容器式虚拟化技术,通过软件创建隔离程序运行环境,具有启动快、资源开销小的优势
powervm_lx86 IBM Power服务器平台的一项虚拟化技术,通过Lx86二进制转换器可无经修改直接运行Linux/x86程序
parallels 由Parallels桌面或服务器虚拟化软件创建的虚拟机
ovirt 社区版虚拟化平台oVirt Node,使用KVM模块和libvirt管理软件创建和管理虚拟机,具有精简灵活、方便定制特点
lkvm kvmtool是一款轻量级虚拟化工具,不同于KVM依赖QEMU,具有代码精简的特点
aws 亚马逊云服务器环境,采用Nitro虚拟机管理程序(基于KVM),部分实例也可能使用Xen管理程序
linux_vserver-host 系统级虚拟化,Linux-VServer可安全为用户空间分配系统资源,常用于虚拟主机服务,具有安全隔离特点,容器内运行的程序只能访问分配到的内容和设备。这里virt-what表示运行在Linux-VServer主机环境
linux_vserver-guest 与linux_vserver-host对应,程序运行在Linux-VServer虚拟容器内
linux_vserver 为向下兼容旧版本提供的选项,表示未能分辨Linux-VServer主机或容器环境
ldoms Linux for SPARC系统上运行的虚拟环境,由Oracle VM Server平台虚拟化(采用Xen虚拟机管理技术)
ldoms-control 采用yiacSPARC(逻辑域)控制的Oracle VM Server
ldoms-guest 采用yiacSPARC(逻辑域)控制的Oracle VM Server虚拟机
ldoms-root 采用yiacSPARC(逻辑域)控制的Oracle VM Server Root虚拟机
ldoms-io 采用yiacSPARC(逻辑域)控制的Oracle VM Server I/O虚拟机
ibm_power-kvm IBM Power架构服务器上运行的虚拟机,使用KVM虚拟机管理技术
ibm_power-lpar_dedicated
ibm_power-lpar_shared
IBM逻辑分区虚拟机(LPAR),具有专用I/O的IBM LPAR与带有虚拟I/O的IBM LPAR
ibm_systemz IBM Z(或其他S/390)硬件分区系统
ibm_systemz-direct 直接在IBM Z硬件分区系统上运行的Linux,这是一个不寻常配置,检测结果未确认
ibm_systemz-lpar 直接在IBM Z硬件分区系统上的LPAR上运行的Linux
ibm_systemz-zvm 在IBM Z硬件分区系统中的LPAR上运行的z/VM虚拟机
ibm_systemz-kvm 在IBM Z硬件系统上运行的KVM虚拟机
virt 服务器似乎存在某种虚拟化,但virt-what未能检测出具体虚拟化技术

通过查看VPS设备信息判断

除了直接使用程序检测外,还可以借助dmesg命令查看内核消息缓冲区里的诊断信息,从而判断属于哪种虚拟化环境。使用例子如下。

# dmesg | grep -i virtual
[    0.000000] Booting paravirtualized kernel on KVM

上面示范命令使用了grep匹配输出,如果你执行后没有显示有价值信息,可以只运行dmesg或直接查看存储日志文件cat /var/log/dmesg(信息量很大,可更换less /var/log/dmesg命令减少输出)。在输出内容里搜索相关虚拟化信息,例如根据下面信息也可以判断VPS使用KVM虚拟化技术。

[    0.000000] DMI: Red Hat KVM, BIOS 0.5.1 01/01/2007
[    0.000000] Hypervisor detected: KVM

有时使用dmesg可能判断不了,如OpenVZ虚拟机下运行dmesg命令不能返回输出。这时可以根据系统目录判断,通常OpenVZ有vz目录,Xen有xen目录。

# ls -al /proc/vz
veinfo  veinfo_redir  veredir  vestat  vzaquota  vzdata

除了上面方法,使用dmidecode命令查看BIOS等硬件信息也可以辅助判断,通常至少会有一个组件将自己标识为虚拟化。

最后,如果你的VPS商家提供VPS控制面板,如SolusVM,可以直接在控制面板里看到虚拟化类型。

发表评论

电邮地址用于 Gravatar 头像显示,不会被公开可见。