En Techglimpse, con frecuencia recibimos correos electrónicos de nuestros lectores que nos piden que escribamos un tutorial sobre 'Detección de virtualización' desde un VPS o una máquina virtual. Sin embargo, no pudimos responder a esos correos electrónicos de inmediato, ya que no teníamos una configuración de prueba que comprendiera hipervisores populares (al menos algunos) como Xen, VmWare, KVM, VirtualBox, HyperV, etc. Recientemente, tuvimos que tener pocos hipervisores funcionando, solo por el bien de nuestros lectores. Entonces, finalmente, este tutorial le dirá algunos comandos y excavación (es decir, lectura de registros) que pueden ayudarlo a identificar el tipo de hipervisor que ejecuta la máquina virtual actual.
Los siguientes comandos se ejecutaron en máquinas virtuales creadas sobre hipervisores Xen, KVM, VirtualBox y también en OpenStack-KVM Icehouse.
Método 1:Lectura del registro del sistema
Ciertos hipervisores filtran información sobre su tipo (incluido el nombre del hipervisor y el tipo de virtualización, como paravirtualización, virtualización completa o HVM) en los archivos de registro del sistema. Esta información se puede obtener de /var/log/message o agrupando la salida de 'dmesg ‘ comando.
En Xen-VM
[root@xen-vm ~]# dmesg |grep virtual
No puede encontrar ninguna información de los archivos de registro en Xen Hypervisor.
En KVM-VM
[centos@KVM-vm ~]$ dmesg |grep virtual [ 0.000000] Booting paravirtualized kernel on KVM [ 1.930785] systemd[1]: Detected virtualization 'kvm'.
En VirtualBox-VM
[root@VB-vm ~]# dmesg |grep virtual
No puede encontrar ninguna información de los archivos de registro en VirtualBox.
En la máquina virtual OpenStack KVM
[root@OS-vm ~]$ dmesg |grep virtual Booting paravirtualized kernel on KVM input: Macintosh mouse button emulation as /devices/virtual/input/input1
En la máquina host KVM
[root@kvm-host ~]$ dmesg |grep virtual Booting paravirtualized kernel on bare hardware
Método 2:Usando el comando 'dmidecode'
DMI (interfaz de administración de escritorio):dmidecode , el comando nativo de Linux se puede usar para volcar información de hardware y BIOS en un formato legible por humanos.
Cuando ‘dmidecode ' se ejecuta :
En máquina virtual Xen
[root@xen-vm ~]# dmidecode | egrep -i 'manufacturer|product' Manufacturer: Xen Product Name: HVM domU Manufacturer: Xen Manufacturer: Intel
En la máquina virtual KVM
[centos@kvm-vm ~]$ sudo dmidecode | egrep -i 'manufacturer|product' Manufacturer: Bochs Product Name: Bochs Manufacturer: Bochs Manufacturer: Bochs
En la máquina virtual de VirtualBox
[root@VB-vm ~]# dmidecode | egrep -i 'manufacturer|product' Manufacturer: innotek GmbH Product Name: VirtualBox Manufacturer: Oracle Corporation Product Name: VirtualBox Manufacturer: Oracle Corporation
En la máquina virtual OpenStack-KVM
[centos@OS-vm ~]$ sudo dmidecode | egrep -i 'manufacturer|product' Manufacturer: Red Hat Product Name: KVM
Cuando ejecuta 'dmidecode ‘ en una máquina host, obtienes la información del BIOS y del hardware.
[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.
Método 3:Listar /dev/disk
Las máquinas virtuales deben tener emulación de hardware desde la máquina host. Por ejemplo, emulación de disco desde el host. Entonces, si solo enumera los archivos en ”/dev/disk/by-id ', entonces puede distinguir fácilmente qué emulador está utilizando el hipervisor.
En máquina virtual Xen
[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 todo el hardware conectado al host en una máquina virtual.
En la máquina virtual 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
En la máquina virtual de VirtualBox
[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
En la máquina virtual OpenStack KVM
[centos@OS-vm ~]$ ls -l /dev/disk/by-id ls: cannot access /dev/disk/by-id: No such file or directory
No pude encontrar ninguna información sobre OpenStack VM. ¿Probablemente, OpenStack lo oculta? ¡No estoy seguro!
En la máquina 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
Método 4:Usar el paquete virt-what
No todos los sabores de Linux vienen con 'virt-what 'paquete instalado. Puedes instalarlo 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%]
En máquina virtual Xen
[root@xen-vm ~]# virt-what xen xen-hvm
En la máquina virtual KVM
[centos@kvm-vm ~]$ sudo virt-what kvm
En la máquina virtual de VirtualBox
[root@VB-vm ~]# virt-what virtualbox
En la máquina virtual OpenStack KVM
[root@OS-vm ~]# virt-what kvm
En host KVM
[root@kvm-host ~]# virt-what
Método 5:Usar virtdetect o systemd-detect-virt
Virtdetect rpm se basa en 'Sys::Detect::Virtualization ' secuencia de comandos perl - Consulte este tutorial para obtener más información .
Método 6:Usando el comando 'lshw'
Instalar 'lshw ' paquete de la siguiente manera:
[root@vm ]# yum install lshw Installed: lshw.x86_64 0:B.02.17-3.el6 Complete!
En máquina virtual Xen
[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
En la máquina virtual 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
En la máquina virtual de VirtualBox
[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
En la máquina virtual OpenStack KVM
[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
En 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
Método 7:Uso de 'ethtool'
En algunos hipervisores, puede averiguar fácilmente si el dispositivo de red se emula mediante el 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
Bueno, estos son algunos comandos que le permiten detectar la virtualización en varios hipervisores. ¿Conoces otro método? Déjenos en la sección de comentarios a continuación.