如何检查Linux系统是否是物理或者虚拟机
作为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