确定操作系统是否在虚拟环境中运行

ulv*_*lve 58 linux virtual-machine vmware system-installation

有什么方法可以确定我正在运行(实际安装)的操作系统是否在 VMWare 机器上运行。ntp如果在虚拟机上完成自动安装,我需要禁用设置,但如果在裸机上安装,则保持启用。

小智 78

如果内核检测到在某种虚拟机管理程序上运行,Linux 会添加该hypervisor标志/proc/cpuinfo

  • 这是最可靠的方式,应该是公认的答案恕我直言。因此可以使用以下命令:`grep -q ^flags.*\ hypervisor\ /proc/cpuinfo && echo "This machine is a VM"` (4认同)
  • 你是对的,反斜杠后面应该有两个空格。这也有效:`grep -q ^flags.*\ hypervisor /proc/cpuinfo && echo "This machine is a VM"` 这读取`/proc/cpuinfo`并检查`flags:`行是否包含字符串`hypervisor `,正如 Jan 所建议的那样。 (2认同)

小智 31

在 Linux 上,您可以使用命令 virt-what

[root@myhost]# virt-what
vmware
Run Code Online (Sandbox Code Playgroud)

Windows HyperV上的 linux 输出示例

[root@linuxvm11~] # virt-what
hyperv
Run Code Online (Sandbox Code Playgroud)


小智 20

这对我来说效果更好,因为它为我提供了有关制造商和产品名称的具体信息。

dmidecode -t system|grep 'Manufacturer\|Product'
Run Code Online (Sandbox Code Playgroud)

戴尔服务器上的输出:

Manufacturer: Dell Inc.
Product Name: PowerEdge C5220
Run Code Online (Sandbox Code Playgroud)

Virtualbox VM 上的输出:

Manufacturer: innotek GmbH
Product Name: VirtualBox
Run Code Online (Sandbox Code Playgroud)

KVM/QEMU 上的输出:

Manufacturer: QEMU
Product Name: Standard PC (i440FX + PIIX, 1996)
Run Code Online (Sandbox Code Playgroud)

这对于可以解析这些以更好地识别服务器的脚本来说非常有用……但是如果您在基础架构中使用 Chef,则可以检查Virtualization -> systemChef 服务器中的节点属性。

  • on openstack: ''' 制造商: OpenStack Foundation 产品名称: OpenStack Nova ''' (2认同)
  • 在 vmware 上 ''' 制造商:VMware, Inc. 产品名称:VMware 虚拟平台 ''' (2认同)

小智 12

跑:

$ dmesg |grep -i hypervisor
Hypervisor detected: KVM
Run Code Online (Sandbox Code Playgroud)


ulv*_*lve 10

使用dmidecodeorlshwgreping 似乎是找出答案的最佳方式。

  • grep 有什么用?我跑了`sudo dmidecode | grep hyper` 和`sudo dmidecode | grep virt` 但它们都不起作用。`lshw` 的结果与 `/proc/cpuinfo` 完全一样 (2认同)