Easy way to determine virtualization technology
dmidecode -s system-product-name
I have tested on Vmware Workstation, VirtualBox, QEMU with KVM, standalone QEMU with Ubuntu as the guest OS. Others have added additional platforms that they're familiar with as well.
Virtualization technologies
VMware Workstation
root@router:~# dmidecode -s system-product-name VMware Virtual Platform
VirtualBox
root@router:~# dmidecode -s system-product-name VirtualBox
Qemu with KVM
root@router:~# dmidecode -s system-product-name KVM
Qemu (emulated)
root@router:~# dmidecode -s system-product-name Bochs
Microsoft VirtualPC
root@router:~# dmidecode | egrep -i 'manufacturer|product' Manufacturer: Microsoft Corporation Product Name: Virtual Machine
Virtuozzo
root@router:~# dmidecode /dev/mem: Permission denied
Xen
root@router:~# dmidecode | grep -i domU Product Name: HVM domU
On bare metal, this returns an identification of the computer or motherboard model.
/dev/disk/by-id
If you don't have the rights to run dmidecode
then you can use:
Virtualization Technology: QEMU
ls -1 /dev/disk/by-id/
Output
[root@host-7-129 ~]# ls -1 /dev/disk/by-id/
ata-QEMU_DVD-ROM_QM00003
ata-QEMU_HARDDISK_QM00001
ata-QEMU_HARDDISK_QM00001-part1
ata-QEMU_HARDDISK_QM00002
ata-QEMU_HARDDISK_QM00002-part1
scsi-SATA_QEMU_HARDDISK_QM00001
scsi-SATA_QEMU_HARDDISK_QM00001-part1
scsi-SATA_QEMU_HARDDISK_QM00002
scsi-SATA_QEMU_HARDDISK_QM00002-part1
References
- How to detect virtualization at dmo.ca
If the container is running systemd
:
$ systemd-detect-virt
lxc
On KVM for example it returns:
kvm
and on a non-virtualized host:
none
See also:
- systemd-detect-virt(1)
- Detecting Virtualization
Desirable method
lshw
This command produces the following output on vairous VM technology guests.
$ sudo lshw -class system
Output
KVM
mungr description: Computer product: KVM vendor: Red Hat width: 64 bits capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32
Virtual Box
fedora17 description: Computer product: VirtualBox () vendor: innotek GmbH version: 1.2 serial: 0 width: 64 bits capabilities: smbios-2.5 dmi-2.5 vsyscall32
VMWare
partedmagic description: Computer product: VMware Virtual Platform () vendor: VMware, Inc. version: None serial: VMware-56 4d 94 a0 53 e3 f3 c6-f9 a6 eb 1a 89 70 04 57 width: 32 bits capabilities: smbios-2.4 dmi-2.4 smp-1.4 smp
Scripting
If you're on Ubuntu/Debian there's the package open-vm-tools
can be installed. It provides vmware-checkvm
. It returns only a a digit. A 0
means it's a VM, a 1
means it's a physical system.
Less desirable methods
If it's KVM the /proc/scsi/scsi
and ethtool
options show up as follows:
SCSI
$ cat /proc/scsi/scsi
Attached devices:
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: QEMU Model: QEMU DVD-ROM Rev: 0.9.
Type: CD-ROM ANSI SCSI revision: 05
ethtool
$ ethtool -i eth0
driver: virtio_net
version:
firmware-version:
bus-info: virtio0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
The virtio_net is part of KVM. The /proc/scsi/scsi
tells you that you're in a VM, and that you're most likely KVM.
dmesg
Using the following commands grep
'ing through dmesg
log.
$ sudo dmesg | grep -i virtual
VMWare
VMware vmxnet virtual NIC driver Vendor: VMware Model: Virtual disk Rev: 1.0 hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive
QEmu or KVM
If the
"-cpu host"
option has not been used, QEmu and KVM will identify themselves as:CPU: AMD QEMU Virtual CPU version 0.9.1 stepping 03
otherwise, the host's CPU information will be used both in
dmesg
, or in/proc/cpuinfo
. However, you should see something like:[ 0.000000] Booting paravirtualized kernel on KVM
In newer kernels that understand that they're running under paravirtualization.
Microsoft VirtualPC
hda: Virtual HD, ATA DISK drive hdc: Virtual CD, ATAPI CD/DVD-ROM drive
Xen
$ sudo dmesg | grep -i xen Xen virtual console successfully installed as tty1
Virtuozzo
# method #1 $ sudo dmesg (returns no output) # method #2 $ sudo cat /var/log/dmesg (returns no output) # method #3 $ sudo ls -al /proc/vz veinfo veinfo_redir veredir vestat vzaquota vzdata
References
- dmo.ca/ blog/ How to detect virtualization