beatF5run

技術系の話とか、勉強会とか

Hyper-V上のWindows 11 開発環境でWSL2(Ubuntu)を利用するには入れ子仮想化を有効に

はじめに

最近自分のPCをWindows 11にアップデートしました。

Hyper-Vマネージャーを覗くと『Windows 11 開発環境』が利用できるようです。(Windows 10でもあった)

「評価版 Windows 11」が手軽に起動できるので、さらにその環境上でWSL2のUbuntuを起動しようとしたところ、以下のメッセージが表示され起動することができません。

Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS

WSL2は内部でHyper-Vを利用するので、今回のHyper-V上の開発環境では「Hyper-V on Hyper-V」の入れ子状態となるため、仮想化機能をHyper-Vに対して有効化する必要があります。

今回はその経緯と対策手順を記載します。

手順1:仮想化有効まえ

Hyper-V 仮想マシンの作成

Hyper-V マネージャーを起動し、「クイック作成...」を選択。

仮想マシンの作成

仮想マシンの作成」から「Windows 11 開発環境」を選択し、「仮想マシンの作成」ボタンを押下。

仮想マシンの起動

Hyper-Vマネージャー

対象の仮想マシンを起動。

PowerShellの起動

仮想マシンにログイン後、PowerShellを「管理者モード」で起動。

PowerShell起動

wslコマンドで起動可能なディストリビューションの確認

wsl --list --online

上記コマンドでWSL2で利用可能なディストリビューションを確認。

実行結果

wsl --list --online結果

wslコマンドによる起動:失敗時

wsl --install -d Ubuntu

上記のwslコマンドでUbuntuの起動を試みますが、この時点では仮想化を有効にしていないのでUbuntuのウインドウが起動されるものの、前述の「仮想化機能を有効にしてください」という旨のメッセージが表示され、Ubuntuは利用できません。

起動しないケース

wsl --install -d Ubuntu 起動失敗

手順2:仮想化有効化まで

この作業はホスト側の作業です。

仮想マシンの名称確認

仮想マシンの名称を確認します。 Hyper-Vマネージャーに表示される名称で問題ないのですが、今回はPowerShellで同じ名称になるかを確認しました。

参考

docs.microsoft.com

管理者モードでPowerShellを起動し、以下のコマンドを実行。

Get-VM

Get-VM結果

ここでは「Windows 11 開発環境_1」を対象に作業を進めます。(作業の都合、名称を変更しています)

仮想化機能を有効にする

Hyper-V on Hyper-V」の入れ子を可能にするにはPowerShell上で「Set-VMProcessor」コマンドを利用して仮想マシンごとに仮想化を有効にします。

参考URL:入れ子になった仮想化による仮想マシンでの Hyper-V の実行

docs.microsoft.com

Set-VMProcessor -VMName "Windows 11 開発環境_1" -ExposeVirtualizationExtensions $true

Set-VMProcessorコマンドの結果

Set-VMProcessor結果

手順3:仮想化有効後

ここの作業は仮想マシン上で行います。

仮想マシンPowerShellを起動

仮想マシンへログインし、「管理者モード」でPowerShellを起動

wslコマンドによる起動:成功

手順1と同じようにwslコマンドでの起動を試みる。

wsl --install -d Ubuntu

Ubuntuの別ウインドウが起動し、Ubuntuへのログインが確認できました。

※この時点で気づいたんですが、"wsl --install -d Ubuntu"を実行時にUbuntuディストリビューションはインストール済であるとメッセージにでてますね。

Ubuntu起動成功

wsl --install -d Ubuntu 起動成功

手順は以上となります。

まとめ(と追記)

  • Windows 11ではHyper-Vで「評価版 Windows 11」が利用できる
  • Hyper-V上の「評価版 Windows 11」でWSL2が利用できるが「仮想化有効」のためのコマンドを叩く必要あり

~追記~

  • 「評価版 Windows 11」にはすでにWSL2のUbuntuがインストール済みなので、すぐ使えて楽
  • 仮想マシン上でのwslコマンドでUbuntuをインストールするにはPowerShellは一般ユーザーでもできた

おわりに

WSL2自体のインストールはかなり簡略化されましたが、WSL2自体をお試しであれこれする環境が欲しかったので、これで環境の汚染や破壊を恐れずに作業できそうです。

Windows Sandbox(サンドボックス)ではそもそもWSL2使えませんよね?