分辨 VPS 虚拟化类型方法介绍
在受限制的虚拟服务器中运行程序,有时会因为不支持某些功能模块而无法使用。因此很多教程文档建议先确认 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 |
其他 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,可以直接在控制面板里看到虚拟化类型。