如何检查Linux系统是否是物理或者虚拟机

时间:2020-03-21 11:42:50  来源:igfitidea点击:

作为Linux管理员,有时我们可能想知道我们是否正在处理物理或者虚拟机。
大多数时候,我们将远程访问和管理服务器。
我们可能并不总是有服务器的物理访问,并且我们甚至可能无法实际上知道服务器所在位置。
但是,可以检查Linux系统是否是使用Linux实用程序的耦合的物理或者虚拟机。
本教程列出了检查我们正在处理的Linux系统是否为物理服务器或者虚拟服务器。

检查Linux系统是否是物理或者虚拟机

如果系统是物理或者虚拟的,则可以找到许多方法。
我知道目前的以下方法。
如果我在未来的日子里找到任何其他方式,我会更新。

方法1 - 使用dmidecode实用程序

找到我们在虚拟或者物理计算机上工作的最简单方法是使用dmidecode实用程序。
DMIDecode,DMI表解码器,用于查找系统的硬件组件,以及其他有用信息,如序列号和BIOS修订版。

DMidecode预先安装了大多数Linux发行版。
就在此情况下,如果未安装,则可以使用分发的包管理器安装它。
例如,以下命令将在基于Deb的系统中安装DMidecode,例如Ubuntu,Linux Mint。

$sudo apt-get install dmidecode

安装dmidecode后,运行以下命令以了解系统是物理或者虚拟机:

$sudo dmidecode -s system-manufacturer

如果它是一个物理系统,我们将获得如下所示的输出。

Dell Inc.

如果是使用VirtualBox创建的虚拟系统,则会收到以下输出:

innotek GmbH

对于那些令人想知道的,Innotek是一家以德国的软件开发PC Virtualization软件,称为VirtualBox。

如果是使用KVM/QEMU创建的虚拟系统,则输出将是:

QEMU

如上所述,如果它是一个物理系统,Dmidecode将显示制造商的名称(即戴尔)。
如果它是虚拟系统,那么它将显示虚拟化软件/技术(即VirtualBox或者Qemu)。

此外,我们可以使用此命令检查它是否是物理或者虚拟系统。

$sudo dmidecode | grep Product

示例输出:

[Physical system]
Product Name: 01HXXJ
Product Name: Inspiron N5050
[Virtual system on VirtualBox]
Product Name: VirtualBox
Product Name: VirtualBox
[Virtual system on KVM/QEMU]
Product Name: Standard PC (Q35 + ICH9, 2009)

另一个命令要了解它是否是物理或者虚拟系统是:

$sudo dmidecode -s system-product-name

示例输出:

[Physical system]
Inspiron N5050
[Virtual system on VirtualBox]
VirtualBox
[Virtual system on KVM/QEMU]
Standard PC (Q35 + ICH9, 2009)

又一个dmidecode命令找到远程系统的类型是:

$sudo dmidecode | egrep -i 'manufacturer|product'

示例输出:

[Physical system]
 Manufacturer: Intel 
 Manufacturer: Sanyo 
 Manufacturer: Not Specified
 Manufacturer: Dell Inc.
 Product Name: 01HXXJ
 Manufacturer: Dell Inc.
 Manufacturer: Dell Inc.
 Product Name: Inspiron N5050
 Manufacturer: 014F
[Virtual system on VirtualBox]
 Manufacturer: innotek GmbH
 Product Name: VirtualBox
 Manufacturer: Oracle Corporation
 Product Name: VirtualBox
 Manufacturer: Oracle Corporation
[Virtual system on KVM/QEMU]
Manufacturer: QEMU
Product Name: Standard PC (Q35 + ICH9, 2009)
Manufacturer: QEMU
Manufacturer: QEMU
Manufacturer: QEMU
Manufacturer: QEMU

而且,一个dmidecode命令是实现相同的目标:

$sudo dmidecode | egrep -i 'vendor'

示例输出:

[Physical system]
Vendor: Dell Inc.
[Virtual system on VirtualBox]
Vendor: innotek GmbH
[Virtual system on KVM/QEMU]
Vendor: EFI Development Kit II/OVMF

方法2 - 使用曲线实用程序

FALACT是收集和显示系统信息的命令行实用程序。
与DMidecode不同,默认情况下不会预先安装。
我们可能需要如下所示安装它,具体取决于我们使用的Linux分发。

在Arch Linux,Manjaro Linux:

$sudo pacman -S facter

在Fedora:

$sudo dnf install facter

在Centos,Rhel:

$sudo yum install epel-release
$sudo yum installl facter

在opensuse中:

$sudo zypper install facter

一旦安装了一个,请运行以下命令检查系统是否是物理或者虚拟机:

$facter 2> /dev/null | grep virtual

如果此命令不起作用,请尝试使用sudo权限:

$sudo facter 2> /dev/null | grep virtual

示例输出:

[Physical system]
is_virtual => false
virtual => physical
[Virtual system on VirtualBox and KVM/QEMU]
is_virtual => true
virtual => kvm

或者,使用以下命令:

$facter virtual

或者,

$sudo facter virtual

如果它是物理机器,则输出将是:

physical

如果是虚拟机,我们将看到下面的输出。

kvm

方法3 - 使用LSHW实用程序

LSHW实用程序是一个小型命令行实用程序,显示象征式系统的详细硬件信息。
它显示所有硬件详细信息,包括内存配置,固件版本,主板配置,CPU版本和速度,缓存配置,总线速度等。

使用LSHW预先安装一些Linux发行版。
如果未安装它,则可以安装如下所示。

在Arch Linux和衍生品:

$sudo pacman -S lshw

在Fedora:

$sudo dnf install lshw

在RHEL和衍生品,如CentOS,Scientific Linux:

$sudo yum install epel-release
$sudo yum install lshw

在Debian,Ubuntu,Linux Mint:

$sudo apt-get install lshw

在Suse/OpenSuse:

$sudo zypper in lshw

安装LSHW后,运行以下命令,以查找系统是否是物理或者虚拟的:

$sudo lshw -class system

示例输出:

[Physical system]
sk 
 description: Portable Computer
 product: Inspiron N5050 (To be filled by O.E.M.)
 vendor: Dell Inc.
 version: Not Specified
 serial: JSQ9PR1
 width: 4294967295 bits
 capabilities: smbios-2.6 dmi-2.6 smp vsyscall32
 configuration: boot=normal chassis=portable sku=To be filled by O.E.M. uuid=44454C4C-5300-1051-8039-CAC04F505231
[Virtual system on VirtualBox]
ubuntuserver 
 description: Computer
 product: VirtualBox
 vendor: innotek GmbH
 version: 1.2
 serial: 0
 width: 64 bits
 capabilities: smbios-2.5 dmi-2.5 vsyscall32
 configuration: family=Virtual Machine uuid=78B58916-4074-42E2-860F-7CAF39B5E6F5
[Virtual system on KVM/QEMU]
centos8uefi.theitroad.lan   
    description: Computer
    product: Standard PC (Q35 + ICH9, 2009)
    vendor: QEMU
    version: pc-q35-4.2
    width: 64 bits
    capabilities: smbios-2.8 dmi-2.8 smp vsyscall32
    configuration: boot=normal uuid=C40041DE-2E63-094C-8DCF-BBDE29170268
  *-pnp00:00
       product: PnP device PNP0b00
       physical id: 1
       capabilities: pnp
       configuration: driver=rtc_cmos

建议阅读:

  • 如何在Linux上找到硬件规范
  • 如何在Linux中找到最大支持的内存

方法4 - 使用DMESG实用程序

我们可以使用DMESG实用程序找到系统类型。
DMESG用于检查或者控制内核环形缓冲区。

要检查Linux系统是否是物理或者虚拟,只需运行:

$sudo dmesg | grep "Hypervisor detected"

如果系统是物理的,则不会看到任何输出。

如果系统是虚拟机,那么我们将看到下面的输出。

[ 0.000000] Hypervisor detected: KVM

方法5 - 使用hostnamectl命令

我们可以找到如果使用hostnamectl命令是虚拟或者物理的。
它需要系统工作。

$hostnamectl status

或者,

$hostnamectl

示例输出:

[Physical system]
Static hostname: sk
 Icon name: computer-laptop
 Chassis: laptop
 Machine ID: 84e3c8e37e114ac9bc9f69689b49cfaa
 Boot ID: 19cf3572e1634e778b5d494d9c1af6e9
 Operating System: Arch Linux
 Kernel: Linux 4.10.13-1-ARCH
 Architecture: x86-64
[Virtual system on VirtualBox]
Static hostname: ubuntuserver
 Icon name: computer-vm
 Chassis: vm
 Machine ID: 2befe86cf8887ba098b509e457554beb
 Boot ID: 8021c02d65dc46a1885afb25dddcf18c
 Virtualization: oracle
 Operating System: Ubuntu 16.04.1 LTS
 Kernel: Linux 4.4.0-78-generic
 Architecture: x86-64
[Virtual system on KVM/QEMU]
Static hostname: centos8uefi.theitroad.lan
Icon name: computer-vm
Chassis: vm
Machine ID: de4100c4632e4c098dcfbbde29170268
Boot ID: 6136783bb9c241d08c8901aeecc7c30d
Virtualization: kvm
Operating System: CentOS Linux 8 (Core)
CPE OS Name: cpe:/o:centos:centos:8
Kernel: Linux 4.18.0-80.el8.x86_64
Architecture: x86-64

方法6 - 使用Systemd-Detect-adv

SystemD-Detect-virt工具检测虚拟化技术,并可以将完整的机器虚拟化与硬件或者容器虚拟化区分开来。

运行以下命令以检查系统是否是物理或者虚拟:

$systemd-detect-virt

示例输出:

[Physical machine]
none
[Virtual machine on VirtualBox]
oracle
[Virtual machine on KVM/QEMU]
KVM

方法7 - 使用virt-what脚本

virt-what是红帽开发的小shell脚本,以查找我们是否在虚拟机或者物理机器中运行。
所有流行的Linux发行版,如rhel,fedora,centos,debian,Ubuntu,Arch Linux(AUR)都打包了virt-what。

在ARCH Linux中,我们可以使用任何AUR助手,例如YAY从AUR安装它。

$yay -S virt-what

在Rhel,Fedora,Centos:

$sudo yum install virt-what

在Debian,Ubuntu:

$sudo apt-get install virt-what

安装后,运行以下命令以显示系统是物理或者虚拟的:

$sudo virt-what

如果没有打印任何内容,并且脚本用代码0退出(没有错误),那么它意味着系统是我们不知道或者无法检测到的物理或者虚拟机的类型。

如果系统是虚拟的,我们将看到如下所示的输出。

virtualbox
kvm

方法8 - 使用IMVirt脚本

IMVirt还是另一个小Perl脚本,可检测我们在虚拟机上运行。

在Arch Linux中,我们可以使用Yay Helper程序从Aur安装它。

$yay -S imvirt

在Debian,Ubuntu,Linux Mint:

$sudo apt-get install imvirt

安装后,运行以下命令以显示系统是物理或者虚拟的:

$sudo imvirt

如果系统是物理的,则输出将是:

Physical

如果系统是虚拟的,我们将看到:

KVM