使用ansible_virtualization_type误报VirtualBox,如何识别远程主机是否为虚拟机?
针对Ansible setup模块误报虚拟化类型的情况,可以通过以下几种更直接的系统信息检查方法来验证:
检查CPU虚拟化标识
执行命令查看CPU flags:grep -E 'vmx|svm|hypervisor' /proc/cpuinfo物理机通常不会出现
hypervisor标记;如果是虚拟机,几乎都会显示hypervisor,部分还会附带vmx(Intel)或svm(AMD)标识。注意:部分开启了VT功能但未运行虚拟机的物理机也会有vmx/svm,需结合其他方法判断。查看DMI硬件信息
通过读取系统DMI标识判断硬件厂商和型号:cat /sys/class/dmi/id/sys_vendor cat /sys/class/dmi/id/product_name物理机会输出真实硬件厂商(如Dell、HP)和具体服务器型号;虚拟机则会显示虚拟化平台名称(如VirtualBox、KVM、VMware Virtual Platform)。Debian 6下需要root权限读取这些文件,部分无DMI支持的环境可能无法获取。
检查/dev/kvm设备
物理机开启虚拟化支持后会存在/dev/kvm设备,虚拟机中一般不存在(嵌套虚拟化场景除外):ls -l /dev/kvm若设备存在,大概率是物理机(或宿主机);不存在则基本可判定为虚拟机。
使用lshw工具排查
先安装工具(Debian系统):apt-get install lshw查看系统类别信息:
lshw -class system输出中的
product字段会明确区分物理机型号和虚拟机平台,比如物理机显示PowerEdge R740,虚拟机显示KVM。检查SCSI设备信息
查看存储设备的厂商标识:cat /proc/scsi/scsi物理机会显示真实磁盘控制器和硬件信息;虚拟机则会出现虚拟化相关的设备描述,比如
Oracle VM VirtualBox disk或VMware Virtual disk。
内容的提问来源于stack exchange,提问作者Cruise5

