分辨 VPS 虚拟化类型方法介绍

Eric 百科 292 次浏览 抢沙发

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

发表评论

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