今日、私はvirsh startを使用してArchLinux仮想マシンを起動しました コマンドを実行すると、このエラーが発生しました-Failed to start domain 'Archlinux_default' error: Cannot access storage file '/home/sk/.local/share/libvirt/images/Archlinux_default.img' (as uid:107, gid:107): Permission denied 。実際には、KVMLibvirtプロバイダーで作成されたVagrantマシンです。
次に、vagrant upを使用してVMを再起動しようとしました 指図。同じエラーが表示されました。
Bringing machine 'default' up with 'libvirt' provider… ==> default: Checking if box 'archlinux/archlinux' version '20210601.24453' is up to date… ==> default: Starting domain. There was an error talking to Libvirt. The error message is shown below: Call to virDomainCreateWithFlags failed: Cannot access storage file '/home/sk/.local/share/libvirt/images/Archlinux_default.img' (as uid:107, gid:107): Permission denied
念のため、もう一度Virt-managerGUIアプリケーションからVMを起動してみました。今回も同じエラーが返されました。
すべてのエラーメッセージは、qemuが明示的に示しています ユーザーには、Libvirtストレージディレクトリへの読み取り権限がありません。
この簡単なチュートリアルでは、KVM Libvirtで「エラー:ドメインの開始に失敗しました...エラー:ストレージファイルにアクセスできません....(uid:107、gid:107として):アクセスが拒否されました」を修正する方法を紹介します。 。
KVM Libvirtの「ストレージファイルにアクセスできません、アクセスが拒否されましたエラー」を修正しました
これは、一般的なKVMLibvirtエラーの1つです。このエラーは通常、Libvirtのデフォルトのストレージディレクトリのパスを変更した後に発生します 。
数日前、Libvirtの保存場所を$HOMEに移動しました ディレクトリ。そのため、このエラーが発生します。
2つの方法で修正できます。
方法1:
ステップ1: /etc/libvirt/qemu.confを編集します ファイル:
$ sudo nano /etc/libvirt/qemu.conf
ステップ2: userを見つけます およびgroup ディレクティブ。デフォルトでは、両方とも"root"に設定されています 。
[...] Some examples of valid values are: # user = "qemu" # A user named "qemu" user = "+0" # Super user (uid=0) user = "100" # A user named "100" or a user with uid=100 # #user = "root" The group for QEMU processes run by the system instance. It can be specified in a similar way to user. #group = "root" [...]
両方の行のコメントを解除し、rootを置き換えます ユーザー名とlibvirtのグループ 以下に示すように:
[...] Some examples of valid values are: # user = "qemu" # A user named "qemu" user = "+0" # Super user (uid=0) user = "100" # A user named "100" or a user with uid=100 # user = "sk" The group for QEMU processes run by the system instance. It can be specified in a similar way to user. group = "libvirt" [...]
CTRL+Oを押します ENTERを押します 変更を保存してCTRL+Xを押します ファイルを終了します。
ステップ3: libvirtdを再起動します サービス:
$ sudo systemctl restart libvirtd
ステップ4: ユーザーがlibvirtのメンバーであることを確認してください グループ。そうでない場合は、ユーザーをlibvirtに追加します コマンドを使用してグループ化:
$ sudo usermod -a -G libvirt $(whoami)
ステップ5: 最後にVMを起動します:
$ virsh start
vagrantを使用する場合は、代わりにこれを実行してください:
$ vagrant up
今回は仮想マシンが起動するはずです。
ステップ6: VMのステータスを確認します:
$ virsh list
または、
$ vagrant status
方法2:
KVM Libvirtパーミッションの問題を修正する別の方法は、Libvirtストレージプールディレクトリに適切なACLパーミッションを設定することです。私の場合、ストレージプールディレクトリは$HOMEにあります。 ディレクトリ。
ステップ1: $HOMEへの現在のACL権限を取得しましょう ディレクトリ。
$ sudo getfacl -e /home/sk/
出力例:
getfacl: Removing leading '/' from absolute path names file: home/sk/ owner: sk group: sk user::rwx user:qemu:--x #effective:--x group::--- #effective:--- mask::--x other::---
上記の出力にあるように、qemu ユーザーは読み取りを持っていません ストレージプールの場所へのアクセス許可。一部のディストリビューションでは、ユーザー名はlibvirt-qemuの場合があります。 。
ステップ2: ユーザーqemuの読み取りおよび実行可能権限を設定します コマンドの使用:
$ sudo setfacl -m u:qemu:rx /home/sk/
qemuを置き換えます および/home/sk/ 自分で。
これで、qemuユーザーはストレージプールディレクトリに対する読み取りおよび実行可能権限を持ちます。コマンドを使用して確認できます:
$ sudo getfacl -e /home/sk/
出力例:
getfacl: Removing leading '/' from absolute path names file: home/sk/ owner: sk group: sk user::rwx user:qemu:r-x #effective:--x group::--- #effective:--- mask::--x other::---
ステップ3: libvirtdサービスを再起動します:
$ sudo systemctl restart libvirtd
これで、Libvirtゲストマシンが問題なく起動します。
結論
このガイドでは、KVM libvirtで「ストレージファイルのアクセス許可が拒否されました」というエラーが発生する理由と、Linuxで2つの異なる方法で修正する方法について説明しました。