2009-11-04 7 views
2

В виртуальных машинах, предоставляемых в режиме реального времени, планирование в режиме реального времени не является надежным. Для моего приложения я хотел бы узнать, работает ли я на виртуальной машине или нет (только для Linux).Ищете хороший способ определить, запущен ли я на виртуальной машине (Linux)

Так что я ищу хороший способ обнаружить (в C), находится ли я в виртуализованной среде. В зависимости от используемой виртуальной машины, похоже, используются различные строки DMI и CPUID. Тем не менее, меня интересует общий характер.

У кого-нибудь есть идеи?

+1

Только эвристика существует. Примите это и продолжайте. – ephemient

+0

Вот также пакет для Ubuntu, который я обнаружил сегодня.Он называется imvirt. Посмотрите на него по адресу http://micky.ibh.net/~liske/imvirt.html. Думайте, что это может быть полезно, althoug это в PERL. –

ответ

0

Ищите конкретные устройства, которые отображаются только во время работы виртуальной машины. Например, устройство отображения с надписью «Parallels» или «VMWare» может быть хорошим показателем того, что вы находитесь в виртуальной машине.

Конечно, это работает только для виртуальных машин, о которых вы знаете, и, следовательно, не очень общий.

+0

DMI и CPUID более полезны для такого рода вещей. Но эти команды уже сосут, потому что они эвристики. – user175104

3

facter и imvirt оба обнаружить некоторое virtualizations

+0

и есть, по крайней мере, третий инструмент для этого: virt-what Посмотрите, как этот проект делает это – ptman

+0

И ни один из них не очень хорош для использования с C – user175104

+0

Правда, поэтому я добавил «возьмите посмотрите, как эти проекты делают это " – ptman

1

Я думаю, что вы будете иметь, чтобы сделать это эвристический. Часть цели продуктов виртуализации состоит в том, чтобы сделать экземпляр vm верным, что он работает на реальном оборудовании. Каждый продукт виртуализации собирается имитировать конкретное оборудование, поэтому мое решение состояло бы в том, чтобы создать библиотеку, которую вы можете задать «я на vm» и просто поддерживаю под капотом некоторый поиск доказательств присутствия vm. Таким образом, вы все еще остаетесь относительно изолированными от nitty gritty для обнаружения vm.

2

Кажется, что реальный вопрос, на который вы хотите получить ответ, - «Неправильно ли работает планирование в режиме реального времени?». Так почему бы не написать тест, который проверяет на , что?

0

Вот пример кода: http://www.codeproject.com/KB/system/VmDetect.aspx, http://mark.michaelis.net/Blog/HowToDetectVirtualMachineExecution.aspx (но это с 2005 года)

И в каком-то журнале я прочитал, что виртуальная машина может быть обнаружена с помощью аппаратного набора, поскольку VM использует ограниченный набор эмулируемое оборудование.

0

, хотя и не является окончательным, вы также можете проверить имена интерфейсов ... Ifconfig бы выплюнуть «venet0», а не «eth0»

также, «ДФ» будет раздавать некоторые говорит: VMware -/DEV/vzfs Citrix/Xen -/DEV/xvda1

1

Вы можете также искать для VMware в Scsi устройств:

cat /proc/scsi/scsi | grep VMware 

, вероятно, удастся только на виртуальных машинах


пример вывода ВМ:

# 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 
0

IFCONFIG, чтобы получить МАС-адрес, а затем найти код поставщика (Google: макинтош адресный поиск). Помогает, если вы заранее знаете, какая платформа виртуализации используется.