我有一台VMWARE ESX服务器,上面运行着Redhat虚拟机。我需要一种编程方式来测试是否在虚拟机中运行。最好能够使用Perl语言实现。
您不应该完全依赖任何方法,因为它们是未经记录的功能/错误 - 它们在某些主机操作系统和某些虚拟化解决方案上运行,但无法保证它们将继续工作;实际上,虚拟化的整个目的就是尽可能地与真正的金属一样难以区分。考虑到这一点,蓝色药丸红色药丸(在这个类似的问题的已接受答案中提到)似乎可以工作...至少目前如此。
我认为(根据esx的版本),您可以检查NIC的MAC地址。在VMWare中运行的虚拟机将分配给VMWare一个制造商字符串,而不是物理NIC MAC。(我们试图欺骗MAC来虚拟许可证服务器,但新版本不能这样做。)此外,这并不能保证您不是在物理盒子上运行,并且其NIC已欺骗成看起来像VMWare,但在大多数情况下这都是奇怪的事情。
lspci | grep VMware
00:0f.0 显卡兼容控制器:VMware SVGA II 适配器
00:11.0 PCI 桥接器:VMware PCI 桥接器(修订版02)
00:15.0 PCI 桥接器:VMware PCI Express 根端口(修订版01)