我正在尝试使用直通图形设置虚拟机。我能够让 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
这也会在 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
但是,如果我指定 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
为什么只有在没有 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
当我得到 uefi shell 时,我输入“exit”进入启动管理器。在启动管理器中,选择可用的 DVD 驱动器会立即退回到启动管理器。
然后我通过 Boot Maintenance Manager > Boot Options > Add boot option 添加了另一个 DVD 驱动器,然后在 Boot Manager 菜单中选择了它。 .
这给了我一个非常简短的“按任意键从 CD 启动”。如果我足够快,它会启动到 Windows 安装程序,但只能在 QEMU 窗口中。连接到直通卡的屏幕是黑色的,带有一个简单的光标,而不是像 UEFI/Boot Manager 那样镜像。
编辑:我正在尝试通过 NVIDIA GTX1070。Mobo 是华擎 x399 Taichi,CPU 是 Threadripper 1950X。操作系统是安装了 XFCE 的 Ubuntu Server。
编辑:如果我继续安装,QEMU 窗口中仍然有 Windows,并且直通卡上只有一个 TianoCore 闪屏。如果我转到设备管理器,Windows 会看到该卡,但由于某种原因它被停止了。
编辑:我尝试使用这些说明来摆脱代码 43,但无济于事。为了尝试这个,我使用了 virt-install 而不是 qemu-system,这样做时没有 TianoCore 闪屏。但是当我进入 Windows 时仍然是代码 43。
编辑:使用 dmesg 检查内存预留错误,如此处所述。没有找到。编辑:同样从上面的链接,使用 ROM 解析器并确认存在“类型 3 (EFI)”
你已经在正确的轨道上。GPU Passthrough 并不完美,特别是如果它是 NVidia 卡(您没有提到 NVidia 或 AMD)。在 Qemu 窗口上完成设置。确保 Windows 机器已连接到 Internet,并让 Windows Update 为您安装图形驱动程序。当您回来时,您应该会看到第二台显示器,如果没有,请重新启动。然后我通常会移除 spice/vnc 控制台,只连接 GPU 监视器。让 GPU Passthrough 正常工作就是反复试验。
其他要尝试的事情:
注意:代码 43 是与 NVidia 相关的已知错误,与 NVidia 驱动程序检查它们是否在 VM 中运行有关。NVidia 销售专门用于在 VM 环境中运行的卡,并试图阻止在 VM 中安装消费级卡的驱动程序。您需要确保在 domain.xml 中使用以下内容
有关示例,请参阅https://passthroughpo.st/apply-error-43-workaround/和其他资源。
这是我的配置的屏幕截图:
这是我的 domain.xml 的“相关”部分,如果你愿意,我可以分享整个内容,但它有一堆不必要的东西。
我这样做了:
然后转到设备管理器中的 GTX 1070 条目并更新驱动程序。上次(使用 virt-install)我从 NVIDIA 网站安装了更新。现在用 virt-install 让它工作,这样我就可以拥有一个可编辑的域 XML。
编辑:到目前为止,当使用 virt-install 时,我现在(再次)获得了 Tiano 屏幕,但是这次按照上述方式安装驱动程序还不够,使用 virt-install 导入上述安装也不起作用(在旁注,我花了一段时间才意识到要使 virt-install 与我现有的安装一起工作,我所要做的就是包含引导 iso,允许它从安装中引导而不会出错)。
编辑:所以,我想我现在可以工作了。
然后执行 virt-install (但再次出现错误 43):
virt-install \ --name myWINVM1 \ --boot uefi \ --ram 4096 \ --features kvm_hidden=on \ --hostdev 43:00.0,address.type=pci,address.multifunction=on \ --hostdev 43: 00.1,address.type=pci\--磁盘路径=/dev/nvme-tank/ntfs-zvol-part2\--cpu core2duo\--vcpus 4\--os-type windows\--os-variant win10\ --network bridge=virbr0 \ --console pty,target_type=serial \ --disk /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso,device=cdrom \ --disk /media/big-tank- 8TB/OSISOS/Windows/virtio-win-0.1.160.iso,device=cdrom
从 myWINVM1 XML 中删除了 spice 图形设备。仍然无法通过TianoCore。
将伪造的供应商 ID 行添加到我的 XML
我的最终 xml:
经过长时间的斗争,这对我有用:
首先以这种方式编辑 qemu VM 配置文件:
其中“win10_GPU”当然是您的虚拟机名称并添加
</devices>
几乎在文件末尾之后,然后按ctrl+O(保存),ctrl+X(退出)并
sudo virsh define win10_GPU.xml
再次输入;在开始安装 Windows 之前从虚拟机中删除所有其他显示界面(如 spice、video cirrus 等);
这是我的个人经历。我尝试过的任何其他事情都会导致我出现错误代码 43。