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