Arch-Linux

virt-manager:KVM 不可用

  • August 9, 2021

我正在執行 Arch Linux,嘗試virt-managergnome-boxes.

解析度

此錯誤與驅動程序opencl-amdgpu-pro-orca有關。這個答案詳細說明了導致錯誤的一些背景。以下是我解決問題的方法:

  1. 執行sudo systemctl edit libvirtd,打開 Nano。
  • 該命令創建一個臨時文件,該文件將保存到服務override.conf目錄中libvirtd
  1. 在此(在我的情況下為空)文件中輸入以下內容:
[Service]
Environment="LD_LIBRARY_PATH=/usr/lib"
  1. 重新啟動libvirtdsudo systemctl restart libvirtd
  2. 打開virt-manager. 錯誤不應該存在。
  • 值得注意的是,這些更改後我不需要重新啟動。

下面詳細介紹了問題的其餘部分。

問題

打開 virt-manager 後,似乎與 QEMU/KVM 成功建立了連接,並且可以選擇創建新 VM。當我嘗試這樣做時,我遇到了這個錯誤:

警告: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。

libvirt

  1. 我像安裝任何其他軟體包一樣安裝了 libvirt 和 virt-manager。
  2. 我確保我同時擁有ebtablesdnsmasq安裝了最新版本。
  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-manager; virsh輸出以下內容:
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 核心)
  • libvirt 5.6.0-1
  • 虛擬管理器2.2.1-1
  • QEMU 4.1.0-2
  • polkit 0.116-3

我不知道與影片相關的軟體包是否相關,但過去已證明專有驅動程序存在問題。

  • 檯面192.2.1-1
  • xf86-影片-amdgpu 19.0.1-1
  • opencl-amdgpu-pro-orca 19.30_855429-1

硬體規格

  • CPU英特爾 i7 4790k
  • 主機板華碩Maximus VII Hero

將根據要求提供任何必要的附加規格。

你的問題是: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

引用自:https://unix.stackexchange.com/questions/546572