WSL2 #5:ゲストOS上にWSL2をインストールしてみる

Hyper-VのゲストOSにWSL2をインストールは可能か?


環境

ホスト:Windows 10 Pro 20H2 19042.867
ゲスト:Windows 10 Pro 20H2 19042.867

手順

※ 参考:WSL:WSL2をインストールしてみる

ホストにWSL2を構築する手順と同じである。

1. Linux用のWindowsサブシステムを有効にする
管理者権限としてPowerShellを開き、次のコマンドを実行する。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

2. 仮想マシンを有効にする
管理者権限としてPowerShellを開き、次のコマンドを実行する。
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

3. ゲストOSを再起動する

4. Linuxカーネルアップデートパッケージをインストールする
以下をダウンロードしインストールする https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

5. デフォルトバージョンとしてWSL2を設定する
PowerShellを開き、次のコマンドw実行する。
wsl --set-default-version 2

6. 選択したLinuxディストリビューションをインストールする
Microsoft Storeで"Linux"を検索し任意のLinuxをインストールする。
今回もUbuntu 20.04 LTS をインストールした。

7. Ubuntuの起動
インストールしたUbuntuを実行し、ユーザー登録などの初期化を行う。
しかし以下エラーとなった。
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x80370102
Error: 0x80370102 ??????????????????????????????????????

Press any key to continue...

どうやらゲストOS上の仮想化機能が無効となっているのが原因のようだ。

ゲストOSの仮想化機能を有効にする

1. ゲストOSをシャットダウンする

2. 現在の状況を確認
PowerShellの以下コマンドでゲストOSの状態を確認できる。
"get-vmprocessor -vmname VM名 | fl"
実行例:(VMの名前が"work"の場合)
PS C:\WINDOWS\system32> get-vmprocessor -vmname work |fl


ResourcePoolName                             : Primordial
Count                                        : 1
CompatibilityForMigrationEnabled             : False
CompatibilityForOlderOperatingSystemsEnabled : False
HwThreadCountPerCore                         : 0
ExposeVirtualizationExtensions               : False
EnablePerfmonPmu                             : False
EnablePerfmonLbr                             : False
EnablePerfmonPebs                            : False
EnablePerfmonIpt                             : False
EnableLegacyApicMode                         : False
AllowACountMCount                            : True
Maximum                                      : 100
Reserve                                      : 0
RelativeWeight                               : 100
MaximumCountPerNumaNode                      : 16
MaximumCountPerNumaSocket                    : 1
EnableHostResourceProtection                 : False
OperationalStatus                            : {Ok, HostResourceProtectionDisabled}
StatusDescription                            : {OK, ホスト リソース保護は無効です。}
Name                                         : プロセッサ
Id                                           : Microsoft:817E5781-E7C2-4780-A6B6-6E066DBCF770\b637f346-6a0e-4dec-af52-b
                                                d70cb80a21d\0
VMId                                         : 817e5781-e7c2-4780-a6b6-6e066dbcf770
VMName                                       : work
VMSnapshotId                                 : 00000000-0000-0000-0000-000000000000
VMSnapshotName                               :
CimSession                                   : CimSession: .
ComputerName                                 : PCD1
IsDeleted                                    : False
VMCheckpointId                               : 00000000-0000-0000-0000-000000000000
ここで重要なのが "ExposeVirtualizationExtensions" であるが、この値が"False"だと仮想化機能が無効である。

3. 仮想化機能を有効にする
管理者権限でPowerShellを起動し以下コマンドで有効(True)にする。
"Set-VMProcessor -VMName VM名 -ExposeVirtualizationExtensions $true" 実行例:(VMの名前が"work"の場合)
PS C:\WINDOWS\system32> Set-VMProcessor -VMName work -ExposeVirtualizationExtensions $true

再度状況を確認してみると "ExposeVirtualizationExtensions" が "True" となり有効化されたことがわかる。
PS C:\WINDOWS\system32> get-vmprocessor -vmname work |fl


ResourcePoolName                             : Primordial
Count                                        : 1
CompatibilityForMigrationEnabled             : False
CompatibilityForOlderOperatingSystemsEnabled : False
HwThreadCountPerCore                         : 0
ExposeVirtualizationExtensions               : True
EnablePerfmonPmu                             : False
EnablePerfmonLbr                             : False
EnablePerfmonPebs                            : False
EnablePerfmonIpt                             : False
EnableLegacyApicMode                         : False
AllowACountMCount                            : True
Maximum                                      : 100
Reserve                                      : 0
RelativeWeight                               : 100
MaximumCountPerNumaNode                      : 16
MaximumCountPerNumaSocket                    : 1
EnableHostResourceProtection                 : False
OperationalStatus                            : {}
StatusDescription                            : {}
Name                                         : プロセッサ
Id                                           : Microsoft:817E5781-E7C2-4780-A6B6-6E066DBCF770\b637f346-6a0e-4dec-af52-b
                                                d70cb80a21d\0
VMId                                         : 817e5781-e7c2-4780-a6b6-6e066dbcf770
VMName                                       : work
VMSnapshotId                                 : 00000000-0000-0000-0000-000000000000
VMSnapshotName                               :
CimSession                                   : CimSession: .
ComputerName                                 : PCD1
IsDeleted                                    : False
VMCheckpointId                               : 00000000-0000-0000-0000-000000000000

4. ゲストOSを起動しUbuntuを実行
今度は正常に起動できた。
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:

念のためWSLのバージョンを確認すると "WSL 2" で問題なく動作している。
PS C:\Users\user> wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2


WSL2

0 件のコメント:

その他の記事