Na Techglimpse často dostáváme e-maily od našich čtenářů, kteří nás žádají, abychom napsali výukový program na téma „Detekce virtualizace“ z VPS nebo virtuálního počítače. Na tyto e-maily jsme však nebyli schopni okamžitě odpovědět, protože jsme neměli testovací nastavení obsahující oblíbené hypervizory (alespoň několik), jako jsou Xen, VmWare, KVM, VirtualBox, HyperV atd.…Nedávno jsme museli mít běží málo hypervizorů – jen pro dobro našich čtenářů. Takže nakonec vám tento tutoriál řekne několik příkazů a prohledávání (mám na mysli čtení protokolů), které vám mohou pomoci identifikovat typ hypervizoru, který spouští aktuální virtuální počítač.
Níže uvedené příkazy byly provedeny na virtuálních počítačích vytvořených nad hypervizory Xen, KVM, VirtualBox a také na OpenStack-KVM Icehouse.
Metoda 1:Čtení systémového protokolu
Některé hypervizory unikají informace o svém typu (včetně názvu hypervizoru a typu virtualizace – jako je paravirtualizace, plná virtualizace nebo HVM) v souborech systémových protokolů. Tyto informace lze získat z /var/log/message nebo grepováním výstupu ‘dmesg ‘ příkaz.
Poznámka: Jak již bylo řečeno, tato metoda bude fungovat pouze na určitých hypervizorech. Například VirtualBox a Xen neunikají žádné informace v souborech protokolu.
Na Xen-VM
[root@xen-vm ~]# dmesg |grep virtual
V souborech protokolu Xen Hypervisor nemůžete najít žádné informace.
Na KVM-VM
[centos@KVM-vm ~]$ dmesg |grep virtual [ 0.000000] Booting paravirtualized kernel on KVM [ 1.930785] systemd[1]: Detected virtualization 'kvm'.
Na VirtualBox-VM
[root@VB-vm ~]# dmesg |grep virtual
Ze souborů protokolu na VirtualBoxu nemůžete najít žádné informace.
Na virtuálním počítači OpenStack KVM
[root@OS-vm ~]$ dmesg |grep virtual Booting paravirtualized kernel on KVM input: Macintosh mouse button emulation as /devices/virtual/input/input1
Na hostitelském stroji KVM
[root@kvm-host ~]$ dmesg |grep virtual Booting paravirtualized kernel on bare hardware
Metoda 2:Použití příkazu ‚dmidecode‘
DMI (Desktop Management Interface) – dmidecode , nativní příkaz Linuxu lze použít k výpisu informací o hardwaru a systému BIOS ve formátu čitelném pro člověka.
Když „dmidecode ‘ je spuštěno :
Na Xen VM
[root@xen-vm ~]# dmidecode | egrep -i 'manufacturer|product' Manufacturer: Xen Product Name: HVM domU Manufacturer: Xen Manufacturer: Intel
Na virtuálním počítači KVM
[centos@kvm-vm ~]$ sudo dmidecode | egrep -i 'manufacturer|product' Manufacturer: Bochs Product Name: Bochs Manufacturer: Bochs Manufacturer: Bochs
Poznámka: Můžete vidět ‘Bochs ‘ jako hodnota pro výrobce, název produktu atd...Bochs je emulátor a debugger kompatibilní s X86-64, který pomáhá emulaci procesoru, displeje, BIOSu, paměti a dalšího hardwaru počítače. To znamená, že počítač emuluje nějaký hardware, což naznačuje, že je to VM a většinou KVM.
Na virtuálním počítači VirtualBox
[root@VB-vm ~]# dmidecode | egrep -i 'manufacturer|product' Manufacturer: innotek GmbH Product Name: VirtualBox Manufacturer: Oracle Corporation Product Name: VirtualBox Manufacturer: Oracle Corporation
Na virtuálním počítači OpenStack-KVM
[centos@OS-vm ~]$ sudo dmidecode | egrep -i 'manufacturer|product' Manufacturer: Red Hat Product Name: KVM
Když spustíte ‘dmidecode ‘ na hostitelském počítači získáte informace o hardwaru a systému 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.
Metoda 3:Výpis /dev/disk
Virtuální počítače by měly mít emulaci hardwaru z hostitelského počítače. Například emulace disku z hostitele. Pokud tedy pouze vypíšete soubory pod ”/dev/disk/by-id ‘, pak můžete snadno zjistit, jaký emulátor Hypervisor používá.
Na 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 emuluje celý hardware připojený k hostiteli na virtuální počítač.
Na virtuálním počítači 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
Na virtuálním počítači 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
Poznámka: VBOX místo QEMU na virtuálním počítači VirtualBox
Na virtuálním počítači OpenStack KVM
[centos@OS-vm ~]$ ls -l /dev/disk/by-id ls: cannot access /dev/disk/by-id: No such file or directory
Nemohl jsem najít žádné informace o OpenStack VM. Pravděpodobně to OpenStack skrývá? Nejsem si jistý!
Na hostitelském počítači 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
Metoda 4:Použití balíčku virt-what
Ne všechny varianty Linuxu jsou dodávány s „virt-what ‘ balíček nainstalován. Můžete jej nainstalovat pomocí „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%]
Na Xen VM
[root@xen-vm ~]# virt-what xen xen-hvm
Na virtuálním počítači KVM
[centos@kvm-vm ~]$ sudo virt-what kvm
Na virtuálním počítači VirtualBox
[root@VB-vm ~]# virt-what virtualbox
Na virtuálním počítači OpenStack KVM
[root@OS-vm ~]# virt-what kvm
Na hostiteli KVM
[root@kvm-host ~]# virt-what
Poznámka: Na hostitelském počítači nezískáte žádný výstup.
Metoda 5:Použití virtdetect nebo systemd-detect-virt
Virtdetect rpm je založeno na „Sys::Detect::Virtualization ‘ perl script – Další informace naleznete v tomto návodu .
Metoda 6:Použití příkazu „lshw“
Nainstalujte „lshw ‘ balíček, jak je uvedeno níže:
[root@vm ]# yum install lshw Installed: lshw.x86_64 0:B.02.17-3.el6 Complete!
Na 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
Na virtuálním počítači 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
Na virtuálním počítači 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
Na virtuálním počítači 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
Na hostiteli 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
Metoda 7:Použití nástroje "ethtool"
U několika hypervizorů můžete snadno zjistit, zda je síťové zařízení emulováno pomocí příkazu „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
Toto je několik příkazů, které vám umožní detekovat virtualizaci na různých hypervizorech. Znáte jinou metodu? Pojďme v sekci komentářů níže.