一个有趣的问题。我已登录 Linux(很可能是 SuSE)主机。有没有什么方法可以通过编程判断我是否是 VM 主机?
还假设 vmtools 尚未安装。
答案1
使用标准 Linux 工具检查系统上的硬件。
cat /proc/scsi/scsi
或者
ethtool -i eth0
或者
dmidecode | grep -i vmware
如果这些命令的输出显示制造商名称为“VMWare”的硬件,则说明您使用的是 VMWare VM。由于系统配置和工具不同,因此这里提供了多个命令。
答案2
facter virtual
xenu
表示它是虚拟机。如果返回“物理”,则相反(不是虚拟机),例如:
facter virtual
Physical
答案3
您可能能够通过查看 来获得想法/sys
。例如/sys/class/dmi/id/sys_vendor
的值为VMware, Inc.
。
如果已安装,您可以使用瘦身。该命令lshw -class system
在我的系统上返回以下内容:
server1
description: Computer
product: VMware Virtual Platform
vendor: VMware, Inc.
version: None
serial: VMware-...
width: 64 bits
capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32
答案4
一些虚拟环境会给某些虚拟设备起一些比较明显的名称,例如 VirtualBox 会将显卡命名为“VirtualBox 显示适配器”。但寻找这些名称会将您与特定的 VM 以及可能的范围较小的版本联系起来。
您的代码可能能够看到它可以设置哪种虚拟化。如果完全失败,您可能处于虚拟机中。但您也可能处于没有任何支持虚拟机的硬件的机器上。