GPU 直通适用于 UEFI 固件,但不适用于 Windows iso

Sto*_*aft 7 kvm windows qemu uefi gpu-passthrough

我正在尝试使用直通图形设置虚拟机。我能够为 UEFI shell 进行直通,但不能为官方 Windows 安装程序工作。我可以让 Windows 安装程序工作,但只能使用模拟图形

这将在 QEMU 窗口中启动 Windows 安装程序:

sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-cdrom /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso \
-smp 4 \
-cpu core2duo \
-m 4096 \
-vga qxl
Run Code Online (Sandbox Code Playgroud)

这也会在 QEMU 窗口中引导 Windows 安装程序(仍然没有直通)

sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-cdrom /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso \
-smp 4 \
-cpu core2duo \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1 
Run Code Online (Sandbox Code Playgroud)

但是如果我指定 UEFI 固件的路径,我会在连接到我的直通显卡的显示器上和 QEMU 窗口中看到 Tiano slpash 屏幕和 UEFI shell。

sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-cdrom /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso \
-smp 4 \
-cpu core2duo \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS.fd 
Run Code Online (Sandbox Code Playgroud)

为什么直通仅在没有 UEFI 文件的情况下才起作用?或者,为什么指定 UEFI 文件会阻止我启动 Windows?

编辑:尝试下载不同版本的 Windows(2018 年 4 月而不是 10 月),同样的问题。

编辑:尝试清除并重新安装 OVMF,但没有运气。

编辑:我可以通过在 shell 中键入“exit”进入启动管理器,但选择可用的 DVD 驱动器(和所有其他选项)会立即退回到启动管理器。

编辑:跑这个:

-name TESTVM,process=TESTVM \
-drive file=/media/big-tank-8TB/OSISOS/Windows/Win10_1803_English_x64.iso,index=1,media=cdrom  \
-drive file=/media/big-tank-8TB/OSISOS/Windows/virtio-win-0.1.160.iso,index=2,media=cdrom \
-smp 4 \
-cpu core2duo \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS.fd 
Run Code Online (Sandbox Code Playgroud)

当我获得 uefi shell 时,我输入“exit”以进入引导管理器。在启动管理器中,选择可用的 DVD 驱动器立即退回到启动管理器。

然后我通过 Boot Maintenance Manager > Boot Options > Add boot option 添加了另一个 DVD 驱动器,然后在 Boot Manager 菜单中选择它。 我选择的引导条目.

这给了我一个非常简短的“按任意键从 CD 启动”。如果我足够快,这将引导到 Windows 安装程序,但仅在 QEMU 窗口中。连接到直通卡的屏幕是黑色的,带有一个简单的光标,而不是像 UEFI/Boot Manager 那样镜像。

编辑:我正在尝试通过 NVIDIA GTX1070。主板是华擎x399太极,CPU是Threadripper 1950X。操作系统是安装了 XFCE 的 Ubuntu 服务器。

编辑:如果我继续安装,我的 QEMU 窗口中仍然有 Windows,而直通卡上只有一个 TianoCore 闪屏。如果我转到设备管理器,Windows 会看到该卡,但由于某种原因它已停止。 错误 43

编辑:我尝试使用这些说明来摆脱代码 43,但无济于事。为了尝试这个,我使用了 virt-install 而不是 qemu-system,并且这样做时没有 TianoCore 启动画面。但是当我进入 Windows 时仍然是代码 43。

编辑:使用 dmesg 检查内存预留错误,如此处所述没有找到。编辑:同样来自上面的链接,使用 ROM 解析器并确认存在“类型 3(EFI)”

Fre*_*ers 7

你已经在正确的轨道上。GPU Passthrough 并不完美,特别是如果它是 NVidia 卡(您没有提到 NVidia 或 AMD)。在 Qemu 窗口上完成设置。确保 Windows 机器已连接到 Internet,并让 Windows Update 为您安装图形驱动程序。当您回来时,您应该会看到第二台显示器,如果没有,请重新启动。然后我通常会移除 spice/vnc 控制台,只连接 GPU 监视器。使 GPU Passthrough 工作完全取决于反复试验。

其他尝试:

  • 在没有 GPU 直通的情况下安装 Windows,然后尝试直通 GPU。
  • 通过 NVidia_drivers.exe 安装驱动程序
  • 通过 Windows 更新安装驱动程序
  • Bios 与 UEFI
  • Q35 与 i440fx

注意:代码 43 是 NVidia 的一个已知错误,与 NVidia 驱动程序检查它们是否在 VM 中运行有关。NVidia 销售专门用于在 VM 环境中运行的卡,并试图阻止在 VM 中安装消费级卡的驱动程序。您需要确保在您的 domain.xml 中使用以下内容

<kvm>
 <hidden state='on'/>
</kvm>
Run Code Online (Sandbox Code Playgroud)

有关示例,请参阅https://passthroughpo.st/apply-error-43-workaround/和其他资源。

这是我的配置的屏幕截图:

QEMU GPU 通道设置

这是我的 domain.xml 的“相关”部分,如果你愿意,我可以分享整个内容,但它有一堆不必要的东西。

  <os>
    <type arch='x86_64' machine='pc-i440fx-2.10'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/edk2/ovmf/OVMF_CODE.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/Windows10_VARS.fd</nvram>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <kvm>
      <hidden state='on'/>
    </kvm>
    <vmport state='off'/>
  </features>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
Run Code Online (Sandbox Code Playgroud)

  • 好的,就 Linux/KVM 而言,您的 GPU Passthrough 设置正确,您现在的问题是“代码 43”。此错误意味着“NVidia 驱动程序知道它们正在 VM 中运行”。我花了几个小时的反复试验才让它在 KVM 下工作,而 ESXi 则要容易得多。我建议在 https://www.reddit.com/r/VFIO/ 上开始一个线程。如果我没记错的话,我必须使用 UEFI/BIOS 和/或 Q35/I44X 芯片组,但我忘记了我使用的组合。我建议使用 VIRSH 和已知的工作 domain.xml 来定义您的主机,然后根据需要进行编辑。 (2认同)