VMware Linux服务器 – 你怎么知道你是虚拟现实还是真正的硬件?

一个有趣的问题。 我已经login到一个Linux(最有可能的SuSE)主机。 有什么方法可以通过编程方式告诉我是否是VM主机?

另外假定vmtools没有安装。

使用标准的Linux工具来检查系统上的硬件。

cat /proc/scsi/scsi 

要么

 ethtool -i eth0 

要么

 dmidecode | grep -i vmware 

如果这些命令的输出显示的是制造商名称为“VMWare”的硬件,则表示您在VMWare VM上。 这里提供了多个命令,因为系统configuration和工具有所不同。

 facter virtual xenu 

表示这是一个虚拟机。 如果它返回“物理”,则情况正好相反(不是虚拟机),例如:

 facter virtual Physical 

有一个方便的应用程序,可能有助于称为德什么 。 我没有使用它与VMWare,但它确实与Qemu很好地工作。

您可以通过在/sys下查看来获得和想法。 例如, /sys/class/dmi/id/sys_vendor具有VMware, Inc. .的值。

如果安装了,你可以使用lshw 。 命令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 

一些虚拟环境命名了一些虚拟设备,名称有些简单,例如,VirtualBox提供一个自称为“VirtualBox显示适配器”的graphics卡。 但是寻找那些与特定的虚拟机有关系,可能还有一个很窄的版本。

您的代码可能会看到可以设置的虚拟化types。 如果完全失败,你可能会在虚拟机中。 但是,你可能很容易就在没有任何虚拟机硬件的盒子上。

对于Linux,inputdmesg |grep DMI

虚拟主机输出

 [root @ myhost〜]#dmesg | grep DMI
 DMI 2.3存在。
 DMI:Microsoft Corporation虚拟机/虚拟机,BIOS 090006 05/23/2012

 [root @ myhost〜]#dmesg | grep -i virtual
 DMI:Microsoft Corporation虚拟机/虚拟机,BIOS 090006 05/23/2012
在裸机上启动半虚拟化内核
input:Macintosh鼠标button仿真为/ devices / virtual / input / input1
 scsi 0:0:0:0:直接访问Msft虚拟磁盘1.0 PQ:0 ANSI:4
input:Microsoft Vmbus HID兼容鼠标作为/ devices / virtual / input / input4

对于物理主机的例子

 [root @ backdev1〜]#dmesg | grep DMI
 DMI 2.5存在。
 DMI:IBM System x3650 M3  -  [7945AC1]  -  / 90Y4784,BIOS  -  [D6E153AUS-1.12]  -  06/30/2011

有很多代码可以检测你是否在虚拟机中。 从红丸开始,从那里search。 这篇论文在Offensive Computing上也是一个很好的阅读。

那就是如果没有那些简单的工作:)

您也可以在这里search您的mac地址的第一部分,看看它是否被列为分配给任何虚拟化公司。

虚拟设备也将通过/ proc中的lspci和/或磁盘设备信息显示:

 lspci | grep -i vmware grep -i vmware /proc/scsi/scsi /proc/ide/*/model 

我不喜欢这些解决scheme,因为通常会安装VMware CDROM驱动程序或内存驱动程序,以便dmesg能够快速确认或拒绝它。

 [server @ user〜] $ dmesg | grep VMware
 hda:VMware虚拟IDE CDROM驱动器,ATAPI CD / DVD-ROM驱动器
供应商:VMware型号:虚拟磁盘修订版:1.0
供应商:VMware型号:虚拟磁盘修订版:1.0
供应商:VMware型号:虚拟磁盘修订版:1.0
供应商:VMware型号:虚拟磁盘修订版:1.0
供应商:VMware型号:虚拟磁盘修订版:1.0
供应商:VMware型号:虚拟磁盘修订版:1.0
供应商:VMware型号:虚拟磁盘修订版:1.0
 VMware内存控制驱动程序初始化

在Linux中,系统信息显示在/ sys / devices / virtual / dmi / id /中。 在这里看到我的答案是一个方便的脚本来显示所有可用的信息。

根不是必需的。

这对我来说更好,因为它给了我关于制造商和产品名称的具体信息。

 dmidecode -t system|grep 'Manufacturer\|Product' 

戴尔服务器上的输出:

 Manufacturer: Dell Inc. Product Name: PowerEdge C5220 

在Virtualbox VM上输出:

 Manufacturer: innotek GmbH Product Name: VirtualBox 

KVM / QEMU输出:

 Manufacturer: QEMU Product Name: Standard PC (i440FX + PIIX, 1996) 

这对于可以parsing这些以更好地识别服务器的脚本来说非常好,但是如果您在基础架构中使用Chef,则可以检查厨师服务器中的节点属性Virtualization -> system