簡體   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