繁体   English   中英

寻找一种检测我是否在虚拟机(Linux)中运行的好方法

[英]Looking for a nice way to detect if I am running in a Virtual Machine (Linux)

在VM中,OS提供的实时调度往往不可靠。 对于我的应用程序,我希望能够检测我是否在VM上运行(仅Linux)。

因此,我正在寻找一种检测(在C语言中)是否处于虚拟化环境中的好方法。 根据使用的VM,似乎使用了各种DMI和CPUID字符串。 我主要对通用方法感兴趣。

有人有任何想法吗?

Facter和Imvirt都会检测到一些虚拟化

您似乎想回答的真正问题是“实时调度工作不可靠吗?”。 那么,为什么不写一个测试,检查是否存在

您也可以在scsi设备中寻找VMware:

cat /proc/scsi/scsi | grep VMware

可能只会在虚拟机上成功


VM上的示例输出:

# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: VMware   Model: Virtual disk     Rev: 1.0
  Type:   Direct-Access                    ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 01 Lun: 00
  Vendor: VMware   Model: Virtual disk     Rev: 1.0
  Type:   Direct-Access                    ANSI SCSI revision: 02

实际机器上的示例输出:

# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: TSSTcorp Model: CDRW/DVD TSL462D Rev: DE01
  Type:   CD-ROM                           ANSI  SCSI revision: 05
Host: scsi6 Channel: 00 Id: 08 Lun: 00
  Vendor: DP       Model: BACKPLANE        Rev: 1.05
  Type:   Enclosure                        ANSI  SCSI revision: 05
Host: scsi6 Channel: 02 Id: 00 Lun: 00
  Vendor: DELL     Model: PERC 5/i         Rev: 1.03
  Type:   Direct-Access                    ANSI  SCSI revision: 05

我认为您将必须试探性地执行此操作。 虚拟化产品的部分目标是使vm实例相信它在真实硬件上运行。 每个虚拟化产品都将模拟特定的硬件,因此我的解决方案是建立一个库,您可以询问“我是不是在虚拟机上”,而只是在引擎盖下维护一些有关虚拟机存在的证据的搜索。 这样,您仍然相对远离检测虚拟机的烦恼。

查找仅在VM中显示的特定设备。 例如,标记为“ Parallels”或“ VMWare”的显示设备可能很好地表明您在VM中。

当然,这仅适用于您了解的VM,因此不是很通用。

这是一个代码示例: http : //www.codeproject.com/KB/system/VmDetect.aspx,http : //mark.michaelis.net/Blog/HowToDetectVirtualMachineExecution.aspx (但这是从2005年开始的)

在某些杂志中,我读到可以用硬件设置检测虚拟机,因为VM使用的仿真硬件数量有限。

ifconfig获取MAC地址,然后查找供应商代码(google:mac地址查找)。 如果您提前知道使用了哪种虚拟化平台,将对您有所帮助。

尽管不是确定的,但是您也可以检查您的接口名称... ifconfig会吐出“ venet0”而不是“ eth0”

同样,“ df”也会泄露一些信息:vmware-/ dev / vzfs citrix / xen-/ dev / xvda1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM