GNU/Linux >> Linux Esercitazione >  >> Linux

7 modi per rilevare la virtualizzazione dalla tua VM [Xen, VirtualBox, KVM, OpenStack con KVM]

In Techglimpse riceviamo spesso e-mail dai nostri lettori che ci chiedono di scrivere un tutorial sul "rilevamento della virtualizzazione" da un VPS o da una macchina virtuale. Tuttavia, non siamo stati in grado di rispondere immediatamente a quelle e-mail, poiché non disponevamo di una configurazione di prova comprendente hypervisor popolari (almeno alcuni) come Xen, VmWare, KVM, VirtualBox, HyperV ecc. pochi hypervisor in esecuzione, solo per il bene dei nostri lettori. Quindi, alla fine, questo tutorial ti dirà pochi comandi e ricerche (intendo dire, la lettura dei registri) che possono aiutarti a identificare il tipo di Hypervisor che esegue la macchina virtuale corrente.

I comandi seguenti sono stati eseguiti su macchine virtuali create su hypervisor Xen, KVM, VirtualBox e anche su una ghiacciaia OpenStack-KVM.

Metodo 1:lettura del registro di sistema

Alcuni hypervisor trapelano informazioni sul loro tipo (incluso il nome dell'hypervisor e il tipo di virtualizzazione, ad esempio paravirtualizzazione, virtualizzazione completa o HVM) nei file di registro del sistema. Queste informazioni possono essere ottenute da /var/log/message o grepping l'output di 'dmesg ' comando.

Nota: Come detto, questo metodo funzionerà solo su alcuni hypervisor. Ad esempio, VirtualBox e Xen non perdono alcuna informazione nei file di registro.

Su Xen-VM

[root@xen-vm ~]# dmesg |grep virtual

Non puoi trovare alcuna informazione dai file di registro su Xen Hypervisor.

Su KVM-VM

[centos@KVM-vm ~]$ dmesg |grep virtual
 [ 0.000000] Booting paravirtualized kernel on KVM
 [ 1.930785] systemd[1]: Detected virtualization 'kvm'.

Su VirtualBox-VM

[root@VB-vm ~]# dmesg |grep virtual

Non riesci a trovare alcuna informazione dai file di registro su VirtualBox.

Su VM KVM OpenStack

[root@OS-vm ~]$ dmesg |grep virtual
 Booting paravirtualized kernel on KVM
 input: Macintosh mouse button emulation as /devices/virtual/input/input1

Su una macchina host KVM

[root@kvm-host ~]$ dmesg |grep virtual
 Booting paravirtualized kernel on bare hardware

Metodo 2:utilizzo del comando 'dmidecode'

DMI (Desktop Management Interface) – dmidecode , il comando nativo di Linux può essere utilizzato per eseguire il dump di informazioni sull'hardware e sul BIOS in un formato leggibile dall'uomo.

Quando 'dmidecode ' viene eseguito :

Su Xen VM

[root@xen-vm ~]# dmidecode | egrep -i 'manufacturer|product'
 Manufacturer: Xen
 Product Name: HVM domU
 Manufacturer: Xen
 Manufacturer: Intel

Su VM KVM

[centos@kvm-vm ~]$ sudo dmidecode | egrep -i 'manufacturer|product'
 Manufacturer: Bochs
 Product Name: Bochs
 Manufacturer: Bochs
 Manufacturer: Bochs

Nota: Puoi vedere "Bochs ' come valore per produttore, nome prodotto, ecc... Bochs è un emulatore e debugger compatibile con X86-64 che aiuta l'emulazione di processore, display, BIOS, memoria e altro hardware del PC. Significa che la macchina sta emulando parte dell'hardware suggerendo che è una VM e principalmente KVM.

Su 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

Su VM OpenStack-KVM

[centos@OS-vm ~]$ sudo dmidecode | egrep -i 'manufacturer|product'
 Manufacturer: Red Hat
 Product Name: KVM

Quando esegui "dmidecode ' su una macchina host, ottieni le informazioni sull'hardware e sul BIOS.

[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.

Metodo 3:elencare /dev/disk

Le macchine virtuali dovrebbero avere l'emulazione hardware dalla macchina host. Ad esempio, l'emulazione del disco dall'host. Quindi, se elenchi solo i file in ”/dev/disk/by-id ', quindi puoi facilmente capire quale emulatore viene utilizzato dall'hypervisor.

Su 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 emula l'intero hardware collegato all'host su una macchina virtuale.

Su VM KVM

[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

Su 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

Nota: VBOX invece di QEMU su una macchina virtuale VirtualBox

Su VM KVM OpenStack

[centos@OS-vm ~]$ ls -l /dev/disk/by-id
 ls: cannot access /dev/disk/by-id: No such file or directory

Non sono riuscito a trovare alcuna informazione su OpenStack VM. Probabilmente, OpenStack lo nasconde? Non sono sicuro!

Su macchina host KVM

[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

Metodo 4:utilizzo del pacchetto virt-what

Non tutto il gusto di Linux viene fornito con "virt-what ' pacchetto installato. Puoi installarlo usando 'yum '.

[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%]

Su Xen VM

[root@xen-vm ~]# virt-what
 xen
 xen-hvm

Su VM KVM

[centos@kvm-vm ~]$ sudo virt-what
 kvm

Su VirtualBox VM

[root@VB-vm ~]# virt-what
 virtualbox

Su VM KVM OpenStack

[root@OS-vm ~]# virt-what
 kvm

Sull'host KVM

[root@kvm-host ~]# virt-what

Nota: Non ottieni alcun output su una macchina host.

Metodo 5:utilizzo di virtdetect o systemd-detect-virt

Virtdetect rpm si basa su "Sys::Detect::Virtualization ' perl script – Fai riferimento a questo tutorial per ulteriori informazioni .

Metodo 6:utilizzo del comando 'lshw'

Installa 'lshw ' pacchetto come di seguito:

[root@vm ]# yum install lshw
 Installed:
 lshw.x86_64 0:B.02.17-3.el6
 Complete!

Su 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

Su VM KVM

[centos@kvm-vm~]$ sudo lshw -class system
 description: Computer
 product: Bochs
 vendor: Bochs
 width: 64 bits
 capabilities: smbios-2.4 dmi-2.4 vsyscall32

Su 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

Su VM KVM OpenStack

[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

Sull'host KVM

[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

Metodo 7:utilizzo di 'ethtool'

Su alcuni hypervisor, puoi facilmente scoprire se il dispositivo di rete è emulato utilizzando il comando "ethtool".

[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

Bene, questi sono alcuni comandi che ti consentono di rilevare la virtualizzazione su vari hypervisor. Conosci un metodo diverso? Andiamo nella sezione commenti qui sotto.


Linux
  1. Gestisci il tuo calendario dal terminale Linux con il comando konsolekalendar

  2. Virtualizzazione su PC, spiegata ai principianti con casi d'uso pratici

  3. Macchine virtuali settimanali, con build script

  4. Come incollare al terminale Linux nella scatola virtuale con la tastiera Mac?

  5. Utilizzo di Samba per condividere una cartella da un guest Linux con un host Windows in VirtualBox

Guida introduttiva a Vagrant e VirtualBox – Parte 1

Lavorare con Microsoft Exchange dal desktop Linux

10 modi per personalizzare il tuo desktop Linux con lo strumento GNOME Tweaks

Come aumentare la dimensione del disco delle macchine virtuali esistenti in VirtualBox

Come eseguire macchine virtuali sul tuo server Linux (Ubuntu/RHEL/CENTOS 7) – Hypervisor KVM

Usa il tuo Chromecast da Linux e MacOS con mkchromecast