VMware Linux Server —如何确定您是虚拟机还是真实硬件?


Answers:


29

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

cat /proc/scsi/scsi

要么

ethtool -i eth0

要么

dmidecode | grep -i vmware

如果这些命令的输出显示制造商名称为“ VMWare”的硬件,则说明您使用的是VMWare VM。由于系统配置和工具不同,此处提供了多个命令。


12
您能否解释这些命令的作用,而不仅仅是提供模糊的命令?
Stefan Lasiewski 2014年

谢谢。cat /proc/scsi/scsi很好,因为它似乎无处不在,并且不需要安装新软件或以特权权限运行。
tiktak 2014年

@tiktak我/proc/scsi/scsi在我的Debian 7盒子上看不到...
Kyle Strand

1
请注意,这不是100%可靠的。例如,AWS盒子似乎不会是VM。有关man virt-what为此检测目的而构建的启发式脚本(对于RedHat / Fedora系统)和所涉及的警告,请参阅。
通配符

13
facter virtual 
xenu

表示它是VM。如果返回“物理”,则相反(不是VM),例如:

facter virtual
Physical

但是,这是一个非标准的特殊包装...。但我喜欢它。
mdpc

1
@mdpc它应该存在于使用puppet的任何系统上。
迈克尔·汉普顿

11

有一个方便的应用程序,可能会帮助您称之为virt-what。我还没有在VMWare中使用它,但是它在Qemu上确实可以很好地工作。


1
不幸的是,在SuSE商业版上尝试使用二进制RPM时,它具有两个依赖关系dmidecode和util-linux-ng。
mdpc

10

您可能可以通过环顾四周获得想法/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

在我可以访问lshw的SuSE实例上不存在。此外,/ sys / class / dmi / ...不存在。
mdpc

6

某些虚拟环境使用有点讲故事的名称来命名其某些虚拟设备,例如,VirtualBox提供了一个称为“ VirtualBox Display Adapter”的图形卡。但是,寻找那些与特定VM以及可能范围较窄的版本的联系。

您的代码可能会看到可以设置什么样的虚拟化。如果完全失败,则可能是在VM中。但是,就像您可能容易地处于没有任何具有VM功能的硬件的盒子上一样。


您的第一个答案是正确的。检查设备驱动程序名称。
Izzy

4

对于Linux,您输入dmesg |grep DMI

虚拟主机输出

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

[root @ myhost〜]#dmesg | grep -i虚拟
DMI:Microsoft Corporation虚拟机/虚拟机,BIOS 090006,2012年5月23日
在裸机上引导半虚拟化内核
输入:Macintosh鼠标按钮模拟为/ devices / virtual / input / input1
scsi 0:0:0:0:Direct-Access Msft虚拟磁盘1.0 PQ:0 ANSI:4
输入: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]-2011年6月30日

1
解决方案的主要问题是dmesg会读取内核缓冲区,并且其大小有限。如果自系统重新启动以来有很多消息或一段时间,则此信息将不可用。
mdpc

4

有很多代码可以检测您是否在VM中。从红色药丸开始,然后从那里搜索。 进攻型计算机上的这篇论文也很不错。

那就是上面那些简单的方法都不起作用的时候:)


第一个链接断开。第二个是坏了还是很慢。
2016年

你是对的。时光流逝已经把它们吃光了……我看看是否可以提出替代链接。
比尔·魏斯

这是一个耻辱; “红色药丸”听起来很有趣。:)
通配符

1
更新了archive.org链接。
比尔·魏斯

3

您也可以在此处搜索mac地址的第一部分,以查看是否已将其列为已分配给任何虚拟化公司的地址。


有趣的主意...。我认为这
可行

2
不会可靠的。在许多情况下,可以将mac设置为任意值。这可以在将原始计算机的mac转换为VM时启用其克隆。某些软件将其许可证与Mac绑定在一起,通常无法获得新许可证(供应商破产或成本过高)。
Tonny

3

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

lspci | grep -i vmware

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

2

在Linux中,系统信息显示在/ sys / devices / virtual / dmi / id /中。请在这里查看我的答案以获取方便的脚本,以向您显示所有可用信息。

不需要root。


1

我不喜欢这些解决方案,因为通常会安装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内存控制驱动程序已初始化

3
这将在启动时起作用,但是稍后您不能保证dmesg没有被清除或溢出。
mattdm 2011年

这也是我通常要做的事情,那就是dmesg
tpaul

1

这对我来说效果更好,因为它为我提供了有关制造商和产品名称的特定信息。

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

Dell服务器上的输出:

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)

这对于可以解析这些脚本以更好地识别服务器的脚本非常有用...但是,如果您在基础架构中使用Chef,则可以Virtualization -> system在Chef服务器中检查node属性。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.