it-swarm.com.de

Finden Sie heraus, ob das Betriebssystem in einer virtuellen Umgebung ausgeführt wird

Gibt es eine Möglichkeit herauszufinden, ob das Betriebssystem, das ich ausführe (tatsächlich installiere), auf einem VMWare-Computer ausgeführt wird? Ich muss die Einstellungen für ntp deaktivieren, wenn die automatische Installation auf einer virtuellen Maschine erfolgt, diese jedoch aktiviert lassen, wenn sie auf Bare-Metal-Geräten installiert werden.

52
ulve

Die Verwendung von dmidecode oder lshw und greping scheint der beste Weg zu sein, dies herauszufinden.

11
ulve

Linux fügt hypervisor das Flag /proc/cpuinfo wenn der Kernel erkennt, dass er auf einem Hypervisor ausgeführt wird.

68
Jan Henke

Unter Linux können Sie den Befehl virt-what Verwenden.

[[email protected]]# virt-what
vmware

Beispiel Ausgabe für ein Linux unter Windows HyperV

[[email protected]~] # virt-what
hyperv
26
user66871

Dies hat bei mir besser funktioniert, da ich spezifische Informationen über den Hersteller und den Produktnamen habe.

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 analysieren können. Wenn Sie jedoch Chef in Ihrer Infrastruktur verwenden, können Sie das Knotenattribut Virtualization -> system Auf dem Chef-Server überprüfen.

19
OkezieE

Lauf:

$ dmesg |grep -i hypervisor
Hypervisor detected: KVM
12
Arash

Wenn Sie nur feststellen müssen, ob das Betriebssystem/der Host ein virtualisierter Host ist oder nicht, haben Sie nur ein Perl-Modul Sys :: Detect :: Virtualization und das Skript damit virtdetect. Es führt alle möglichen Heuristiken/Vermutungserkennungen durch und meldet die erkannte Betriebssystemumgebung. Versuche es.

http://search.cpan.org/dist/Sys-Detect-Virtualization/script/virtdetect

3
Nikhil Mulley

Die beste Idee wäre wahrscheinlich, sich die Hardware anzuschauen. Zumindest mit VirtualBox können Sie anhand der Namen einiger Hardwaregeräte leicht feststellen, dass Sie sich auf einer virtuellen Maschine befinden (z. B. /sys/block/sda/device/model Sagt "VBOX HARDDISK").

Da alle Ihre Computer VMware sind, wählen Sie einfach eines dieser Dinge aus und überprüfen Sie dies.

3
tante

Sie könnten Joanna Rutkowskas Rote Pille ausprobieren. Dieses kleine Programm untersucht das IDTR (Interrupt Descriptor Table Register) mit der Anweisung SIDT (nur x86), was anscheinend der Fall ist von verschiedenen VMMs unterschiedlich eingestellt werden.

3
Bruce Ediger

Alle diese Antworten funktionieren in einigen Fällen, in anderen jedoch nicht.

Sie können sich beispielsweise auf dmesg verlassen, während sich die Details des Startprotokolls noch im Ringpuffer befinden. Auf einem Computer, der längere Zeit ausgeführt wurde, schlägt dies jedoch wahrscheinlich fehl. Schlimmer noch, das Bare-Metal-Betriebssystem protokolliert möglicherweise eine Nachricht bezüglich eines laufenden Hypervisors. In diesem Fall gibt ein naiver Test wie dmesg | grep -i vmware Ein falsches Positiv zurück.

Das Testen unter Docker ist ganz anders. Docker hat keinen eigenen /proc/cpuinfo; Stattdessen werden die Informationen des Host-Computers weitergegeben. In der Zwischenzeit versucht dmidecode nicht, ein Verzeichnis /dev/mem Zu lesen, das Docker nicht gesehen hat.

virt-what Erkennt Docker-Container, muss jedoch gepatcht werden, um mit einer kürzlich vorgenommenen Änderung der Containerberechtigungen fertig zu werden. Es stürzt ab und versucht, auf /proc/1/environ Zuzugreifen, bevor die Tests für Docker erreicht werden.

Es ist wichtig, auf den virt-what Vorbehalt zu achten:

Meistens ist es falsch, dieses Programm zu verwenden. Stattdessen sollten Sie die spezifischen Funktionen erkennen, die Sie tatsächlich verwenden möchten.

In meinem Fall, wenn ich ein Tutorial veröffentliche, das eine Tonne von Mistbenutzern installiert, möchte ich es vielleicht doch nicht auf Bare Metal laufen lassen, mit diesem Test:

[[ 0 < $(grep -c docker /proc/1/cgroup) ]] || [[ "X$(Sudo virt-what)X" != "XX" ]] && export VIRTUALIZED=true;

Anmerkung: Mir ist klar, dass das OP im Hauptteil der Frage speziell nach VMWare fragt, aber der Titel der Frage wird viele Leser (wie mich) anziehen, die nach dem allgemeineren Fall suchen.

2
Martin Bramwell

Ich habe es getan:

hypervisor=`dmesg --notime | grep -i hypervisor | cut -d ':' -f2 | tr -d " \t\n\r"`
echo "Hypervisor is $hypervisor"

Es hilft bei Skripten

nun, der intuitivste Weg, den ich immer mache, ist:

$ dmesg | grep -i VMware

1
Shâu Shắc

Benötigt APIC, gibt 0 zurück, wenn virtuelle Maschine, 1 wenn physischer Computer:

grep -q VBOX /sys/firmware/acpi/tables/APIC
0
user227115