我正在运行 Arch Linux,并且在尝试在 上使用 QEMU/KVM 时遇到了麻烦virt-manager
,这个问题可能会解决我在使用类似的gnome-boxes
.
解决
此错误与驱动程序有关opencl-amdgpu-pro-orca。这个答案详细说明了导致错误的一些背景。以下是我解决问题的方法:
- 运行
sudo systemctl edit libvirtd
,这将打开 Nano。
- 该命令创建一个临时文件,该文件将保存在服务
override.conf
的目录中libvirtd
。
- 在该文件(在我的例子中为空)中输入以下内容:
[Service]
Environment="LD_LIBRARY_PATH=/usr/lib"
- 重新
libvirtd
启动sudo systemctl restart libvirtd
。 - 打开
virt-manager
。该错误不应出现。
- 值得注意的是我做了不是需要在这些更改后重新启动。
下面详细介绍了问题的其余部分。
问题
打开 virt-manager 后,似乎已成功与 QEMU/KVM 建立连接,并且我可以选择创建新虚拟机。当我尝试这样做时,我遇到此错误:
警告:KVM 不可用。这可能意味着 KVM 软件包未安装,或者 KVM 内核模块未加载。您的虚拟机可能性能不佳。
日志
journalctl -f
当我重现错误时返回此:
Oct 14 22:23:00 okcomputer libvirtd[35615]: internal error: Failed to start QEMU binary /usr/bin/qemu-system-x86_64 for probing: /usr/bin/qemu-system-x86_64: symbol lookup error: /usr/lib/libvirglrenderer.so.1: undefined symbol: gbm_bo_unmap
Oct 14 22:23:00 okcomputer libvirtd[35615]: Failed to probe capabilities for /usr/bin/qemu-system-x86_64: internal error: Failed to start QEMU binary /usr/bin/qemu-system-x86_64 for probing: /usr/bin/qemu-system-x86_64: symbol lookup error: /usr/lib/libvirglrenderer.so.1: undefined symbol: gbm_bo_unmap
研究和解决尝试
拱门维基
这是一个似乎很常见的问题,我进行了广泛的研究。我最初关注 Arch Wiki,按顺序阅读 KVM、QEMU 和 libvirt 页面。
键盘虚拟机
- 我的处理器做支持虚拟化并且已启用。
我的 BIOS 中启用了虚拟化支持 - VT-x 和 VT-d。
- 这可能就是问题所在- 内核模块。运行
zgrep CONFIG_KVM /proc/config.gz
输出如下:
CONFIG_KVM_GUEST=y
# CONFIG_KVM_DEBUG_FS is not set
CONFIG_KVM_MMIO=y
CONFIG_KVM_ASYNC_PF=y
CONFIG_KVM_VFIO=y
CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
CONFIG_KVM_COMPAT=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_KVM_AMD=m
CONFIG_KVM_AMD_SEV=y
CONFIG_KVM_MMU_AUDIT=y
lsmod | grep kvm
输出这个:
kvm_intel 311296 0
kvm 778240 1 kvm_intel
irqbypass 16384 1 kvm
我注意到它kvm_intel
似乎设置为零,但在下一行的末尾提到了。需要明确的是,我并不是特别熟悉内核模块的工作原理,但我决定尝试使用 加载模块sudo modprobe kvm_intel
,它不会返回任何内容 - 据我所知,这是一个好兆头。跑步sudo modprobe kvm
肯定是一样的。
QEMU
- 我像安装其他软件包一样安装了 QEMU。
库虚拟机
- 我像安装其他软件包一样安装了 libvirt 和 virt-manager。
- 我确保我已经安装了这两个
ebtables
软件dnsmasq
并且是最新的。 - 我创建
/etc/polkit-1/rules.d/50-libvirt.rules
并将其添加到文件中:
/* Allow users in kvm group to manage the libvirt
daemon without authentication */
polkit.addRule(function(action, subject) {
if (action.id == "org.libvirt.unix.manage" &&
subject.isInGroup("kvm")) {
return polkit.Result.YES;
}
});
- 我通过;将自己添加到该
kvm
组(并且libvirt
,我想我在网上的某个地方看到了?)useradd
这可以通过运行来确认groups <username>
,我这样做了:
wheel kvm libvirt <username>
然后我启用并启动
libvirtd
和virtlogd
服务,然后重新启动。然后我测试了
virsh
除以下之外是否有效virt-manager
:virsh
输出以下内容:
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh #
额外的研究
正如我所提到的,这是一个看似普遍的问题,但遵循许多 Stack Exchange 答案的说明通常会导致相同的结果。
我已经测试了以下内容:
KVM 不可用。这可能意味着 KVM 软件包未安装,或者 KVM 内核模块未加载
根据 Wiki,我已经加载了
kvm_intel
内核模块。中提供了相同的建议这个答案。
-
- 我已确保在 BIOS 中启用了虚拟化。
- 我已启用并启动该
libvirtd
服务。
无数其他文章和答案提供了类似的建议。
软件规格
- 核心5.3.5-arch1-1-ARCH(最新默认Arch内核)
- 库虚拟机5.6.0-1
- 虚拟管理器2.2.1-1
- QEMU4.1.0-2
- 波尔基特0.116-3
我不知道视频相关的软件包是否相关,但专有驱动程序在过去已被证明是有问题的。
- 台面192.2.1-1
- xf86-视频-amdgpu19.0.1-1
- opencl-amdgpu-pro-orca19.30_855429-1
硬件规格
- 中央处理器英特尔 i7 4790k
- 母板华硕 Maximus VII Hero
将根据要求提供任何必要的附加规格。
答案1
你的问题是:opencl-amdgpu-pro-orca
。
它提供了自己的符号libgbm.so.1
,即使使用默认的最新 AUR 版本也缺少该符号。它首先放入搜索路径中。
因此,您可以禁用这些驱动程序或尝试获取/编译包含此功能的固定/更新版本 - 或者尝试仅禁用 libvirtd servcie 的 lib 搜索路径(将 LD_LIBRARY_PATH=/usr/lib 环境变量添加到服务启动过程) 。
如何分析此类问题例如:
ldd /usr/lib/libvirglrenderer.so.1
ldd /usr/lib/libvirglrenderer.so.1|awk '$3!=""{print $3}'|while read file; do objdump -TC -j.text $file|grep gbm_bo_unmap && echo $file; done
LD_LIBRARY_PATH=/usr/lib ldd /usr/lib/libvirglrenderer.so.1|awk '$3!=""{print $3}'|while read file; do objdump -TC -j.text $file|grep gbm_bo_unmap && echo $file; done
答案2
你的journalctl输出显示:
Oct 14 22:23:00 okcomputer libvirtd[35615]: Failed to probe capabilities for /usr/bin/qemu-system-x86_64: internal error: Failed to start QEMU binary /usr/bin/qemu-system-x86_64 for probing: /usr/bin/qemu-system-x86_64: symbol lookup error: /usr/lib/libvirglrenderer.so.1: undefined symbol: gbm_bo_unmap
尝试运行/usr/bin/qemu-system-x86_64 -help
,您可能会看到相同的错误。undefined symbol
当安装的 qemu 版本与构建它所针对的引用库的版本不匹配时,就会发生这些错误。
我不知道 Arch 上的具体情况,但在 Fedora 上相关的包被称为virglrenderer
.可能需要升级
出现这种情况的原因KVM is not available
是 libvirt(以及扩展的 virt-manager)没有找到与您的主机架构相匹配的工作 qemu 版本,而这是 KVM 工作所必需的。
答案3
好吧,我已经“解决”了这个问题,完全删除了专有驱动程序。我计划将我的 GPU 直通发送到虚拟机,所以我认为这些将是不需要的 - 希望如此。
这是一个奇怪的情况......