我在 Virtualbox 中运行一个非常基本的 debian 9 操作系统,我还没有安装任何半虚拟化 |客人补充,无论我得到Virtualization: oracle
。为什么?难道操作系统不应该知道它是在真实硬件还是虚拟硬件上运行吗?
答案1
检测大多数实际的虚拟化解决方案并不困难。
Linux 内核至少可以检测 VMware、HyperV、Xen 和 KVM:Hypervisor detected: <virtualization type>
在dmesg
输出中查找类似的消息。
至少可以通过VMware和HyperV添加到处理器操作码结果中的签名信息来检测它们cpuid
,因此可以在很低的级别上检测到它们。查看dmidecode
和/或 的输出lspci
是检测多种形式的虚拟化的另一种快速方法。
出于实际原因,大多数虚拟化解决方案都会向 VM 提供一组简单且支持良好的系统组件。这通常会导致在实际物理硬件中没有意义的组合:例如,如果您在同一系统上看到英特尔 ICH8M SATA 控制器和英特尔 PIIX3 ISA 桥接器,那就是一个非常明显的泄露:这两个都应该是设备集成到系统芯片组中,但是它们属于非常不同的芯片组所以它们永远不会同时存在于同一个物理系统上。
此外,如果您看到属于系统芯片组的部件与原始 Pentium II 芯片一起使用,其时钟速度以两位数 MHz 值测量,但该处理器声称具有多 GHz 速度,您就知道必须进行一些虚拟化在。
也可以看看:确定虚拟化技术的简单方法
systemd
包括设计用于控制虚拟机和容器的功能,因此其主库可能还包括一组虚拟化检测例程。您还可以将它们与systemd-Detect-virt 命令。