如何检查 Linux 系统是物理机还是虚拟机

作为 Linux 管理员,有时您可能想知道您是在使用物理机还是虚拟机。 大多数时候,您将远程访问和管理您的服务器。 您可能并不总是可以物理访问您的服务器,甚至可能实际上不知道服务器的位置。 但是,可以使用几个 Linux 实用程序来检查您的 Linux 系统是物理机还是虚拟机。 本指南列出了检查您正在使用的 Linux 系统是物理服务器还是虚拟服务器的所有可能方法。

检查 Linux 系统是物理机还是虚拟机

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

方法 1 – 使用 Dmidecode 实用程序

确定我们是在虚拟机还是物理机上工作的最简单方法是使用 dmidecode 效用。 Dmidecode,DMI 表解码器,用于查找您系统的硬件组件,以及其他有用的信息,例如序列号和 BIOS 版本。

大多数 Linux 发行版都预装了 Dmidecode。 以防万一,如果尚未安装,您可以使用发行版的包管理器安装它。 说为 example,以下命令将在基于 DEB 的系统(如 Ubuntu、Linux Mint)中安装 dmidecode。

$ sudo apt-get install dmidecode

安装 Dmidecode 后,运行以下命令查看您的系统是物理机还是虚拟机:

$ sudo dmidecode -s system-manufacturer

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

Dell Inc.

如果是用 Virtualbox 创建的虚拟系统,你会得到如下输出:

innotek GmbH

对于那些想知道的人, 英诺特 是一家德国软件公司,开发 PC 虚拟化软件,名为 VirtualBox.

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

QEMU

正如您在上面的输出中看到的,如果是物理系统,dmidecode 将显示制造商的名称(即 Dell Inc.)。 如果它是一个虚拟系统,那么它将显示虚拟化软件/技术(即 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 – 使用 Factor 实用程序

因素 是一个命令行实用程序,用于收集和显示系统信息。 与 Dmidecode 不同,Facter 默认没有预装。 根据您使用的 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 实用程序是一个小型命令行实用程序,可显示类 Unix 系统的详细硬件信息。 它显示所有硬件详细信息,包括内存配置、固件版本、主板配置、CPU 版本和速度、缓存配置、总线速度等。

一些 Linux 发行版预装了 lshw。 如果尚未安装,您可以如下所示进行安装。

在 Arch Linux 及其衍生版本中:

$ sudo pacman -S lshw

在 Fedora:

$ sudo dnf install lshw

在 RHEL 和衍生产品(例如 CentOS、科学 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.ostechnix.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 中支持的最大 RAM

方法 4 – 使用 dmesg 实用程序

我们可以使用找到系统的类型 dmesg 效用。 dmesg 用于检查或控制内核环形缓冲区。

要检查您的 Linux 系统是物理的还是虚拟的,只需运行:

$ sudo dmesg | grep "Hypervisor detected"

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

如果您的系统是虚拟机,那么您将看到如下所示的输出。

[ 0.000000] Hypervisor detected: KVM

方法 5 – 使用 hostnamectl 命令

我们可以找出系统是虚拟的还是物理的 主机名 命令。 它需要 systemd 才能工作。

$ 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.ostechnix.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-virt

systemd-检测-virt 工具检测虚拟化技术,可以区分全机虚拟化与硬件或容器虚拟化。

运行以下命令来检查系统是物理的还是虚拟的:

$ systemd-detect-virt

样本输出:

[Physical machine]

none

[Virtual machine on VirtualBox]

oracle

[Virtual machine on KVM/QEMU]

KVM

方法 7 – 使用 virt-what 脚本

virt-what 是 Red Hat 开发的一个小型 shell 脚本,用于查找我们是在虚拟机还是物理机中运行。 virt-what 为所有流行的 Linux 发行版打包,例如 RHEL, Fedora、CentOS、Debian、Ubuntu、Arch Linux (AUR)。

在 Arch Linux 中,您可以使用任何 AUR 助手从 AUR 安装它,例如 example .

$ yay -S virt-what

在 RHEL 中, Fedora中央操作系统:

$ sudo yum install virt-what

在 Debian、Ubuntu 上:

$ sudo apt-get install virt-what

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

$ sudo virt-what

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

如果您的系统是虚拟的,您将看到如下输出。

virtualbox
kvm

有关更多详细信息,请参阅项目的主页。

方法 8 – 使用 imvirt 脚本

不虚 又是一个小 perl 帮助您检测我们是否在虚拟机上运行的脚本。

在 Arch Linux 中,您可以使用 AUR 从 AUR 安装它 助手程序。

$ yay -S imvirt

在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt-get install imvirt

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

$ sudo imvirt

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

Physical

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

KVM

有关更多详细信息,请参阅项目的主页。

相关阅读:

  • 如何检查 Linux 系统是 32 位还是 64 位
  • 如何确定 CPU 是否支持虚拟化技术 (VT)

而且,这就是现在的全部。 如果您知道任何其他方法来查找 Linux 机器是物理的还是虚拟的,请在评论部分告诉我们。 我们将相应地检查和更新指南。