如果客户虚拟机是 Linux 机器,那么是否可以从虚拟机(即客户操作系统)内部确定 VMWare 类型(ESXi、Workstation、Fusion 等)?
我尝试了各种各样的方法,比如在hypervisor
in 中查找/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”。