我正在Virtualbox中运行一个非常基本的Debian9OS,我没有安装任何半虚拟化的来宾添加,不管我是否获得了Virtualization: oracle。为什么?难道操作系统不应该知道它是在真实的硬件还是虚拟的硬件上运行吗?
发布于 2018-10-23 05:38:39
检测大多数实际的虚拟化解决方案并不困难。
Linux内核至少可以检测到VMware、HyperV、Xen和KVM:在dmesg输出中查找类似Hypervisor detected: <virtualization type>的消息。
至少可以通过将VMware和HyperV添加到cpuid处理器操作码的结果中来检测到它们,因此可以在非常低的级别上检测到它们。查看dmidecode和/或lspci的输出是检测多种虚拟化形式的另一种快速方法。
出于实际原因,大多数虚拟化解决方案向VM提供了一组已知简单且支持良好的系统组件。这通常会导致在实际的物理硬件中没有意义的组合:例如,如果你看到一个英特尔ICH8M SATA控制器和一个英特尔PIIX3 ISA桥在同一个系统上,这是一个相当死气沉沉的赠品:这两种设备都应该是集成到系统芯片组中的设备,但它们属于非常不同的芯片组,因此它们永远不会同时存在于同一个物理系统中。
另外,如果你看到一个系统芯片组的部件,这些部件和最初的奔腾II芯片一起使用,时钟速度以两位数的MHz值测量,而处理器却声称有一个多GHz的速度,你知道一定会有一些虚拟化。
另见:确定虚拟化技术的简单方法
systemd包含为控制VM和容器而设计的功能,因此它的主库可能还包括一组虚拟化检测例程。您也可以在系统d-检测-病毒命令.中使用它们。
https://unix.stackexchange.com/questions/477164
复制相似问题