今日、私は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つの異なる方法で修正する方法について説明しました。