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.
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.
Antworten:
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.
cat /proc/scsi/scsi
ist nett, weil es anscheinend überall verfügbar ist und keine neue Software installiert oder mit privilegierten Rechten ausgeführt werden muss.
/proc/scsi/scsi
auf meiner Debian 7-Box ...
man virt-what
für das heuristische Skript, das für diesen Erkennungszweck erstellt wurde (für RedHat / Fedora-Systeme) und für die damit verbundenen Vorsichtsmaßnahmen.
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
Sie könnten in der Lage sein, eine Idee zu bekommen, indem Sie sich unter umschauen /sys
. Zum Beispiel /sys/class/dmi/id/sys_vendor
hat einen Wert von VMware, Inc.
.
Wenn es installiert ist, können Sie lshw verwenden . Der Befehl lshw -class system
gibt 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
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.
Für Linux geben Sie Folgendes ein dmesg |grep DMI
:
[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
[root @ backdev1 ~] # dmesg | grep DMI DMI 2.5 vorhanden. DMI: IBM System x3650 M3 - [7945AC1] - / 90Y4784, BIOS - [D6E153AUS-1.12] - 30.06.2011
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 :)
Sie können auch den ersten Teil Ihrer Mac-Adresse hier durchsuchen und prüfen, ob sie einem der Virtualisierungsunternehmen zugewiesen ist.
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.
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
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 -> system
dem Chef-Server überprüfen .
Ich mag sehr gerne:
hostnamectl status
oder konkret:
hostnamectl status | grep "Chassis:"