web-dev-qa-db-ja.com

virt-manager:KVMは使用できません

Arch Linuxを実行していますが、virt-managerでQEMU/KVMを使用しようとして問題が発生しています。同様のgnome-boxesを使用しているときに、同様の根本的な問題が私の問題に対処する可能性があります。

解決

このエラーは、ドライバーopencl-amdgpu-pro-orcaに関連していました。 この回答 は、エラーの原因の背景を詳しく説明しています。これが私が問題を解決しようとした方法です:

  1. Nanoを開くSudo systemctl edit libvirtdを実行します。
    • このコマンドは、libvirtdサービスのディレクトリ内に保存され、override.confになる一時ファイルを作成します。
  2. この(私の場合は空の)ファイルに以下を入力します。
[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

これはかなりありふれた問題であり、私は広範囲にわたって調査してきました。私は最初にArch Wikiをフォローし、KVM、QEMU、libvirtのページをこの順番で読みました。

KVM

  1. 私のプロセッサーは仮想化をサポートしています does が有効になっています。 LC_ALL=C lscpu | grep Virtualization出力:

LC_ALL=C lscpu | grep Virtualization

仮想化サポートは私の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. 次に、libvirtdおよびvirtlogdサービスを有効にして開始し、再起動しました。

  2. 次に、virt-managerに加えてvirshが機能するかどうかをテストしました。 virshは以下を出力します:

Welcome to virsh, the virtualization interactive terminal.

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

virsh #

追加研究

先ほど触れたように、これは一見広範囲にわたる問題ですが、多くのStack Exchangeの回答に従うと、まったく同じ結果になります。

私は以下をテストしました:

他の数え切れないほどの記事と回答が同様のアドバイスを提供しています。

ソフトウェア仕様

  • Kernel5.3.5-Arch1-1-Arch(最新のデフォルトのArchカーネル)
  • libvirt5.6.0-1
  • virt-manager2.2.1-1
  • [〜#〜] qemu [〜#〜]4.1.0-2
  • polkit0.116-3

ビデオ関連のパッケージが関連しているかどうかはわかりませんが、プロプライエタリドライバーは過去に問題があることが判明しています。

  • メサ192.2.1-1
  • xf86-video-amdgpu19.0.1-1
  • opencl-amdgpu-pro-orca19.30_855429-1

ハードウェア仕様

  • [〜#〜] cpu [〜#〜]Intel i7 4790k
  • マザーボードAsus Maximus VIIヒーロー

要求に応じて、必要な追加仕様を提供します。

3

あなたの問題は: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
1
EOhm

あなたの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として現れる理由は、KVM仕事に。

2
Cole Robinson

まあ、私はこれを "解決"して、プロプライエタリドライバーを完全に削除しました。私はパススルーでGPUをVMに送信する予定なので、それらは不要になると思います-うまくいけば。

奇妙な状況です...

0
vxp