KVM起動時の「Permission denied」エラーの原因と解決方法
KVMで大きなトラブルに見舞われるのは久しぶりのことでした。とはいえ、ここ数年はそれほど頻繁に使っていなかったのも事実です。しかし最近、この仮想化技術を再び本格的に使う機会があり、生産性向上とともに、おまけのようにいくつかのトラブルもついてきました。
仮想マシンを起動しようとしたところ——特別なことは何もせず、単に kvm xyz のようなコマンドを実行しただけですが——次のようなエラーメッセージが表示されました。「Could not access KVM kernel module: Permission denied」。そこで今回のチュートリアルでは、問題の原因を特定するために確認すべき項目と、その解決方法を順番に解説していきます。
問題の詳細
実際に表示されたエラーメッセージは以下の通りです:
Could not access KVM kernel module: Permission denied
qemu-system-x86_64: failed to initialize KVM: Permission denied
このメッセージは、KVMのユーザースペース側コンポーネントが、KVMカーネルドライバーにアクセスできないことを示しています。多くの場合、原因は誤ったパーミッション設定にあります。
解決策
ユーザーグループへの所属を確認する
まず最初に確認すべきは、自分のユーザーがkvmグループおよびlibvirtグループに所属しているかどうかです。グループへの追加後は、新しいシェルを起動しないと変更が反映されません。最も簡単な方法は、一度ログアウトして再度ログインし直すことです。
sudo usermod -G -a kvm "username"
sudo usermod -G -a libvirtd "username"
デバイスノードのパーミッションを確認する
次に、/dev/kvm デバイスのパーミッションを確認しましょう。正しいデフォルト設定は、パーミッション660、所有者root:kvmです。ご覧のとおり、rootユーザーまたはkvmグループのメンバーでなければアクセスできません。
ls -ld /dev/kvm
crw-rw---- 1 root kvm 10, 232 May 27 10:43 /dev/kvm
udevルールを確認・作成する
もう一つ確認したいのは、適切なudevルールが存在するかどうかです。udevはデバイスファイルシステムを管理するサービスで、/dev 配下のエントリに対して正しいパーミッションを設定します。通常、KVMソフトウェアをインストールすると、同梱パッケージの一つが必要なルールを提供してくれます。しかし過去にはバグも報告されており、ルールが存在しない場合は自分で作成することになります。
/etc/udev/rules.d/ ディレクトリ内に、XX-kvm.rules という名前のファイルを作成します。XXには数字が入り、GRUB2のルールと同様に、ルールが解析・実行される辞書順の順序を決定します。場合によってはルールの順序が重要になることもあります。確信が持てず、KVM機能に依存する他の設定がない場合は、99-kvm.rules を使えば問題ありません。
このファイルに次の1行を追加します:
KERNEL=="kvm", GROUP="kvm", MODE="0660"
これは何を意味しているのでしょうか?udevルールの書き方を簡単に説明すると:
- KERNEL — デバイスのカーネル名
- GROUP — デバイスを所有すべきUNIXグループ
- MODE — デバイスのビット単位のパーミッション
ルールを配置したら、再起動せずにルールを再読み込みします:
udevadm control --reload-rules
念のため、libvirtサービスも再起動しておくとさらに安心です:
systemctl restart libvirtd
デバイスノードのパーミッションを緩める(最終手段)
上記の方法がすべてうまくいかない場合の最終手段として、/dev/kvm のパーミッションをより緩い設定に変更する方法があります。660の代わりに666を指定すれば、システム上のすべてのユーザーがKVM仮想化を管理できるようになります。ホーム環境であれば、これほど問題にはなりません。
sudo chmod +666 /dev/kvm
これで、KVMを問題なく実行できるようになるはずです。
まとめ
以上で解説は終わりです。このチュートリアルは長くありませんが、かなりの幅広い項目をカバーしています。ただし、これはKVMに関するあらゆる問題に対応する汎用的なデバッグ記事ではありません。その目的には、以前公開したKVMトラブルシューティングガイドをご覧ください。今回は特に、KVM起動時のパーミッションエラーに焦点を絞り、分析と解決のための3〜4つの方法を紹介しました。
全体として、KVMは強力で柔軟な仮想化ソフトウェアです。唯一の難点は、やや玄人向けであり、GUI中心の他のツールほど手軽ではない点でしょう。そもそも仮想化自体がマニアックな分野ではありますが。もしパーミッションの問題でVMの作成や起動につまずいた場合は、上記のチェックリストを試してみてください。シンプルで非侵襲的、しかも再起動は一切不要です。それではまた。
-
KVMのストレージ管理を徹底解説!ストレージプールとボリュームの作成チュートリアル
さて、先日、Kernel-based Virtual Machine(KVM)という技術をご紹介しました。KVMは無料かつオープンソースの仮想化ソリューションで、VirtualBoxやVMware製品の代わりとして、あるいはそれらと併用して使うこともできます。前回は基本的な管理操作を扱いましたが、ストレージとネットワークについては別のチュートリアルに回すことにしました。 今回は、KVMにおけるストレージ管理について、より踏み込んだガイドをお届けします。内容はVirtualBoxで行ったものと似ており、仮想ディスクの追加・縮小・拡張などが含まれます。さらに、NFSストレージやNTFSフォーマット
-
VirtualBox 3.0.0 徹底レビュー!DirectX対応とネットワーク機能強化がすごい
私のお気に入りのデスクトップ仮想化ソフトウェアといえば、VirtualBoxとVMware Serverです。どちらも愛用しており、それぞれに魅力があります。全体的にはよく似た製品ですが、片方にしかない独自の機能を持っており、互いをうまく補完し合う関係にあると言えます。 つい先日、VirtualBox 3.0.0が大きな話題とともにリリースされました。これは、旧バージョンやVMware Serverと比べてどこまで進化したのかを確かめる絶好の機会です。深呼吸して、私と一緒にツアーに出かけましょう。長めの前置きで少々お付き合いいただきますが、きっと価値のある内容のはずです。 VirtualBo