Ich habe Befehlszeilenzugriff auf einen Linux-Computer, der möglicherweise virtualisiert ist oder nicht. Ich möchte feststellen, auf welcher Art von Virtualisierungstechnologie diese ausgeführt wird (VMWare, VirtualBox, KVM, OpenVZ, Xen,). Dies ist keine feindliche Umgebung: Ich versuche nicht, gegen eine VM zu arbeiten, die sich zu tarnen versucht. Ich diagnostiziere einen schuppigen Server, über den ich wenig weiß.
Genauer gesagt, ich helfe jemandem bei der Diagnose des Problems. Ich sitze nicht am Steuer. Also muss ich Anweisungen wie "Kopieren-Einfügen dieses Befehls" übermitteln und nicht " /proc
irgendwo herumstöbern". Im Idealfall handelt es sich um Folgendes lshw
: einen einfach zu installierenden (falls nicht vorinstallierten) Befehl, der das Stöbern durchführt und relevante Informationen ausgibt.
Wie lässt sich am einfachsten feststellen, bei welcher Virtualisierungstechnologie dieses System zu Gast sein kann? Ich würde mich freuen, wenn Vorschläge erwähnen würden, welche Technologien (einschließlich der bloßen Hardware) endgültig erkannt und welche endgültig beseitigt werden können. Ich interessiere mich hauptsächlich für Linux, aber wenn es auch für andere Unices funktioniert, ist das schön.
Antworten:
dmidecode -s system-product-name
Ich habe auf VMware Workstation, VirtualBox, QEMU mit KVM, Standalone-QEMU mit Ubuntu als Gastbetriebssystem getestet. Andere haben zusätzliche Plattformen hinzugefügt, mit denen sie ebenfalls vertraut sind.
Virtualisierungstechnologien
VMware Workstation
VirtualBox
Qemu mit KVM
Qemu (emuliert)
Microsoft VirtualPC
Virtuozzo
Xen
Auf Bare-Metal-Systemen wird eine Identifikation des Computer- oder Motherboard-Modells zurückgegeben.
/dev/disk/by-id
Wenn Sie nicht über die Berechtigung zum Ausführen verfügen, können
dmidecode
Sie Folgendes verwenden:Virtualisierungstechnologie: QEMU
Ausgabe
Verweise
quelle
Virtual Machine
fürdmidecode -s system-product-name
. Unter / dev / disk / by-id ist ebenfalls nichts ersichtlich. Facter scheint Hyperv zu erkennen, indem er sich die lspci-Ausgabe ansieht./proc/user_beancounters
/proc/user_beancounters
über OpenVZ, was bei billigen VPS's als Beispiel wahrscheinlich ist.dmidecode
und/dev/disk/by-id
Lösungen schlagen in einem Docker-Container fehl. Siehe unix.stackexchange.com/a/257207/106572dmidecode -s system-product-name
eine allgemeine Hardwarebeschreibung anstelle des oben gezeigten "KVM" oder "Bochs" zurück. Für mich ist diese ZeichenfolgeStandard PC (i440FX + PIIX, 1996)
.dmidecode -s system-manufacturer
Gibt die weitaus weniger generische Zeichenfolge zurückQEMU
. Da qemu die Bereitstellung von DMI-Daten ermöglicht, ist dmidecode meiner Meinung nach relativ leicht zu täuschen - unabhängig davon, welches Feld gelesen wird.Wenn der Container läuft
systemd
:Auf KVM gibt es zum Beispiel Folgendes zurück:
und auf einem nicht virtualisierten Host:
Siehe auch:
quelle
kvm
für Google Compute Engine ausgegeben , was ich herausfinden wollte. Vielen Dank!Wünschenswerte Methode
lshw
Dieser Befehl erzeugt die folgende Ausgabe auf verschiedenen VM-Technologie-Gastsystemen.
Ausgabe
KVM
Virtuelle Box
VMWare
Scripting
Wenn Sie unter Ubuntu / Debian arbeiten, kann das Paket
open-vm-tools
installiert werden. Es bietetvmware-checkvm
. Es wird nur eine Ziffer zurückgegeben. A0
bedeutet, dass es sich um eine VM handelt. A bedeutet,1
dass es sich um ein physisches System handelt.Weniger wünschenswerte Methoden
Wenn es KVM ist das
/proc/scsi/scsi
undethtool
zeigen Optionen wie folgt zusammen :SCSI
Ethtool
Das virtio_net ist Teil von KVM. Das
/proc/scsi/scsi
sagt Ihnen, dass Sie sich in einer VM befinden und dass Sie höchstwahrscheinlich KVM sind.dmesg
Mit den folgenden Befehlen
grep
durchdmesg
log.VMWare
QEmu oder KVM
Wenn die
"-cpu host"
Option nicht verwendet wurde, identifizieren sich QEmu und KVM wie folgt:Andernfalls werden die CPU-Informationen des Hosts sowohl in als
dmesg
auch in verwendet/proc/cpuinfo
. Sie sollten jedoch Folgendes sehen:In neueren Kernels, die verstehen, dass sie unter Paravirtualisierung laufen.
Microsoft VirtualPC
Xen
Virtuozzo
Verweise
quelle
lshw -class system
unddmidecode
ist genau das, was ich hatte gehofft , zu finden.lshw
Ausgabe auch für diese Plattformen zu bestätigen . Geben Sie mir ein paar Minuten und ich aktualisiere den A.Das
virt-what
Skript scheint die meisten Fälle gut abzudecken ...Ich tun , wie die rechtlichen Hinweise von den Autoren:
Meistens ist es falsch, dieses Programm zu verwenden. Stattdessen sollten Sie die spezifischen Funktionen ermitteln, die Sie tatsächlich verwenden möchten.
Es ist in den letzten Jahren als Teil der Standardinstallation auf meinen EL5- und EL6-Systemen erschienen. Ubuntu hat es und die Quelle ist auch verfügbar.
Die vom Skript erkannten Fakten werden hier aufgelistet , können aber leicht für Randfälle erweitert werden.
quelle
Das sind die Tests, die wir in meiner Firma durchführen.
quelle
Wenn Sie die Person finden, die Sie bei der Installation unterstützen
facter
, können Sie dies tunKein root-Zugriff erforderlich.
Debian-Gast auf Debian-Host:
Ich kann nicht garantieren, wie gut dies mit Xen / KVM / Qemu funktionieren würde ...
quelle
hostnamectl
ist dein Freund (benötigtsystemd
).Einige Beispiele:
Laptop ohne Virtualisierung
Xen
OpenVZ
KVM
quelle
Virtualization: oracle
wenn ich keine Paravirtualisierung installiert habe Virtualbox-In "neueren" Linux-Kerneln erkennt der Kernel den Hypervisor für Sie und druckt eine Nachricht, die leicht verfügbar ist
dmesg
. Dies wird Ihnen einfach sagen:Zum Beispiel:
Was "kürzlich" bedeutet, ich bin nicht sicher, in welcher Kernel-Version es offiziell veröffentlicht wurde, aber das Commit, das diese Funktion in der Codebasis einführte, war am 7. Mai 2010. Siehe hier .
quelle
dmesg
Füllt einen Ringpuffer fester Größe mit allem möglichen. Es ist völlig ungeeignet für diese Aufgabe. Siehe unix.stackexchange.com/a/257207/106572Für VirtualBox könnte dies Folgendes
lspci | grep -i virtualbox
bedeuten:Alternativ
dmidecode -s system-product-name
(wie @Rahul Patil vorschlägt) geht es noch direkter zur Sache (benötigt aber Wurzel):Für Nicht-KVM QEMU,
dmidecode -s system-product-name
kehrt zum Verwechseln Bochs, sonderndmesg | grep -i qemu
arbeitet (die Speichergeräte , die QEMU emuliert in der Regel die Namen hatQEMU HARDDISK
,QEMU DVD-ROM
etc ...).quelle
Manchmal ist es schwierig :)
quelle
systemd-detect-virt
Dadurch wird der Typ der verwendeten Virtualisierungstechnologie erkannt und ausgegeben.
Unterscheidung zwischen Maschinenvirtualisierung und Containervirtualisierung
Verwenden Sie die Optionen
--container
und--vm
, um die Art der erkannten Virtualisierung zu begrenzen.Exit-Codes
Wenn Sie nur wissen möchten, ob Virtualisierung erkannt wurde oder nicht, ohne die Details zu kennen, ist es einfacher, den Exit-Code zu überprüfen. Wenn eine Virtualisierung erkannt wird, wird der Exit-Code 0 zurückgegeben, andernfalls ein Wert ungleich Null.
quelle
Anscheinend besteht die Virtualisierung aus mehreren Teilen - in meinem Fall aus QEMU, Bochs und KVM (damals Ubuntu 14.04). Der einfachste Weg, den verwendeten Hypervisor zu ermitteln, war:
Das hat in meinem Fall einfach
kvm
die grundlegenden Informationen zurückgegeben, nach denen ich gesucht habe (auch das OP, glaube ich), weil es mir sagt, was ich tun darf (z. B. ipset ausführen, um einen DDoS-Angriff zu blockieren) und wie Ressourcen zwischen VMs geteilt werden .Außerdem habe ich es versucht
und
Keiner von beiden erwähnte KVM, aber beide informierten mich, dass meine Hardware-Emulation bereitgestellt wurde, von
Bochs
der ich zugeben konnte, dass ich noch nicht einmal davon gehört hatte, aber eine schnelle Suche ergab interessante Informationen ( http://en.wikipedia.org/wiki/ Bochs ). Der Befehl lshw ist etwas informativer als der Befehl dmidecode (z. B. 64-Bit).Die anderen Antworten sagten mir nicht wirklich etwas Sinnvolles - ich bin
facter virtual
gerade zurückgekehrtphysical
undls -1 /dev/disk/by-id/
zurückgekehrt,ata-QEMU_DVD-ROM_QM00003
was zeigt, dass QEMU involviert ist, aber ich habe sowieso keinen Zugriff auf die emulierte DVD-ROM.quelle
Debian wird mit diesem kleinen Paket zur Erkennung des Virtualisierungstyps geliefert:
und etwas größer wegen Perl-Abhängigkeiten:
Wie gewohnt laufen:
quelle