AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1036113
Accepted
grasbueschel
grasbueschel
Asked: 2020-10-03 01:23:18 +0800 CST2020-10-03 01:23:18 +0800 CST 2020-10-03 01:23:18 +0800 CST

L0 KVM 和 Win10 L1 嵌套虚拟化不起作用(Windows 引导循环)

  • 772

我很难在 KVM 主机上运行的 Win10 Pro 客户机中实现嵌套虚拟化。启用 Windows Hypervisorhypervisorlaunchtype auto会导致引导循环/引导到自动修复。

主持人:

CentOS Linux release 8.2.2004 (Core)

Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz

# cat /sys/module/kvm_intel/parameters/nested
1

flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d

来宾:

Microsoft Windows [Version 10.0.19041.508]

我尝试了多种配置,将我的 Windows 从 BIOS 迁移到 UEFI,尝试了干净的 Windows 安装,禁用/重新启动/启用/重新启动了 Hypervisor 功能等等。还没有任何工作。

我目前的配置:

  <os>
    <type arch='x86_64' machine='pc-q35-rhel7.6.0'>hvm</type>
    <loader readonly='yes' secure='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.secboot.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/win10_VARS.fd</nvram>
  </os>
  <features>
    <acpi/>
    <apic eoi='on'/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
    <kvm>
      <hidden state='on'/>
    </kvm>
    <vmport state='off'/>
    <smm state='on'/>
  </features>
  <cpu mode='host-passthrough' check='partial'>
    <topology sockets='1' cores='4' threads='2'/>
    <feature policy='require' name='ds'/>
    <feature policy='require' name='acpi'/>
    <feature policy='require' name='ss'/>
    <feature policy='require' name='ht'/>
    <feature policy='require' name='tm'/>
    <feature policy='require' name='pbe'/>
    <feature policy='require' name='dtes64'/>
    <feature policy='require' name='monitor'/>
    <feature policy='require' name='ds_cpl'/>
    <feature policy='require' name='vmx'/>
    <feature policy='require' name='smx'/>
    <feature policy='require' name='est'/>
    <feature policy='require' name='tm2'/>
    <feature policy='require' name='xtpr'/>
    <feature policy='require' name='pdcm'/>
    <feature policy='require' name='osxsave'/>
    <feature policy='require' name='tsc_adjust'/>
    <feature policy='require' name='clflushopt'/>
    <feature policy='require' name='intel-pt'/>
    <feature policy='require' name='md-clear'/>
    <feature policy='require' name='stibp'/>
    <feature policy='require' name='ssbd'/>
    <feature policy='require' name='xsaves'/>
    <feature policy='require' name='pdpe1gb'/>
    <feature policy='require' name='invtsc'/>
    <feature policy='disable' name='hypervisor'/>
  </cpu>

注意最后一点feature hypervisor:如果disableWindows 启动并报告 Hyper-V 工作(systeminfo报告 Hyper-V 要求可用,TaskManager 显示启用虚拟化等),但 Hyper-V 无法启动任何 VM,系统日志报告管理程序未运行. 将该功能设置为require将我带入引导循环/引导到自动修复。

而且由于在这种情况下搜索此选项有点困难:

  • 该hypervisor功能的具体作用是什么?它记录在哪里?

在我看来,Windows 虚拟机管理程序在启用该功能和禁用该功能的情况下在启动时崩溃,只是无法启动并继续启动过程。

我现在不知道我还能尝试什么,并且相信我已经检查了几乎所有关于该主题的搜索结果。但也许我错过了什么,所以请

  • 任何人都可以报告这样的成功设置吗?如果是这样,共享来宾配置会很棒!
  • 我应该尝试其他任何想法来完成这项工作吗?

谢谢!

PS:虚拟化本身运行得很好而且速度很快,所以我很确定硬件方面的一切都很好,但也许我也应该检查一些事情?!

kvm-virtualization hyper-v windows-10 windows-subsystem-for-linux
  • 2 2 个回答
  • 1505 Views

2 个回答

  • Voted
  1. Best Answer
    user3129594
    2020-10-05T00:09:39+08:002020-10-05T00:09:39+08:00

    几个月前,我使用 CentOS 8.1.1911 设置了两台 KVM 主机,并将 Hyper-V 虚拟机作为嵌套来宾,并且一切正常。

    几个月后,我设置了第三台 KVM 主机,其硬件和软件配置几乎相同。唯一的区别是主板,它具有相同的芯片组,但前两个是技嘉品牌而不是华硕品牌。我在 CentOS 8.2.2004 上设置了这个主机,并经历了和你一样的 - 引导循环。我当时尝试了最新的 Fedora 版本,它也启动了循环。由于这台主机上的嵌套虚拟化不是必需的,我只是没有使用它,并认为技嘉主板有问题。

    快进到今天,当我决定将我的 8.1 主机升级到 8.2 时。升级完成后我重新启动 - hyper-V 嵌套 VM 开始引导循环。

    我使用 yum history undo 回滚到 8.1.1911,就这样,hyper-v 客户机再次开始工作。

    TL;DR:可能是最新版本的 CentOS (8.2.2004) 的问题。尝试安装 8.1 (8.1.1911) 看看效果如何。

    • 2
  2. Orsiris de Jong
    2021-01-09T02:32:48+08:002021-01-09T02:32:48+08:00

    [编辑]

    内核 4.18.0-259.el8.x86_64 解决了该问题并与最新的 qemu 4.2.0-34.module_el8.3.0+613+9ec9f184.1.x86_64 一起使用

    所以不再需要将 qemu 包降级到 CentOS 8.1

    [/编辑]

    由于@grabueschel 给了我们一个有效的答案,我挖掘了更多。

    事实上,CentOS 8.1 套件适用于 kvm L0 虚拟化上的嵌套 Hyper-V L1,而 CentOS 8.2+ 套件则不适用。我在这里做了一个完整的错误报告

    不确定这是否会有所帮助。查看 RPM 更改日志,可能- Resolves: bz#1689270 (Nested KVM: limit VMX features according to CPU models - Slow Train)是罪魁祸首。

    无论如何,为了让嵌套虚拟化与 Hyper-V(Win10 2009H2 版本)一起工作,我必须执行以下操作:

    dnf remove qemu-kvm
    cp /etc/yum.repos.d/CentOS-Linux-AppStream.repo /etc/yum.repos.d/CentOS-Linux-AppStream81.repo
    

    修改/etc/yum.repos.d/CentOS-Linux-AppStream.repo,添加exclude=qemu*

    修改/etc/yum.repos.d/CentOS-Linux-AppStream81.repo为指向 CentOS 保管库

    [appstream81]
    name=CentOS Linux 8.1 - AppStream
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
    #baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
    baseurl=http://vault.centos.org/8.1.1911/AppStream/$basearch/os/
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
    include=qemu*
    

    然后重新安装qemu

    dnf install qemu-kvm
    

    这使得嵌套虚拟化成为可能,一旦使用的 CPU 按照 Redhat的建议设置为直通。

    尽管如此,我还是遇到了很多稳定性问题,并且按照这里给出的建议,我修改了 CPU 以忽略 TSX。

    在我的情况下,我virsh edit myVM到以下

      <cpu mode='custom' match='exact' check='partial'>
        <model fallback='allow'>Skylake-Client-noTSX-IBRS</model>
        <feature policy='require' name='hypervisor'/>
        <feature policy='require' name='vmx'/>
      </cpu>
    

    一旦设置了这个自定义 CPU 模型,我在 KVM 下的 Hyper-V 就稳定了。

    测试机器是 Intel(R) Xeon(R) CPU E3-1275 v6 @ 3.80GHz skylake 处理器,微码 sig=0x906e9, pf=0x2, revision=0xde

    • 2

相关问题

  • Xen 与 KVM 的性能对比

  • 什么是bridge_fd?

  • 如何在 kvm-linux 中登录除 ssh、vnc 之外的控制台

  • Linux 内核虚拟机

  • Vista 上的 VNC

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve