主机操作系统:Fedora 客户机操作系统:Windows 10 虚拟化:KVM
因此,这个想法是运行一台不知道它是虚拟机的 Windows 10 主机。因此,当我在客户 Windows 机器上打开任务管理器并进入性能选项卡时,“虚拟机”标签设置为“否”。到目前为止,我已经了解到任务管理器根据以下两个参数做出决定:
- 测试 CPUID 虚拟机管理程序存在位
- 测试虚拟 BIOS DMI 信息和管理程序端口
我希望在虚拟机中运行 Windows 10(作为客户机),并确认它不在虚拟机中。原因有很多:GPU 直通、驱动程序终止开关、测试等……
有人能帮我配置这台虚拟机,让它不再知道自己是一台虚拟机吗?
我也在使用 Virt-Manager。
Michael 在下面给出的答案解决了这个问题并提供了明确的指导。但是,尽管目的已经实现,任务管理器中不再将其报告为虚拟机,但在 powershell 中运行“systeminfo”命令时,一切都正常,除了“BIOS 版本”显示为“SeaBios-......fedora28......”和“系统制造商”显示为“QEMU”。
这些参数也可以改变吗?
感谢您付出的时间和精力。
答案1
要向客户操作系统隐藏虚拟机管理程序,您需要做两件事:
- 隐藏虚拟机管理程序 CPU 功能标志。
- 隐藏虚拟机管理程序 CPUID 叶子。
这些都无法完全在 virt-manager 中完成;您必须编辑虚拟机 XML。
默认情况下,CPU 设置为“Hypervisor 默认值”:
这会导致“QEMU 虚拟 CPU 版本 2.5+”
首先,您需要在 virt-manager 中设置 CPU 类型。默认 QEMU 虚拟 CPU 无法在 libvirt 中删除其虚拟机管理程序标志。
为了获得最佳性能和功能,您只需选择“复制主机 CPU 配置”并“应用”。这将允许您使用嵌套虚拟化,在此虚拟机内运行 64 位加速虚拟机。
现在虚拟机 XML 中将有一个 CPU 部分可供您编辑。运行sudo virsh edit <vmname>
。CPU 部分将如下所示:
<cpu mode='host-model' check='partial'>
<model fallback='allow'/>
</cpu>
您需要添加一个元素来删除虚拟机管理程序 CPU 功能,使其看起来像这样:
<cpu mode='host-model' check='partial'>
<model fallback='allow'/>
<feature policy='disable' name='hypervisor'/>
</cpu>
现在您还需要禁用虚拟机管理程序 CPUID 叶子。这允许 NVIDIA 驱动程序等其他一些功能正常运行。
这是通过在元素内部添加新元素来实现的<features>
。
就在上文:
</features>
您应该添加:
<kvm>
<hidden state='on'/>
</kvm>
现在,关闭虚拟机并重新启动(重新启动是不够的;需要完全关闭)。
此时任务管理器显示:
您也可以systeminfo
在 PowerShell 或命令提示符中运行。如果一切顺利,您将在底部看到 Hyper-V 部分中的所有“是”答案:
Hyper-V Requirements: VM Monitor Mode Extensions: Yes
Virtualization Enabled In Firmware: Yes
Second Level Address Translation: Yes
Data Execution Prevention Available: Yes
现在你可以做任何你想做的事了。
答案2
将这些添加到您的 VMX 文件中:-
monitor_control.virtual_rdtsc = "FALSE"
monitor_control.restrict_backdoor = "TRUE"
isolation.tools.getPtrLocation.disable = "TRUE"
isolation.tools.setPtrLocation.disable = "TRUE"
isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
monitor_control.disable_directexec = "TRUE"
hypervisor.cpuid.v0 = "FALSE"