it-swarm.com.de

Einfache Möglichkeit, die Virtualisierungstechnologie zu bestimmen

Ich habe Befehlszeilenzugriff auf einen Linux-Computer, der möglicherweise virtualisiert ist oder nicht. Ich möchte feststellen, auf welcher Art von Virtualisierungstechnologie sie gegebenenfalls ausgeführt wird (VMWare, VirtualBox, KVM, OpenVZ, Xen,). Dies ist keine feindliche Umgebung: Ich versuche nicht, gegen eine VM, die versucht, sich zu verschleiern, zu arbeiten, ich diagnostiziere einen flockigen Server, von dem ich wenig weiß).

Genauer gesagt, ich helfe jemandem bei der Diagnose des Problems, ich sitze nicht am Ruder. Also muss ich Anweisungen wie "Kopieren-Einfügen dieses Befehls" und nicht "Stöbern in /proc irgendwo ”. Im Idealfall wäre es so etwas wie lshw: ein einfach zu installierender (wenn nicht vorinstallierter) Befehl, der die Informationen durchsucht und druckt.

Was ist der einfachste Weg, um festzustellen, von welcher Virtualisierungstechnologie dieses System ein Gast sein kann? Ich würde mich freuen, wenn in den Vorschlägen erwähnt würde, welche Technologien (einschließlich bloßer 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 Nizza.

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

Auf Bare Metal gibt dies eine Identifikation des Computer- oder Motherboard-Modells zurück.

/dev/disk/by-id

Wenn Sie nicht die Rechte zum Ausführen von dmidecode haben, können Sie Folgendes verwenden:

Virtualisierungstechnologie: QEMU

ls -1 /dev/disk/by-id/

Ausgabe

[[email protected] ~]# ls -1 /dev/disk/by-id/
ata-QEMU_DVD-ROM_QM00003
ata-QEMU_HARDDISK_QM00001
ata-QEMU_HARDDISK_QM00001-part1
ata-QEMU_HARDDISK_QM00002
ata-QEMU_HARDDISK_QM00002-part1
scsi-SATA_QEMU_HARDDISK_QM00001
scsi-SATA_QEMU_HARDDISK_QM00001-part1
scsi-SATA_QEMU_HARDDISK_QM00002
scsi-SATA_QEMU_HARDDISK_QM00002-part1

Verweise

130
Rahul Patil

Wenn der Container ausgeführt wird systemd:

$ systemd-detect-virt
lxc

On KVM zum Beispiel gibt Folgendes zurück:

kvm

und auf einem nicht virtualisierten Host:

none

Siehe auch:

41
starfry

Wünschenswerte Methode

lshw

Dieser Befehl erzeugt die folgende Ausgabe für vairous VM Technologiegäste.

$ Sudo lshw -class system

Ausgabe

  • KVM

    mungr                     
        description: Computer
        product: KVM
        vendor: Red Hat
        width: 64 bits
        capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32
    
  • Virtuelle Box

    Fedora17                  
        description: Computer
        product: VirtualBox ()
        vendor: innotek GmbH
        version: 1.2
        serial: 0
        width: 64 bits
        capabilities: smbios-2.5 dmi-2.5 vsyscall32
    
  • VMWare

    partedmagic
        description: Computer
        product: VMware Virtual Platform ()
        vendor: VMware, Inc.
        version: None
        serial: VMware-56 4d 94 a0 53 e3 f3 c6-f9 a6 eb 1a 89 70 04 57
        width: 32 bits
        capabilities: smbios-2.4 dmi-2.4 smp-1.4 smp
    

Skripting

Wenn Sie unter Ubuntu/Debian arbeiten, kann das Paket open-vm-tools Installiert werden. Es bietet vmware-checkvm . Es wird nur eine Ziffer zurückgegeben. Ein 0 Bedeutet, dass es sich um eine VM handelt, ein 1 Bedeutet, dass es sich um ein physisches System handelt.

Weniger wünschenswerte Methoden

Wenn es KVM ist, werden die Optionen /proc/scsi/scsi Und ethtool wie folgt angezeigt:

SCSI

$ cat /proc/scsi/scsi 
Attached devices:
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: QEMU     Model: QEMU DVD-ROM     Rev: 0.9.
  Type:   CD-ROM                           ANSI  SCSI revision: 05

ethtool

$ ethtool -i eth0
driver: virtio_net
version: 
firmware-version: 
bus-info: virtio0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

Das virtio_net ist Teil von KVM. Der /proc/scsi/scsi Zeigt an, dass Sie sich in einer VM befinden und höchstwahrscheinlich KVM sind.

dmesg

Verwenden Sie die folgenden Befehle grep 'durch dmesg log.

$ Sudo dmesg | grep -i virtual
  • VMWare

    VMware vmxnet virtual NIC driver
     Vendor: VMware    Model: Virtual disk      Rev: 1.0 
    hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive
    
  • QEmu oder KVM

    Wenn die Option "-cpu Host" Nicht verwendet wurde, identifizieren sich QEmu und KVM) als:

    CPU: AMD QEMU Virtual CPU version 0.9.1 stepping 03
    

    andernfalls werden die CPU-Informationen des Hosts sowohl in dmesg als auch in /proc/cpuinfo verwendet. Sie sollten jedoch Folgendes sehen:

    [    0.000000] Booting paravirtualized kernel on KVM
    

    In neueren Kerneln, die verstehen, dass sie unter Paravirtualisierung ausgeführt werden.

  • Microsoft VirtualPC

    hda: Virtual HD, ATA DISK drive
    hdc: Virtual CD, ATAPI CD/DVD-ROM drive
    
  • Xen

    $ Sudo dmesg | grep -i xen
    Xen virtual console successfully installed as tty1
    
  • Virtuozzo

    # method #1
    $ Sudo dmesg
    (returns no output)
    
    # method #2
    $ Sudo cat /var/log/dmesg
    (returns no output)
    
    # method #3
    $ Sudo ls -al /proc/vz
    veinfo  veinfo_redir  veredir  vestat  vzaquota  vzdata
    

Verweise

28
slm

Das virt-what script scheint die meisten Fälle gut abzudecken ...

Ich do wie der Haftungsausschluss der Autoren:

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

Es wurde in den letzten Jahren auf meinen EL5- und EL6-Systemen als Teil von Standardinstallationen angezeigt. Ubuntu hat es und die Quelle ist ebenfalls verfügbar.

Die vom Skript erkannten Fakten sind hier aufgelistet , können jedoch für Edge-Fälle problemlos erweitert werden.

16
ewwhite
isVMware() { [[ $(dmidecode -s system-manufacturer) = 'VMware, Inc.' ]]; }
isXen   () { [[ $(dmidecode -s system-manufacturer) = 'Xen'          ]]; }
isKVM   () { [[ $(dmidecode -s system-product-name) = 'KVM'          ]]; }
isVBox  () { [[ $(dmidecode -s system-product-name) = 'VirtualBox'   ]]; }
isVM    () { isVMware || isXen || isKVM || isVBox; }

Das sind die Tests, die wir in meiner Firma verwenden.

13
John Kugelman

hostnamectl ist dein Freund (erfordert systemd).

Einige Beispiele:

Laptop ohne Virtualisierung

$ hostnamectl status
   Static hostname: earth.gangs.net
         Icon name: computer-laptop
           Chassis: laptop
        Machine ID: 18a0752e1ccbeef09da51ad17fab1f1b
           Boot ID: beefdc99969e4a4a8525ff842b383c62
  Operating System: Ubuntu 16.04.2 LTS
            Kernel: Linux 4.4.0-66-generic
      Architecture: x86-64

Xen

$ hostnamectl status
   Static hostname: pluto.gangs.net
         Icon name: computer-vm
           Chassis: vm
        Machine ID: beef39aebbf8ba220ed0438b54497609
           Boot ID: beefc71e97ed48dbb436a470fe1920e1
    Virtualization: xen
  Operating System: Ubuntu 16.04.2 LTS
            Kernel: Linux 3.13.0-37-generic
      Architecture: x86-64

OpenVZ

$ hostnamectl status
   Static hostname: mars.gangs.net
         Icon name: computer-container
           Chassis: container
        Machine ID: 55296cb0566a4aaca10b8e3a4b28beef
           Boot ID: 1bb259b0eb064d9eb8a22d112211beef
    Virtualization: openvz
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 2.6.32-042stab120.16
      Architecture: x86-64

KVM

$ hostnamectl status
   Static hostname: mercury.gangs.net
         Icon name: computer-vm
           Chassis: vm
        Machine ID: beeffefc50ae499881b024c25895ec86
           Boot ID: beef9c7662a240b3b3b04cef3d1518f0
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-514.10.2.el7.x86_64
      Architecture: x86-64
9
Derick

Wenn Sie die Person finden, die Sie bei der Installation von facter unterstützen, können Sie dies tun

facter virtual

Kein Root-Zugriff erforderlich.

Debian Gast auf Debian Host:

[[email protected]]$ facter virtual
virtualbox

Ich kann nicht dafür bürgen, wie gut dies mit Xen/KVM/Qemu funktionieren würde ...

9
Joseph R.

In "aktuellen" Linux-Kerneln erkennt der Kernel den Hypervisor für Sie und druckt eine Nachricht, die mit dmesg leicht verfügbar ist. Dies wird Ihnen einfach sagen:

dmesg | grep "Hypervisor detected"

Zum Beispiel:

$ dmesg | grep "Hypervisor detected"
Hypervisor detected: VMware

Was "neu" bedeutet, ist unklar, in welcher Kernel-Version es offiziell veröffentlicht wurde, aber das Commit, das diese Funktion in die Codebasis eingeführt hat, war am 7. Mai 2010. Siehe hier .

7
Russ

systemd-detect-virt

Dadurch wird der Typ der verwendeten Virtualisierungstechnologie erkannt und ausgegeben.

systemd-detect-virt

Unterscheidung zwischen Maschinenvirtualisierung und Containervirtualisierung

Verwenden Sie die --container und --vm Optionen zum Begrenzen des erkannten Virtualisierungstyps.

Exit-Codes

Wenn Sie nur wissen möchten, ob Virtualisierung ohne die Details erkannt wird oder nicht, ist es einfacher, den Exit-Code zu überprüfen. Es wird der Exit-Code 0 zurückgegeben, wenn eine Virtualisierung erkannt wird, andernfalls ungleich Null.


3
Owen Pauling

Für VirtualBox könnten Sie lspci | grep -i virtualbox, das gibt:

$ lspci | grep -i virtualbox
00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter
00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service

Alternative, dmidecode -s system-product-name (wie @Rahul Patil vorschlägt) ist noch direkter auf den Punkt (braucht aber root):

$ Sudo dmidecode -s system-product-name
VirtualBox

Für Nicht-KVM-QEMU gilt dmidecode -s system-product-name gibt verwirrend Bochs zurück, aber dmesg | grep -i qemu funktioniert (die von QEMU emulierten Speichergeräte haben normalerweise den Namen QEMU HARDDISK, QEMU DVD-ROM usw...).

3
Renan

Manchmal ist es schwierig :)

[email protected]:~# dmidecode -s system-product-name
Bochs

[email protected]:~# dmidecode | egrep -i 'manufacturer|product|vendor'
        Vendor: Bochs
        Manufacturer: Bochs
        Product Name: Bochs
        Manufacturer: Bochs
        Manufacturer: Bochs
        Manufacturer: Bochs
        Manufacturer: Bochs
        Manufacturer: Bochs

[email protected]:~# virt-what
[email protected]:~# dpkg -l |grep virt-what
ii  virt-what                           1.2-1                        detect if we are running in a virtual machine

[email protected]:~# egrep -i 'virtual|vbox' /var/log/dmesg
[    0.000000] Booting paravirtualized kernel on KVM
[    0.385701] input: Macintosh mouse button emulation as /devices/virtual/input/input0
3
jan.polnicky

Anscheinend besteht die Virtualisierung aus mehreren Teilen - in meinem Fall QEMU, Bochs und KVM (dann Ubuntu 14.04)). Ich fand den einfachsten Weg, den verwendeten Hypervisor zu entdecken, war:

Sudo apt-get install virt-what
Sudo virt-what

was in meinem Fall einfach kvm zurückgab, was die grundlegenden Informationen waren, nach denen ich gesucht habe (auch das OP, denke 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

Sudo dmidecode -s system-product-name

und

Sudo lshw -class system

keiner von beiden erwähnte KVM, aber beide informierten mich, dass meine Hardware-Emulation von Bochs bereitgestellt wurde, von dem ich zugeben musste, dass ich noch nicht einmal davon gehört hatte, aber eine schnelle Suche ergab sich interessante Informationen ( http://en.wikipedia.org/wiki/Bochs ). Der Befehl lshw ist etwas informativer als dmidecode (z. B. sagt er mir, dass es 64-Bit ist).

Die anderen Antworten sagten mir nichts Nützliches - facter virtual Gab gerade physical und ls -1 /dev/disk/by-id/ Zurück ata-QEMU_DVD-ROM_QM00003, Was zeigt, dass QEMU beteiligt ist, aber ich nicht habe trotzdem Zugriff auf die emulierte DVD-ROM.

1

Debian wird mit diesem kleinen Paket zum Erkennen des Virtualisierungstyps geliefert:

$ Sudo apt-get install virt-what
$ virt-what

und etwas größer wegen Perl-Abhängigkeiten:

$ Sudo apt-get install imvirt
$ imvirt

Wie gewohnt laufen:

free
cat /proc/meminfo
cat /proc/cpuinfo
dmesg
htop
lshw
dmidecode
lsmod
hwinfo
1
gavenkoa