If you work with Linux servers, chances are that you use SSH to connect to the remote server.
In such cases where you don't have direct access to the system, you might wonder whether your server is running in a virtual machine or on a physical system.
Let me show you how to do that.
Check if server is physical or virtual
There are several commands you can use for this purpose.
Using dmidecode command
The simplest way to check that is by using the dmidecode command.
sudo dmidecode -s system-manufacturer
- If it is a physical system, you should see the name of the manufacturer like Dell, Lenovo etc.
- If it is a virtual system, you should see an output like QEMU, innotek Gmbh (for VirtualBox).
The dmidecode command is used for decoding a computer's DMI information in human-readable format.
DMI, short for Desktop Management Interface, is a standard that (almost) all system manufacturer adhere to. The DMI framework is used for managing and tracking components in a desktop, laptop or server computer.
Thanks to DMI, you can get information about the system's hardware, system manufacturer and the serial number of the device.
The dmidecode (DMI Decode) command enables you to extract these information and with the
-s system-manufacturer you can get the system manufacturer detail.
If your system is real, you should see the name of the manufacturer:
abhishek@handbook:~$ sudo dmidecode -s system-manufacturer Dell Inc.
If it is a virtual machine, the information will be reflected accordingly.
root@localhost:~# dmidecode -s system-manufacturer QEMU
That was quick, wasn't it? You can refer to the man page of dmidecode command to see the keywords you can use to extract more information.
Another way to check if server is running on virtual machine is by using virt-what.
It is basically a shell script that can be installed as a command in most Linux distributions.
sudo apt install virt-what
If the server is running on a real, bare-metal system, it returns nothing. Otherwise, it will list some facts about the virtual machine.
root@localhost:~# virt-what kvm
I hope this quick helped you in determining whether your Linux server is running in a VM or on a physical machine.