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.