Last updated on August 3, 2020 by Dan Nanni
If you want to detect whether the Linux OS is running inside a virtualized environment or on a baremetal hardware computer, there are various heuristics you can try, depending on the type of hypervisor/container used underneath. Different hypervisors and container technologies may introduce different fingerprints within their instances (e.g., processor manufacturer, special file in /proc, virtualized NIC driver name). Also the boot sequence shown by dmesg
can reveal some clues whether the OS is virtualized.
Fortunately, there are several command-line tools that make it far easier for end users to detect the type of virtualization technology used underneath Linux OS.
dmidecode
One way to detect the type of underlying virtualization is via dmidecode
command, which is originally designed to show information about system's BIOS and hardware components. In particular, use the following command to detect virtualization:
$ sudo dmidecode -s system-manufacturer
If you are running this command on a physical server, the output will be the actual name of the hardware manufacturer (e.g., "Dell Inc."). On the other hand, if you run the command on a virtual machine, it will show the name of virtualization technology (e.g., QEMU
, Xen
, VirtualBox
, "VMware, Inc.
").
Note that the dmidecode
command does not work within containers as container-based virtualization does not create device node entries in the container's /dev
directory which is used by dmidecode
.
systemd
If you use systemd
on your Linux system, you can use a command-line tool called systemd-detect-virt
which comes with systemd
. This command can detect both hypervisor-based (e.g., KVM, QEMU, VMware, Xen, Oracle VM, VirtualBox, UML) and container-based (e.g., LXC, Docker, OpenVZ) virtualization.
$ systemd-detect-virt
On a physical server, the output of systemd-detect-virt
will be "none
". When run inside a virtual machine or a container, systemd-detect-virt
will show the name of the virtualization technology used (e.g., lxc
, kvm
).
virt-what
Another way to detect a virtualized environment within a terminal is by using virt-what
. This command is actually a shell-script that uses various heuristics to identify the type of a virtualized environment you are in. It can detect QEMU/KVM, VMware, Hyper-V, VirtualBox, OpenVZ/Virtuozzo, Xen, LXC, IBM PowerVM, Parallels, etc.
To install virt-what
on Debian-based system:
$ sudo apt-get install virt-what
To install virt-what
on Red-Hat-based system:
$ sudo yum install virt-what
To determine whether you are on a physical server or a virtual server, run the command with root privilege:
$ sudo virt-what
If you are on a physical server, the command will print nothing. If you are on a virtual machine or a container, it will print the type of virtualization.
This website is made possible by minimal ads and your gracious donation via PayPal or credit card
Please note that this article is published by Xmodulo.com under a Creative Commons Attribution-ShareAlike 3.0 Unported License. If you would like to use the whole or any part of this article, you need to cite this web page at Xmodulo.com as the original source.
Xmodulo © 2021 ‒ About ‒ Write for Us ‒ Feed ‒ Powered by DigitalOcean