从 VM 内部确定 VMWare 类型

从 VM 内部确定 VMWare 类型

如果客户虚拟机是 Linux 机器,那么是否可以从虚拟机(即客户操作系统)内部确定 VMWare 类型(ESXi、Workstation、Fusion 等)?

我尝试了各种各样的方法,比如在hypervisorin 中查找/proc/cpuinfo、使用lscpu等等,但我只发现它是“vmware”,没有具体信息。

我没有机器的 root 权限,如果情况发生变化,尽管我对仅使用 root 即可实现的解决方案感兴趣,但这对于某些事情来说会很方便。此外,我最感兴趣的是 Linux 解决方案,但同样,仅限 Windows 的解决方案可能会派上用场。

我之所以问这个问题,是为了弄清楚性能。ESXi a) 通常部署在“真实硬件”™ 上,并且 b) 没有额外的操作系统开销。请参阅这个 serverfault 问题更多详细信息,尤其是这个答案

答案1

您可以从 dmidecode 输出中的 BIOS 版本字符串中确定版本。我找到了一个如何执行此操作的示例https://fritshoogland.wordpress.com/2013/01/24/determine-vmware-esx-version-from-linux-as-guest-os/其历史可以追溯到 2013 年,因此可能缺少一些较新的版本:

case $( dmidecode | grep -A4 "BIOS Information" | grep Address | awk '{ print $2 }' ) in
"0xE8480" ) echo "ESX 2.5" ;;
"0xE7C70" ) echo "ESX 3.0" ;;
"0xE7910" ) echo "ESX 3.5" ;;
"0xE7910" ) echo "ESX 4"   ;;
"0xEA550" ) echo "ESX 4U1" ;;
"0xEA2E0" ) echo "ESX 4.1" ;;
"0xE72C0" ) echo "ESXi 5"   ;;
"0xEA0C0" ) echo "ESXi 5.1" ;;
"0xEA050" ) echo "ESXi 5.5" ;;
* ) echo "Unknown version: "
dmidecode | grep -A4 "BIOS Information" 
;;
esac

我们的运营团队无法告诉我几年前我​​们运行的是哪个版本的 ESX(啊!!),但我需要知道,因为我们正准备测试一款需要特定版本虚拟机管理程序的新产品。这对我来说非常有效。

如果您需要以非 root 帐户执行此操作,请使用 sudo。使用“visudo”访问 sudoers 文件,然后在文件末尾附近添加类似于下面的一行:

用户名 ALL=(ALL:ALL) NOPASSWD:/usr/sbin/dmidecode

这将允许“用户名”无需任何特殊身份验证即可访问 dmidecode,只需运行“sudo dmidecode”而不是“dmidecode”。

相关内容