こんにちは、現役エンジニアの inno_tech です。
Windows10にWSL2をインストール後、Virtual Box上のLinuxを起動するとエラーで仮想マシンが起動しない状態に陥ります。 WSL2とVirtual Boxを併用するための設定 と 対策をまとめます。
Virtual Boxのインストール方法はこちらにまとめています。
WSL2のインストール方法はこちらにまとめています。
本記事は、Windows10 Pro(バージョン 21H2) / Virtual Boxがインストール済み の環境で動作確認をしています。
問題 | WSL2 インストール後に仮想マシンが起動しない
WSL2インストール後、Virtual Boxマネージャーを起動し、仮想マシンを起動すると「Call to NEMR0InitVMPart2 failed: VERR_NEM_INIT_FAILED (VERR_NEM_VM_CREATE_FAILED).」というエラーが発生しました。
この時、下のようなポップアップが表示され、仮想マシンウィンドウが立ち上がりません。
この時使用していたVirtual Boxバージョンは v6.1.28 でした。
次の章から、VERR_NEM_INIT_FAILED のエラーに対処していきます。
対策1 | Windowsハイパーバイザー プラットフォームを有効化
Windowsハイパーバイザー プラットフォームが必要
Virtual Box と WSL2を併用するには「Windowsハイパーバイザー プラットフォーム」の有効化が必須です。解説は後で行い、まずは手順を説明します。
コントロールパネル > プログラムと機能 > Windowsの機能の有効化または無効化 をクリックします。
するとWindows機能の一覧が表示されます。
ちなみに、WSL2を有効化すると Linux用Windowsサブシステムにチェックが付きます。
続いて、下の方にある「Windows ハイパーバイザー プラットフォーム」をチェックを付け、OKをクリックします。
機能を有効化したら、PCを再起動してください。
Windowsハイパーバイザー プラットフォームとはなにか?
WSL2は、Windowsの仮想化技術「Hyper-V」の一部機能を使用しています。
一方、Virtual Box や VMWare といったサードパーティー製の仮想化ソフトウェアは、独自の仮想化技術を使用しHyper-Vを使用しません。
この仮想化方式の違いにより、Hyper-Vが登場した当初はHyper-V を有効化すると、Virtual Boxが使用できなくなるという問題がありました。(CPUの仮想化支援機能が占有されるため)
しかし時は流れ、「Windowsハイパーバイザー プラットフォーム」の登場により、Hyper-V経由で仮想化を実現するAPIが公開され、Hyper-V と サードパーティ製仮想化ソフトウェアの共存が可能になった、という経緯です。
ここまでのまとめです。
- WSL2ではHyper-V の一部機能を利用する。
- Hyper-Vを使用する場合、 Virtual Boxは、Windowsハイパーバイザープラットフォーム経由で仮想マシンを起動する。
- したがって、「Windowsハイパーバイザープラットフォーム」の有効化が必須。
一方、Virtual BoxもHyper-V経由での動作をサポートするバージョンを使用する必要があります。続いてはVirtual Boxのバージョンを最新化します。
対策2 | Virtual Box のバージョンアップ
Virtual Box側も同様に、Hyper-V上での動作がサポートされたバージョンを使用する必要があります。
さらに Virtual Box v6.1.28 は注意が必要で、Windows10でHyper-V経由での起動に失敗するというバグが報告されています。(問題レポート)
Virtual Box の最新化
すでにVirtual Boxをインストールしている場合、Virtual Boxマネージャーからアップデートを確認できます。
最新バージョンへのリンクが表示されるのでインストーラーをダウンロードしましょう。
ダウンロードしたインストーラーを実行し、セットアップします。インストーラーが起動したら Next をクリック。
インストールパッケージの変更は特に変更せずに、Next をクリック。
ショートカット等のオプションを設定し、Next をクリック。
インストール中にネットワークが一時切断されるため、警告が表示されます。 Yes をクリックして進めます。
インストール準備完了画面が表示されるので、Install をクリック。
インストール完了後、Finishをクリックして画面を閉じます。
インストール完了後、PCを再起動します。
Virtual Boxマネージャーを起動し、バージョンが更新されたことを確認しましょう。
Virtual Boxのバージョンアップ後の注意点
Virtual Boxのバージョンアップ後、注意点が2つあります。
注意点1 | Virtual Box Extension Packのアップデートも必要
Virtual Boxのバージョンアップ後、仮想マシンを起動すると別のエラー「Failed to construct device ‘usb-ehci’ instance #0 (VERR_PDM_DEVHLP_VERSION_MISMATCH).」が発生します。
これは Virtual Box本体 と Extension packのバージョン不一致が原因です。
続いて、Extension Packのバージョンアップ方法を説明します。
Virtual BoxのHPからインストールしたバージョンと一致するExtension Packをダウンロードしてください。
VirtualBoxマネージャ > ファイル > 環境設定 を開き、機能拡張タブを開きます。画面右側の+ボタンからExtension Packを追加します。
すでに古いバージョンがインストールされている場合、下の画像のようなメッセージが表示されます。そのまま「アップグレード」を選択します。
ライセンス同意画面が開くので、同意します を選択します。
以上でExtension Packがインストールされます。Virtual Boxのバージョンと一致することを確認してください。
注意点2 | 仮想マシン側の Guest Additions のアップデートも必要
Virtual Box と Extension Packのバージョンを揃え、仮想マシンを起動するとログイン画面が起動します。
仮想マシンが起動した! 解決だー
と思って、ログインしてみると画面が真っ暗(ブラックスクリーン)の状態になり、起動してきません。
おかしいなー
原因は、仮想マシン側のGuest Additionsバージョンが古いことでメッセージが大量に発生し、仮想マシンの動作が異常に遅いためでした。
絶対的な対処法は不明ですが、ログを確認したところオーディオ系のエラーが多かったので、一旦オーディオを無効化しました。
とりあえず接続デバイスを減らして起動負荷を減らす作戦です!
オーディオの無効化をして、再度仮想マシンを起動したところデスクトップ画面が表示されました。
しかし、画面上部にGuest Additionsのバージョン不一致(Failure waiting for event, rc-VERR_INVALID_HANDLE)のエラーが定期的に表示されます。
対策として、Guest Additionsのバージョンアップを行います。
仮想マシンの上部メニューから、デバイス > Guest Additions CDイメージの挿入 をクリックします。
これにより、/media/[username]/VBox_GAs_[version]
がマウントされます。ターミナルから以下のようにGuest Additionsをインストールします。
# マウント先に移動
cd /media/[username]/VBox_GAs_[version]
# インストール
sudo ./VBoxLinuxAdditions.run
v6.1.28 から v6.1.34にアップグレードされました。仮想マシンを再起動しましょう。
以上で、仮想マシンが正常に使用できるようになります。一時的に無効化した機能は元に戻しましょう。
お疲れ様でした~!
まとめ
今回のまとめです。
- WSL2との併用は、Windowsハイパーバイザープラットフォームの有効化が必要。
- Windowsハイパーバイザープラットフォームに対応したVirtual Boxのバージョンを使用しよう。
- Extension Pack, Guest Additionsのバージョンアップも忘れないように!
2021年の全国の本屋さんで最も売れた年間ベストセラー本が気になる方はこちら。
参考になったでしょうか。
ほかにも役立つ情報が他のページにもあるかもしれません。
ご覧になるかはあなた次第です!
この記事がイイねと思ったら、Twitterフォロー か にほんブログ村のどちらかしてくれたら嬉しいよ!
コメント / ご要望