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

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

内容

  1. 检查Linux系统是物理机还是虚拟机
    1. 方法 1 – 使用 Dmidecode 实用程序
    2. 方法 2 – 使用 Factor 实用程序
    3. 方法 3 – 使用 lshw 实用程序
    4. 方法 4 – 使用 dmesg 实用程序
    5. 方法 5 – 使用 hostnamectl 命令
    6. 方法 6 – 使用 systemd-detect-virt
    7. 方法 7 – 使用 virt-what 脚本
    8. 方法 8 – 使用 imvirt 脚本

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

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

方法 1 – 使用 Dmidecode 实用程序

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

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

$ sudo apt-get install dmidecode

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

$ sudo dmidecode -s system-manufacturer

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

Dell Inc.

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

innotek GmbH

对于那些想知道的人, 英诺特 是一家总部位于德国的软件公司,开发名为 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

安装factorer后,运行以下命令检查系统是物理机还是虚拟机:

$ 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 实用程序

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

一些 Linux 发行版预装了 lshw。 如果还没有安装,可以如下图安装。

在 Arch Linux 和衍生产品中:

$ sudo pacman -S lshw

在 Fedora:

$ sudo dnf install lshw

在 RHEL 及 CentOS、science 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 用于检查或控制内核环形缓冲区。

要检查您的 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 脚本

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

在 Arch Linux 中,你可以使用任何 AUR 助手从 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

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

  • https://people.redhat.com/~rjones/virt-what/

方法 8 – 使用 imvirt 脚本

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

在 Arch Linux 中,你可以使用 AUR 安装它 帮手程序。

$ yay -S imvirt

在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt-get install imvirt

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

$ sudo imvirt

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

Physical

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

KVM

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

  • https://micky.ibh.net/~liske/imvirt.html

相关阅读:

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

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

BASH检查Linux系统是否是物理的或虚拟的检测虚拟化技术dmesgdmidecodeFacter查找虚拟化技术imvirtLinuxLinux命令lshwsystemdvirt-what