VMware Linux Server - jak rozpoznać, czy jesteś maszyną wirtualną czy prawdziwym sprzętem?

46

Ciekawe pytanie. Zalogowałem się na hoście Linux (najprawdopodobniej SuSE). Czy jest jakiś sposób, że mogę programowo powiedzieć, że jestem hostem VM, czy nie?

Załóżmy również, że vmtools nie są zainstalowane.

mdpc
źródło
Sprawdź również tę odpowiedź: unix.stackexchange.com/a/32605/103980
Muhamed Huseinbašić

Odpowiedzi:

29

Użyj standardowych narzędzi systemu Linux, aby sprawdzić sprzęt w systemie.

cat /proc/scsi/scsi

lub

ethtool -i eth0

lub

dmidecode | grep -i vmware

Jeśli dane wyjściowe tych poleceń pokazują sprzęt o nazwie producenta „VMWare”, oznacza to, że masz maszynę wirtualną VMWare. Udostępniono tutaj wiele poleceń, ponieważ konfiguracje systemu i narzędzia różnią się.

Greg Cain
źródło
12
Czy potrafisz wyjaśnić, co robią te polecenia, zamiast tylko wydawać niejasne polecenia?
Stefan Lasiewski
Dzięki. cat /proc/scsi/scsijest fajny, ponieważ wydaje się, że jest dostępny wszędzie i nie wymaga instalowania nowego oprogramowania ani uruchamiania z uprawnieniami uprzywilejowanymi.
tiktak
@tiktak Nie widzę /proc/scsi/scsina moim pudełku Debiana 7 ...
Kyle Strand
1
Pamiętaj, że nie jest to w 100% niezawodne. Na przykład skrzynki AWS nie będą wyglądać jak maszyny wirtualne. Zobacz man virt-whatskrypt heurystyczny zbudowany dla tego celu wykrywania (dla systemów RedHat / Fedora) i związane z tym zastrzeżenia.
Wildcard
13
facter virtual 
xenu

wskazuje, że jest to maszyna wirtualna. Jeśli zwrócił „fizyczny”, to prawda jest odwrotna (nie VM), np .:

facter virtual
Physical
użytkownik155575
źródło
Jest to jednak niestandardowy pakiet specjalny .... ale mi się podoba.
mdpc
1
@mdpc Powinien być obecny w każdym systemie używającym marionetki.
Michael Hampton
11

Jest przydatna aplikacja, która może pomóc o nazwie virt-what . Nie korzystałem z niego z VMWare, ale działało ładnie z Qemu.

Raynet
źródło
1
Niestety, binarne RPM ma dwie zależności dmidecode i util-linux-ng, gdy jest wypróbowany na reklamie SuSE.
mdpc
10

Być może uda ci się zdobyć pomysł i rozejrzeć się po okolicy /sys. Na przykład /sys/class/dmi/id/sys_vendorma wartość VMware, Inc..

Jeśli jest zainstalowany, możesz użyć lshw . Polecenie lshw -class systemzwraca to w moim systemie:

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
Zoredache
źródło
W instancjach SuSE, które mam dostęp do lshw, nie istnieje. Ponadto / sys / class / dmi / ... nie istnieje.
mdpc
6

Niektóre środowiska wirtualne nazywają niektóre ze swoich urządzeń wirtualnych nazwami, które są nieco wymowne, na przykład VirtualBox przedstawia kartę graficzną, która nazywa się „VirtualBox Display Adapter”. Ale szukanie tych łączy Cię z konkretną maszyną wirtualną i być może z wąską gamą wersji.

Kod może zobaczyć, jaki rodzaj wirtualizacji może skonfigurować. Jeśli to się nie powiedzie całkowicie, możesz być na maszynie wirtualnej. Ale równie łatwo możesz znaleźć się w pudełku, które nie ma sprzętu obsługującego maszyny wirtualne.

statyka
źródło
Twoja pierwsza odpowiedź była prawidłowa. Sprawdź nazwy sterowników urządzeń.
Izzy
4

W systemie Linux piszesz dmesg |grep DMI:

WIRTUALNE WYJŚCIE HOSTA

[root @ myhost ~] # dmesg | grep DMI
Obecny DMI 2.3.
DMI: Microsoft Corporation Virtual Machine / Virtual Machine, BIOS 090006 05/23/2012

[root @ myhost ~] # dmesg | grep -i virtual
DMI: Microsoft Corporation Virtual Machine / Virtual Machine, BIOS 090006 05/23/2012
Uruchamianie parawirtualizowanego jądra na czystym sprzęcie
input: Emulacja przycisku myszy Macintosh jako / devices / virtual / input / input1
scsi 0: 0: 0: 0: Bezpośredni dostęp Msft Virtual Disk 1.0 PQ: 0 ANSI: 4
wejście: Mysz zgodna z Microsoft Vmbus HID jako / devices / virtual / input / input4

NA PRZYKŁAD FIZYCZNY

[root @ backdev1 ~] # dmesg | grep DMI
Obecny DMI 2.5.
DMI: IBM System x3650 M3 - [7945AC1] - / 90Y4784, BIOS - [D6E153AUS-1.12] - 30.06.2011
użytkownik215983
źródło
1
głównym problemem związanym z tym rozwiązaniem jest to, że dmesg odczytuje bufor jądra i ma on ograniczony rozmiar. Jeśli od momentu ponownego uruchomienia systemu jest dużo wiadomości lub trochę czasu, informacje te nie będą dostępne.
mdpc
4

Istnieje wiele kodów do wykrycia, czy jesteś na maszynie wirtualnej, czy nie. Zacznij od czerwonej pigułki i szukaj stamtąd. Ten artykuł w Offensive Computing jest również dobrą lekturą.

Tak, jeśli żaden z tych łatwych powyżej nie działa :)

Bill Weiss
źródło
Pierwszy link jest zepsuty. Drugi jest zepsuty lub wolny.
Wildcard
Masz rację. Zjadły je piaski czasu ... Zobaczę, czy uda mi się znaleźć alternatywne linki.
Bill Weiss,
Szkoda; „czerwona pigułka” brzmiała interesująco. :)
Wildcard,
1
Zaktualizowano z linkami archive.org.
Bill Weiss,
3

Możesz również przeszukać pierwszą część adresu mac tutaj i sprawdzić, czy jest wymieniony jako przypisany do dowolnej firmy zajmującej się wirtualizacją.

Zypher
źródło
Ciekawy pomysł .... Myślę, że to działa (o ile urządzenie sieciowe jest zawarte w maszynie wirtualnej ;-))
mdpc 16.09.09
2
Nie będzie wiarygodny. W wielu przypadkach mac można ustawić na dowolną wartość. Umożliwia to klonowanie komputera Mac oryginalnego komputera podczas konwertowania go na maszynę wirtualną. Niektóre programy wiążą swoją licencję z komputerem Mac i często nie jest możliwe uzyskanie nowej licencji (sprzedawca zbankrutował lub koszty są wygórowane).
Tonny
3

Urządzenia wirtualne zostaną również ujawnione przez lspci i / lub informacje o urządzeniu dyskowym w / proc:

lspci | grep -i vmware

grep -i vmware /proc/scsi/scsi /proc/ide/*/model
Wrzosowisko
źródło
2

W systemie Linux informacje o systemie są ujawniane w / sys / devices / virtual / dmi / id /. Zobacz moją odpowiedź tutaj, aby znaleźć przydatny skrypt pokazujący wszystkie dostępne informacje.

root nie jest wymagany.

Mike S.
źródło
1

Nie podobało mi się żadne z tych rozwiązań, ponieważ zwykle jest zainstalowany sterownik CD-ROM VMware lub sterownik pamięci, więc dmesg szybko mi to potwierdza lub zaprzecza.

[serwer @ użytkownik ~] $ dmesg | grep VMware
hda: VMware Virtual IDE CDROM Drive, ATAPI CD / DVD-ROM
Producent: VMware Model: Dysk wirtualny Rev: 1.0
Producent: VMware Model: Dysk wirtualny Rev: 1.0
Producent: VMware Model: Dysk wirtualny Rev: 1.0
Producent: VMware Model: Dysk wirtualny Rev: 1.0
Producent: VMware Model: Dysk wirtualny Rev: 1.0
Producent: VMware Model: Dysk wirtualny Rev: 1.0
Producent: VMware Model: Dysk wirtualny Rev: 1.0
Zainicjowany sterownik kontroli pamięci VMware
Greg
źródło
3
Będzie to działać przy starcie, ale później nie możesz zagwarantować, że dmesg nie został wyczyszczony lub przepełniony.
mattdm,
Tak też zwykle robię, czyli grepping dmesg
tpaul
1

To działało dla mnie lepiej, ponieważ daje mi szczegółowe informacje o producencie i nazwie produktu.

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

Dane wyjściowe na serwerze Dell:

Manufacturer: Dell Inc.
Product Name: PowerEdge C5220

Dane wyjściowe na maszynie wirtualnej Virtualbox:

Manufacturer: innotek GmbH
Product Name: VirtualBox

Dane wyjściowe na KVM / QEMU:

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

Jest to świetne w przypadku skryptów, które mogą je analizować w celu lepszej identyfikacji serwerów ... ale jeśli używasz Chef w swojej infrastrukturze, możesz sprawdzić atrybut węzła Virtualization -> systemna serwerze szefa kuchni.

użytkownik751528
źródło