我正在尝试在 Lubuntu 17.10 上qemu-kvm
使用gpu 直通virsh
我安装了 Windows 7 (UEFI),它运行正常,但设备驱动程序没有安装,提示
资源不足(错误 12)。
所以我放弃了 gpu rom 并添加了
<rom bar='on' file='/home/gpu.dump'/>
在<hostdev>
gpu pci 中。
我做到了
chmod 777 /home
和
gpu.dump, user = "root" group = "root"
提前
每当我在 virsh 脚本中添加 rom... 行时,我都会遇到这样的错误消息
############################################################################### "Error starting domain: internal error: process exited while connecting to monitor: 2017-12-13T09:45:38.629221Z qemu-system-x86_64:
-chardev pty,id=charserial0: char device redirected to /dev/pts/2 (label charserial0) 2017-12-13T09:45:39.146358Z qemu-system-x86_64:
-device vfio-pci,host=03:00.0,id=hostdev0,bus=pci.0,addr=0x7,romfile=/home/gt710.dump: failed to find romfile "/home/gt710.dump"
Traceback (most recent call last): File "/usr/share/virt-manager/virtManager/asyncjob.py", line 88, in cb_wrapper
callback(asyncjob, *args, **kwargs) File "/usr/share/virt-manager/virtManager/asyncjob.py", line 124, in tmpcb
callback(*args, **kwargs) File "/usr/share/virt-manager/virtManager/libvirtobject.py", line 83, in newfn
ret = fn(self, *args, **kwargs) File "/usr/share/virt-manager/virtManager/domain.py", line 1405, in startup
self._backend.create() File "/usr/lib/python2.7/dist-packages/libvirt.py", line 1062, in create
if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self) libvirtError: internal error: process exited while connecting to monitor: 2017-12-13T09:45:38.629221Z qemu-system-x86_64:
-chardev pty,id=charserial0: char device redirected to /dev/pts/2 (label charserial0) 2017-12-13T09:45:39.146358Z qemu-system-x86_64:
-device vfio-pci,host=03:00.0,id=hostdev0,bus=pci.0,addr=0x7,romfile=/home/gt710.dump: failed to find romfile "/home/gt710.dump"
###############################################################################
我现在该怎么办?我已经 30 个小时没睡觉了 :-(
答案1
如果此错误是由 AppArmor 引起的,只需将 ROM 文件移动到/usr/share/vgabios
(如果不存在则创建此目录)。默认情况下,apparmor 配置文件允许从 kvm-qemu 读取此路径。
其他一些默认允许的路径:
# access to firmware's etc
/usr/share/kvm/** r,
/usr/share/qemu/** r,
/usr/share/qemu-kvm/** r,
/usr/share/bochs/** r,
/usr/share/openbios/** r,
/usr/share/openhackware/** r,
/usr/share/proll/** r,
/usr/share/vgabios/** r,
/usr/share/seabios/** r,
/usr/share/misc/sgabios.bin r,
/usr/share/ovmf/** r,
/usr/share/OVMF/** r,
/usr/share/AAVMF/** r,
/usr/share/qemu-efi/** r,
/usr/share/slof/** r,
答案2
出现“无法找到 romfile”错误很可能是因为 Ubuntu 中默认启用了 AppArmor(至少在 Ubuntu 桌面/服务器中,否则问题很可能是 SELinux,类似于以下针对 AppArmor 的解决方案):
解决方案
libvirt 自动创建/管理/etc/apparmor.d/libvirt/
每个虚拟机中存储的 AppArmor 配置文件。该过程为绑定到虚拟机的某些设备添加文件例外(我不是这方面的专家,但似乎它不计算 rom 文件)。
但是您可以通过添加任何类型的文件源设备来强制它为 rom 文件添加例外。我使用如下所示的假 cd 驱动器:
将以下代码添加到您的 xml 配置中:
<devices>
...
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/path/to/the.rom'/>
<target dev='sdb' bus='sata'/>
<readonly/>
</disk>
...
</devices>
如果你仍然有问题
通常不建议这样做,因为它将完全禁用该虚拟机的 AppArmor 保护。
查看你的配置:
virsh edit VMNAME
找到如下 uuid 行:
<uuid>YOUR-UUID</uuid>
运行
sudo aa-complain /etc/apparmor.d/libvirt/libvirt-YOUR-UUId
以禁用该策略的执行