解决

解决

我正在运行 Arch Linux,并且在尝试在 上使用 QEMU/KVM 时遇到了麻烦virt-manager,这个问题可能会解决我在使用类似的gnome-boxes.

解决

此错误与驱动程序有关opencl-amdgpu-pro-orca这个答案详细说明了导致错误的一些背景。以下是我解决问题的方法:

  1. 运行sudo systemctl edit libvirtd,这将打开 Nano。
  • 该命令创建一个临时文件,该文件将保存在服务override.conf的目录中libvirtd
  1. 在该文件(在我的例子中为空)中输入以下内容:
[Service]
Environment="LD_LIBRARY_PATH=/usr/lib"
  1. 重新libvirtd启动sudo systemctl restart libvirtd
  2. 打开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 页面。

键盘虚拟机

  1. 我的处理器支持虚拟化并且已启用。

我的 BIOS 中启用了虚拟化支持 - VT-x 和 VT-d。

  1. 这可能就是问题所在- 内核模块。运行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

  1. 我像安装其他软件包一样安装了 QEMU。

库虚拟机

  1. 我像安装其他软件包一样安装了 libvirt 和 virt-manager。
  2. 我确保我已经安装了这两个ebtables软件dnsmasq并且是最新的。
  3. 我创建/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;
    }
});
  1. 我通过;将自己添加到该kvm组(并且libvirt,我想我在网上的某个地方看到了?)useradd这可以通过运行来确认groups <username>,我这样做了:

wheel kvm libvirt <username>

  1. 然后我启用并启动libvirtdvirtlogd服务,然后重新启动。

  2. 然后我测试了virsh除以下之外是否有效virt-managervirsh输出以下内容:

Welcome to virsh, the virtualization interactive terminal.

Type:  'help' for help with commands
       'quit' to quit

virsh #

额外的研究

正如我所提到的,这是一个看似普遍的问题,但遵循许多 Stack Exchange 答案的说明通常会导致相同的结果。

我已经测试了以下内容:

无数其他文章和答案提供了类似的建议。

软件规格

  • 核心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 直通发送到虚拟机,所以我认为这些将是不需要的 - 希望如此。

这是一个奇怪的情况......

相关内容