Bei Techglimpse erhalten wir häufig E-Mails von unseren Lesern, die uns bitten, ein Tutorial zur „Virtualisierungserkennung“ von einem VPS oder einer virtuellen Maschine zu schreiben. Wir konnten diese E-Mails jedoch nicht sofort beantworten, da wir kein Test-Setup mit gängigen Hypervisoren (zumindest wenigen) wie Xen, VmWare, KVM, VirtualBox, HyperV usw. hatten wenige Hypervisoren laufen – nur für unsere Leser. Abschließend erklärt Ihnen dieses Tutorial einige Befehle und Informationen (ich meine, das Lesen von Protokollen), die Ihnen helfen können, den Typ des Hypervisors zu identifizieren, der die aktuelle virtuelle Maschine ausführt.
Die folgenden Befehle wurden auf virtuellen Maschinen ausgeführt, die auf Xen-, KVM-, VirtualBox-Hypervisoren und auch auf einem OpenStack-KVM Icehouse erstellt wurden.
Methode 1:Lesen des Systemprotokolls
Bestimmte Hypervisoren geben Informationen über ihren Typ (einschließlich des Namens des Hypervisors und der Art der Virtualisierung – wie Paravirtualisierung, vollständige Virtualisierung oder HVM) in Systemprotokolldateien weiter. Diese Informationen können unter /var/log/message abgerufen werden oder indem Sie die Ausgabe von ‘dmesg gruppieren ‘ Befehl.
Hinweis: Wie gesagt, diese Methode funktioniert nur auf bestimmten Hypervisoren. Beispielsweise lecken VirtualBox und Xen keine Informationen in den Protokolldateien.
Auf Xen-VM
[root@xen-vm ~]# dmesg |grep virtual
Sie können keine Informationen aus Protokolldateien auf Xen Hypervisor finden.
Auf KVM-VM
[centos@KVM-vm ~]$ dmesg |grep virtual [ 0.000000] Booting paravirtualized kernel on KVM [ 1.930785] systemd[1]: Detected virtualization 'kvm'.
Auf VirtualBox-VM
[root@VB-vm ~]# dmesg |grep virtual
Sie können keine Informationen aus Protokolldateien auf VirtualBox finden.
Auf OpenStack KVM-VM
[root@OS-vm ~]$ dmesg |grep virtual Booting paravirtualized kernel on KVM input: Macintosh mouse button emulation as /devices/virtual/input/input1
Auf dem KVM-Host-Computer
[root@kvm-host ~]$ dmesg |grep virtual Booting paravirtualized kernel on bare hardware
Methode 2:Verwenden des Befehls „dmidecode“
DMI (Desktop Management Interface) – dmidecode , können native Linux-Befehle verwendet werden, um Hardware- und BIOS-Informationen in einem für Menschen lesbaren Format auszugeben.
Wenn „dmidecode ‘ wird ausgeführt:
Auf Xen-VM
[root@xen-vm ~]# dmidecode | egrep -i 'manufacturer|product' Manufacturer: Xen Product Name: HVM domU Manufacturer: Xen Manufacturer: Intel
Auf KVM-VM
[centos@kvm-vm ~]$ sudo dmidecode | egrep -i 'manufacturer|product' Manufacturer: Bochs Product Name: Bochs Manufacturer: Bochs Manufacturer: Bochs
Hinweis: Sie sehen „Bochs ‘ als Wert für Hersteller, Produktname usw. … Bochs ist ein X86-64-kompatibler Emulator und Debugger, der bei der Emulation von Prozessor, Display, BIOS, Speicher und anderer PC-Hardware hilft. Das bedeutet, dass die Maschine Hardware emuliert, was darauf hindeutet, dass es sich um eine VM und meistens um KVM handelt.
Auf VirtualBox-VM
[root@VB-vm ~]# dmidecode | egrep -i 'manufacturer|product' Manufacturer: innotek GmbH Product Name: VirtualBox Manufacturer: Oracle Corporation Product Name: VirtualBox Manufacturer: Oracle Corporation
Auf OpenStack-KVM-VM
[centos@OS-vm ~]$ sudo dmidecode | egrep -i 'manufacturer|product' Manufacturer: Red Hat Product Name: KVM
Wenn Sie ‘dmidecode ausführen ‘ Auf einem Host-Rechner erhalten Sie die Hardware- und BIOS-Informationen.
[root@kvm-host ~]# dmidecode | egrep -i 'manufacturer|product' Manufacturer: Supermicro Product Name: X8SIL Manufacturer: Supermicro Product Name: X8SIL Manufacturer: Supermicro Manufacturer: Intel Manufacturer: Kingston Manufacturer: Kingston Manufacturer: Kingston Manufacturer: Kingston Manufacturer: To Be Filled By O.E.M.
Methode 3:Auflisten von /dev/disk
Virtuelle Maschinen sollten eine Hardwareemulation von der Hostmaschine haben. Zum Beispiel Disk-Emulation vom Host. Wenn Sie also die Dateien einfach unter „/dev/disk/by-id auflisten ‘, dann können Sie leicht erkennen, welcher Emulator vom Hypervisor verwendet wird.
Auf Xen-VM
[root@xen-vm~]# ls -l /dev/disk/by-id total 0 lrwxrwxrwx 1 root root 9 Sep 29 15:14 ata-QEMU_DVD-ROM_QM00004 -> ../../hdd lrwxrwxrwx 1 root root 9 Sep 29 15:14 ata-QEMU_HARDDISK_QM00001 -> ../../hda lrwxrwxrwx 1 root root 10 Sep 29 15:14 ata-QEMU_HARDDISK_QM00001-part1 -> ../../hda1 lrwxrwxrwx 1 root root 10 Sep 29 15:14 ata-QEMU_HARDDISK_QM00001-part2 -> ../../hda2
QEMU emuliert die gesamte an den Host angeschlossene Hardware auf einer VM.
Auf KVM-VM
[centos@kvm-vm ~]$ ls -l /dev/disk/by-id lrwxrwxrwx. 1 root root 9 Sep 30 10:40 ata-QEMU_HARDDISK_QM00001 -> ../../sda lrwxrwxrwx. 1 root root 10 Sep 30 10:35 ata-QEMU_HARDDISK_QM00001-part1 -> ../../sda1
Auf VirtualBox-VM
[root@VB-vm ~]# ls -l /dev/disk/by-id total 0 lrwxrwxrwx 1 root root 9 Oct 5 21:10 ata-VBOX_CD-ROM_VB2-01700376 -> ../../hdc lrwxrwxrwx 1 root root 9 Oct 5 21:10 ata-VBOX_HARDDISK_VBc7f3f571-49b6d797 -> ../../hda lrwxrwxrwx 1 root root 10 Oct 5 21:10 ata-VBOX_HARDDISK_VBc7f3f571-49b6d797-part1 -> ../../hda1 lrwxrwxrwx 1 root root 10 Oct 5 21:10 ata-VBOX_HARDDISK_VBc7f3f571-49b6d797-part2 -> ../../hda2 lrwxrwxrwx 1 root root 10 Oct 5 21:10 ata-VBOX_HARDDISK_VBc7f3f571-49b6d797-part3 -> ../../hda3
Hinweis: VBOX statt QEMU auf einer VirtualBox-VM
Auf OpenStack KVM-VM
[centos@OS-vm ~]$ ls -l /dev/disk/by-id ls: cannot access /dev/disk/by-id: No such file or directory
Ich konnte keine Informationen zu OpenStack VM finden. Wahrscheinlich versteckt OpenStack es? Nicht sicher!
Auf dem KVM-Host-Computer
[root@kvm-host ~]# ls -l /dev/disk/by-id/ total 0 lrwxrwxrwx 1 root root 10 Sep 28 08:45 dm-name-centos-home -> ../../dm-2 lrwxrwxrwx 1 root root 10 Sep 28 08:45 dm-name-centos-root -> ../../dm-1 lrwxrwxrwx 1 root root 10 Sep 28 08:45 dm-name-centos-swap -> ../../dm-0 lrwxrwxrwx 1 root root 10 Sep 28 08:45 dm-uuid-LVM-fQq4kAJfUvtqpELNejjkiUTcGNhMJAIGbhQF7TR1rpaLi9Z8e1OF19f0K4DKhtxg -> ../../dm-1 lrwxrwxrwx 1 root root 10 Sep 28 08:45 dm-uuid-LVM-fQq4kAJfUvtqpELNejjkiUTcGNhMJAIGcstbiCdWXv3SCKfHb8lSPbApR525PK2W -> ../../dm-0 lrwxrwxrwx 1 root root 10 Sep 28 08:45 dm-uuid-LVM-fQq4kAJfUvtqpELNejjkiUTcGNhMJAIGrt7RtF7L1qlwo2fjIIQh9FasnQoV3q9y -> ../../dm-2 lrwxrwxrwx 1 root root 10 Sep 28 08:45 lvm-pv-uuid-rZHlC1-OyIn-lpf8-NU1e-uhLB-s3At-GyR6zx -> ../../sda2 lrwxrwxrwx 1 root root 9 Sep 28 08:45 scsi-SAdaptec_ft_A8E727A8 -> ../../sda lrwxrwxrwx 1 root root 10 Sep 28 08:45 scsi-SAdaptec_ft_A8E727A8-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 Sep 28 08:45 scsi-SAdaptec_ft_A8E727A8-part2 -> ../../sda2
Methode 4:Virt-what-Paket verwenden
Nicht alle Linux-Varianten enthalten „virt-what ‘Paket installiert. Sie können es mit 'yum installieren ‘.
[root@vm ~]# rpm -ivh virt-what-1.11-2.el5.x86_64.rpm warning: virt-what-1.11-2.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID e8562897 Preparing... ########################################### [100%] 1:virt-what ########################################### [100%]
Auf Xen-VM
[root@xen-vm ~]# virt-what xen xen-hvm
Auf KVM-VM
[centos@kvm-vm ~]$ sudo virt-what kvm
Auf VirtualBox-VM
[root@VB-vm ~]# virt-what virtualbox
Auf OpenStack KVM-VM
[root@OS-vm ~]# virt-what kvm
Auf KVM-Host
[root@kvm-host ~]# virt-what
Hinweis: Sie erhalten keine Ausgabe auf einem Hostcomputer.
Methode 5:Verwenden von virtdetect oder systemd-detect-virt
Virtdetect rpm basiert auf „Sys::Detect::Virtualization ‘ Perl-Skript – Weitere Informationen finden Sie in diesem Tutorial .
Methode 6:Verwendung des Befehls „lshw“
Installieren Sie „lshw ‘Paket wie folgt:
[root@vm ]# yum install lshw Installed: lshw.x86_64 0:B.02.17-3.el6 Complete!
Auf Xen-VM
[root@xen-vm ~]# lshw -class system description: Computer product: HVM domU vendor: Xen version: 4.1.5 width: 32 bits capabilities: smbios-2.4 dmi-2.4 smp-1.4 smp
Auf KVM-VM
[centos@kvm-vm~]$ sudo lshw -class system description: Computer product: Bochs vendor: Bochs width: 64 bits capabilities: smbios-2.4 dmi-2.4 vsyscall32
Auf VirtualBox-VM
[root@VB-vm ~]# lshw -class system description: Computer product: VirtualBox vendor: innotek GmbH version: 1.2 serial: 0 width: 32 bits capabilities: smbios-2.5 dmi-2.5 description: System peripheral product: VirtualBox Guest Service
Auf OpenStack KVM-VM
[root@OS-vm ]# lshw -class system description: Computer product: KVM vendor: Red Hat version: RHEL 6.6.0 PC width: 64 bits capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32
Auf KVM-Host
[root@kvm-host ~]# lshw -class system description: Sealed-case PC product: X8SIL (To Be Filled By O.E.M.) vendor: Supermicro version: 0123456789 width: 64 bits capabilities: smbios-2.6 dmi-2.6 vsyscall32
Methode 7:Verwenden von „ethtool“
Auf einigen Hypervisoren können Sie mit dem Befehl „ethtool“ leicht herausfinden, ob ein Netzwerkgerät emuliert wird.
[centos@kvm-vm ]$ ethtool -i eth0 driver: virtio_net version: 1.0.0 firmware-version: bus-info: 0000:00:02.0 supports-statistics: no supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no
Nun, dies sind einige Befehle, mit denen Sie Virtualisierung auf verschiedenen Hypervisoren erkennen können. Kennen Sie eine andere Methode? Lassen Sie uns im Kommentarbereich unten.