VMware Linux Server - Wie können Sie feststellen, ob Sie ein VM oder eine echte Hardware sind?

46

Eine interessante Frage. Ich habe mich bei einem Linux-Host (höchstwahrscheinlich SuSE) angemeldet. Kann ich programmgesteuert feststellen, ob ich ein VM-Host bin oder nicht?

Nehmen Sie auch an, dass die vmtools nicht installiert sind.

mdpc
quelle
Überprüfen Sie auch diese Antwort: unix.stackexchange.com/a/32605/103980
Muhamed Huseinbašić

Antworten:

29

Verwenden Sie Standard-Linux-Tools, um die Hardware auf dem System zu überprüfen.

cat /proc/scsi/scsi

oder

ethtool -i eth0

oder

dmidecode | grep -i vmware

Wenn die Ausgabe dieser Befehle Hardware mit dem Herstellernamen "VMWare" anzeigt, befinden Sie sich auf einer VMWare-VM. Hier werden mehrere Befehle bereitgestellt, da die Systemkonfigurationen und -tools unterschiedlich sind.

Greg Cain
quelle
12
Können Sie erklären, was diese Befehle bewirken, anstatt nur vage Befehle bereitzustellen?
Stefan Lasiewski
Vielen Dank. cat /proc/scsi/scsiist nett, weil es anscheinend überall verfügbar ist und keine neue Software installiert oder mit privilegierten Rechten ausgeführt werden muss.
Tiktak
@tiktak Ich sehe es nicht /proc/scsi/scsiauf meiner Debian 7-Box ...
Kyle Strand
1
Beachten Sie, dass dies nicht 100% zuverlässig ist. Beispielsweise werden AWS-Boxen nicht als VMs angezeigt. Siehe man virt-whatfür das heuristische Skript, das für diesen Erkennungszweck erstellt wurde (für RedHat / Fedora-Systeme) und für die damit verbundenen Vorsichtsmaßnahmen.
Wildcard
13
facter virtual 
xenu

zeigt an, dass es sich um eine VM handelt. Wenn es "physisch" zurückgegeben hat, ist das Gegenteil der Fall (keine VM), z. B .:

facter virtual
Physical
user155575
quelle
Dies ist jedoch ein nicht-standardmäßiges Spezialpaket .... aber ich mag es.
mdpc
1
@mdpc Es sollte auf jedem System vorhanden sein, das Puppet verwendet.
Michael Hampton
11

Es gibt eine praktische App namens virt-what . Ich habe es nicht mit VMWare verwendet, aber es hat gut mit Qemu funktioniert.

Raynet
quelle
1
Leider hat das Binär-RPM zwei Abhängigkeiten, dmidecode und util-linux-ng, wenn es mit SuSE Commercial ausprobiert wird.
mdpc
10

Sie könnten in der Lage sein, eine Idee zu bekommen, indem Sie sich unter umschauen /sys. Zum Beispiel /sys/class/dmi/id/sys_vendorhat einen Wert von VMware, Inc..

Wenn es installiert ist, können Sie lshw verwenden . Der Befehl lshw -class systemgibt dies auf meinem System zurück:

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
quelle
Auf den SuSE-Instanzen, auf die ich Zugriff habe, existiert lshw nicht. Außerdem existiert / sys / class / dmi / ... nicht.
mdpc
6

Einige virtuelle Umgebungen benennen einige ihrer virtuellen Geräte mit etwas verräterischen Namen, z. B. VirtualBox mit einer Grafikkarte, die sich selbst "VirtualBox Display Adapter" nennt. Aber wenn Sie nach solchen suchen, sind Sie an eine bestimmte VM und möglicherweise an eine begrenzte Anzahl von Versionen gebunden.

Möglicherweise kann Ihr Code sehen, welche Art von Virtualisierung er einrichten könnte. Wenn dies vollständig fehlschlägt, befinden Sie sich möglicherweise in einer VM. Aber Sie könnten genauso leicht auf einer Box sein, die keine VM-fähige Hardware hat.

staticsan
quelle
Ihre erste Antwort war die richtige. Überprüfen Sie die Gerätetreibernamen.
Izzy
4

Für Linux geben Sie Folgendes ein dmesg |grep DMI:

VIRTUAL HOST OUTPUT

[root @ myhost ~] # dmesg | grep DMI
DMI 2.3 vorhanden.
DMI: Virtuelle Maschine / Virtuelle Maschine der Microsoft Corporation, BIOS 090006 23.05.2012

[root @ myhost ~] # dmesg | grep -i virtual
DMI: Virtuelle Maschine / Virtuelle Maschine der Microsoft Corporation, BIOS 090006 23.05.2012
Paravirtualisierten Kernel auf nackter Hardware booten
input: Macintosh-Maustastenemulation als / devices / virtual / input / input1
scsi 0: 0: 0: 0: Msft Virtual Disk 1.0 mit Direktzugriff PQ: 0 ANSI: 4
Eingabe: Microsoft Vmbus HID-kompatible Maus als / devices / virtual / input / input4

FÜR PHYSICAL HOST BEISPIEL

[root @ backdev1 ~] # dmesg | grep DMI
DMI 2.5 vorhanden.
DMI: IBM System x3650 M3 - [7945AC1] - / 90Y4784, BIOS - [D6E153AUS-1.12] - 30.06.2011
user215983
quelle
1
Ein Hauptproblem bei Ihrer Lösung ist, dass dmesg den Kernel-Puffer ausliest und von begrenzter Größe ist. Wenn seit dem Neustart des Systems viele Nachrichten oder einige Zeit vergangen sind, sind diese Informationen nicht verfügbar.
mdpc
4

Es gibt viele Codes, mit denen Sie feststellen können, ob Sie sich in einer VM befinden oder nicht. Beginnen Sie mit der roten Pille und suchen Sie von dort aus. Dieses Papier bei Offensive Computing ist auch eine gute Lektüre.

Das ist, wenn keiner dieser einfachen oben funktioniert :)

Bill Weiss
quelle
Die erste Verbindung ist unterbrochen. Der zweite ist entweder kaputt oder langsam.
Wildcard
Du hast recht. Der Sand der Zeit hat sie aufgefressen ... Ich werde sehen, ob ich alternative Links finden kann.
Bill Weiss
Es ist Schande; "rote Pille" klang interessant. :)
Wildcard
1
Aktualisiert mit archive.org-Links.
Bill Weiss
3

Sie können auch den ersten Teil Ihrer Mac-Adresse hier durchsuchen und prüfen, ob sie einem der Virtualisierungsunternehmen zugewiesen ist.

Zypher
quelle
Interessante Idee .... Ich denke, das funktioniert (solange ein Netzwerkgerät in der VM enthalten ist ;-))
mdpc
2
Wird nicht zuverlässig sein. In vielen Fällen kann der Mac auf einen beliebigen Wert gesetzt werden. Dies ermöglicht das Klonen des Mac des Originalcomputers beim Konvertieren in eine VM. Manche Software bindet ihre Lizenz an den Mac und oft ist es unmöglich, eine neue Lizenz zu erhalten (der Hersteller ist pleite oder die Kosten sind unerschwinglich).
Tonny
3

Virtuelle Geräte werden auch durch lspci- und / oder Plattengeräte-Informationen in / proc angezeigt:

lspci | grep -i vmware

grep -i vmware /proc/scsi/scsi /proc/ide/*/model
Heide
quelle
2

Unter Linux werden Systeminformationen in / sys / devices / virtual / dmi / id / angezeigt. In meiner Antwort finden Sie ein praktisches Skript, mit dem Sie alle verfügbaren Informationen anzeigen können.

root nicht erforderlich.

Mike S
quelle
1

Ich mochte keine dieser Lösungen, da normalerweise ein VMware-CD-ROM-Treiber oder ein Speichertreiber installiert ist, sodass dmesg dies für mich schnell bestätigt oder ablehnt.

[server @ user ~] $ dmesg | grep VMware
hda: VMware Virtual IDE-CD-ROM-Laufwerk, ATAPI-CD / DVD-ROM-Laufwerk
Hersteller: VMware Modell: Virtual Disk Rev: 1.0
Hersteller: VMware Modell: Virtual Disk Rev: 1.0
Hersteller: VMware Modell: Virtual Disk Rev: 1.0
Hersteller: VMware Modell: Virtual Disk Rev: 1.0
Hersteller: VMware Modell: Virtual Disk Rev: 1.0
Hersteller: VMware Modell: Virtual Disk Rev: 1.0
Hersteller: VMware Modell: Virtual Disk Rev: 1.0
VMware Memory Control-Treiber initialisiert
Greg
quelle
3
Dies funktioniert beim Start, aber später können Sie nicht garantieren, dass dmesg nicht gelöscht wurde oder übergelaufen ist.
Mattdm
Dies ist , was ich tun in der Regel, das heißt greppen dmesg
tpaul
1

Dies funktionierte besser für mich, da es mir spezifische Informationen über den Hersteller und den Produktnamen gibt.

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

Ausgabe auf Dell Server:

Manufacturer: Dell Inc.
Product Name: PowerEdge C5220

Ausgabe auf Virtualbox VM:

Manufacturer: innotek GmbH
Product Name: VirtualBox

Ausgabe auf KVM / QEMU:

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

Dies ist ideal für Skripte, die diese zur besseren Identifizierung von Servern auswerten können. Wenn Sie jedoch Chef in Ihrer Infrastruktur verwenden, können Sie das Knotenattribut auf Virtualization -> systemdem Chef-Server überprüfen .

user751528
quelle