virt-manager:KVM 不可用
我正在執行 Arch Linux,嘗試
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 成功建立了連接,並且可以選擇創建新 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 頁面。
虛擬機
- 我的處理器確實支持虛擬化並且已啟用。
在我的 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
- 我像安裝任何其他軟體包一樣安裝了 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 核心)
- 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