How to Check if Linux Server is Physical or Virtual

Most of the IT sector has migrated to the virtual environment (not just IT and many tech companies) to reduce infrastructure costs.

But they still have physical servers for some specific purpose.

In recent days we have received some mail requests regarding this topic.

We don’t have a proper test environment to work with, but we now have a small test environment with VMware and VirtualBox.

So today we had the opportunity to write an article to verify whether the machine is physical or virtual.

As a Linux server administrator, you need to know whether the machine is physical or virtual in your environment. This can be very helpful if you want to fix anything on the system.

Popular Virtualization Technology KVM, OpenVZ, Xen and MWare, VirtualBox are popular virtualization software.

There are many ways to identify the state of the machine (physical or virtual) in Linux. Here, we have listed ten simple methods to determine it.

Method-1: How to Check Whether the Linux Server is Physical or Virtual Using the dmidecode Command

The dmidecode command reads the system DMI (Desktop Management Interface) table to display about your system’s hardware and BIOS information. The table has system manufacturer, model name, serial number, BIOS version, CPU sockets, expansion slots, memory module slots, and the list of I/O ports, etc.

[VMware Workstation]
# dmidecode -s system-manufacturer
VMware, Inc.

# dmidecode -s system-product-name
VMware Virtual Platform

[VirtualBox]
$ sudo dmidecode -s system-product-name
VirtualBox

[OpenStack]
$ sudo dmidecode -s system-product-name
OpenStack Nova

[Physical Server]
# dmidecode -s system-manufacturer
IBM

# dmidecode -s system-product-name
System x3550 M2 -[7284AC1]-

The above output clearly shows the appropriate virtualization name. It displays the manufacturer name if it’s a physical server.

Method-2: How to Check if Linux Server is Physical or Virtual Using the lshw Command

The lshw command (Hardware Lister) is a small tool to provide detailed information on the hardware configuration of the machine. It can report exact memory configuration, firmware version, mainboard configuration, CPU version and speed, cache configuration, bus speed, etc. on DMI-capable x86 or EFI (IA-64) systems and on some PowerPC machines (​PowerMac G4 is known to work).

For VMware system

# lshw -class system
2daygeek
    description: Computer
    product: VMware Virtual Platform ()
    vendor: VMware, Inc.
    version: None
    serial: VMware-42 0a a0 62 85 7e 8d 48-f2 8f 15 5a aa 7f 77 95
    width: 64 bits
    capabilities: smbios-2.4 dmi-2.4 vsyscall32
    configuration: administrator_password=enabled boot=normal frontpanel_password=unknown keyboard_password=unknown power-on_password=disabled uuid=420AA062-857E-8D48-F28F-155AAA7F7795
  *-remoteaccess UNCLAIMED
       vendor: Intel
       physical id: 1
       capabilities: inbound

[Alternatively use lshw command to print only product]
# lshw -class system | grep product
product: VMware Virtual Platform ()

For VirtualBox system

$ sudo lshw -class system
daygeek                     
    description: Computer
    product: VirtualBox
    vendor: innotek GmbH
    version: 1.2
    serial: 0
    width: 64 bits
    capabilities: smbios-2.5 dmi-2.5 smp vsyscall32
    configuration: family=Virtual Machine uuid=762A99BF-6916-450F-80A6-B2E9E78FC9A1

[Alternatively use lshw command to print only product]
# lshw -class system | grep product | awk '{print $2}'
VirtualBox

lshw Command Output in Physical Server

# lshw -class system
2daygeek
    description: Blade
    product: Flex System x240 Compute Node -[7284AC1]-
    vendor: IBM
    version: 06
    serial: KQ3YZ9B
    width: 64 bits
    capabilities: smbios-2.7 dmi-2.7 vsyscall32
    configuration: boot=normal chassis=enclosure family=System X uuid=8B57E5D1-7002-3F3C-8765-

[Alternatively use lshw command to print only product]
# lshw -class system | grep product
product: Flex System x240 Compute Node -[7284AC1]-

Method-3: How to Check Whether the Linux Server is Physical or Virtual Using the facter Command

Facter is a standalone tool based on Ruby that provides system information.

[VMware Workstation]
# facter virtual
vmware

[VirtualBox]
$ facter virtual
virtualbox

[Physical Server]
# facter virtual
physical

Method-4: How to Check if Linux Server is Physical or Virtual Using the imvirt Command

imvirt is a set of Perl modules which used to detect whether the Linux box is physical or virtual. If it detects that it is a virtualized one, then it tries to find out which virtualization technology is used.

[VMware Workstation]
# imvirt
VMware VMware ESX Server

[VirtualBox]
$ imvirt
KVM

[Physical Server]
# imvirt
Physical

Method-5: How to Check Whether the Linux Server is Physical or Virtual Using the virt-what Command

virt-what is a small shell script which can be used to detect if the Linux box is running in a virtual machine. Also its print the virtualization technology is used. If nothing is printed and the script exits with code 0 (no error), then it physical server.

[VMware Workstation]
# virt-what
vmware

[VirtualBox]
$ sudo virt-what
virtualbox
kvm

[Physical Server]
# virt-what

Method-6: How to Check if Linux Server is Physical or Virtual Using the systemd-detect-virt Command

systemd-detect-virt detects execution in a virtualized environment. It identifies the virtualization technology and can distinguish full machine virtualization from container virtualization.

[VirtualBox]
$ systemd-detect-virt
oracle

[Physical]
$ systemd-detect-virt
None

Method-7: How to Check Whether the Linux Server is Physical or Virtual Using the hostnamectl Command

The hostnamectl tool is provided to administrate the system hostname. There are three separate classes of host names in use on a given system, static, pretty, and transient.

VirtualBox Output

# hostnamectl
or
# hostnamectl status
   Static hostname: daygeek
         Icon name: computer-vm
           Chassis: vm
        Machine ID: c01b17d61f2542478047952180768c82
           Boot ID: 8be91fafab024c5880581fb3968a22f8
    Virtualization: oracle
  Operating System: Ubuntu 16.10
            Kernel: Linux 4.10.1-041001-generic
      Architecture: x86-64

Physical Output

# hostnamectl
or
# hostnamectl status
   Static hostname: daygeek
         Icon name: computer-laptop
           Chassis: laptop
        Machine ID: bb8348e0f32e495184590f98ce96ee62
           Boot ID: 06ee2c95917744b9b23a2861a0a82abb
  Operating System: Fedora 25 (Workstation Edition)
       CPE OS Name: cpe:/o:fedoraproject:fedora:25
            Kernel: Linux 4.10.14-200.fc25.x86_64
      Architecture: x86-64

Method-8: How to Check if Linux Server is Physical or Virtual Using the hwinfo Command

The hwinfo command is used to probe for the hardware present in the system. It can be used to generate a system overview log which can be later used for support.

# hwinfo | grep "Manufacturer"
  <6>[27867.056016] usb 2-1: Manufacturer: VirtualBox
  <6>[31555.965214] usb 2-1: Manufacturer: VirtualBox
  <6>[32123.744633] usb 2-1: Manufacturer: VirtualBox
  <6>[33779.863965] usb 2-1: Manufacturer: VirtualBox
  <6>[34968.587607] usb 2-1: Manufacturer: VirtualBox
  <6>[37364.054145] usb 2-1: Manufacturer: VirtualBox
  <6>[46326.504627] usb 2-1: Manufacturer: VirtualBox
  <6>[54602.872309] usb 2-1: Manufacturer: VirtualBox
    Manufacturer: "innotek GmbH"
    Manufacturer: "Oracle Corporation"
    Manufacturer: "Oracle Corporation"

Method-9: How to Check Whether the Linux Server is Physical or Virtual Using the lscpu Command

lscpu – display information on CPU architecture and gathers CPU architecture information like number of CPUs, threads, cores, sockets, NUMA nodes, information about CPU caches, CPU family, model and prints it in a human-readable format.

# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Model name:            Intel Core Processor (Haswell, no TSX)
Stepping:              1
CPU MHz:               2399.996
BogoMIPS:              4799.99
Virtualization:        VT-x
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0

[Alternatively use lshw command to print only product]
# lscpu | grep Hypervisor
Hypervisor vendor:     KVM

Note: The hypervisor option will not be listed if it’s a physical server.

Method-10: How to Check if Linux Server is Physical or Virtual Using the inxi Command

The inxi command is a script that quickly shows system hardware, CPU, drivers, Xorg, Desktop, Kernel, GCC version(s), Processes, RAM usage, and a wide variety of other useful information, also used for forum technical support & debugging tool.

$ inxi -b
System:    Host: daygeek Kernel: 4.8.0-32-generic x86_64 (64 bit) Desktop: Unity 7.5.0  Distro: Ubuntu 16.10
Machine:   System: innotek (portable) product: VirtualBox v: 1.2
           Mobo: Oracle model: VirtualBox v: 1.2 BIOS: innotek v: VirtualBox date: 12/01/2006
Battery    BAT0: charge: 31.5 Wh 63.0% condition: 50.0/50.0 Wh (100%)
CPU:       Dual core Intel Core i7-6700HQ (-MCP-) speed: 2591 MHz (max)
Graphics:  Card: InnoTek Systemberatung VirtualBox Graphics Adapter
           Display Server: X.Org 1.18.4 drivers: (unloaded: fbdev,vesa) Resolution: [email protected]
           GLX Renderer: Gallium 0.4 on llvmpipe (LLVM 3.8, 256 bits) GLX Version: 3.0 Mesa 12.0.3
Network:   Card: Intel 82540EM Gigabit Ethernet Controller driver: e1000
Drives:    HDD Total Size: 42.9GB (17.6% used)
Info:      Processes: 197 Uptime: 50 min Memory: 1586.2/1999.8MB Client: Shell (bash) inxi: 2.3.1

About Magesh Maruthamuthu

Love to play with all Linux distribution

View all posts by Magesh Maruthamuthu

One Comment on “How to Check if Linux Server is Physical or Virtual”

Leave a Reply

Your email address will not be published. Required fields are marked *