Azure仮想マシンのWindows Server 2022でWSL 2を試してみた

2022.06.26

しばたです。

前の記事でEC2のWindows Server 2022ではWSL 2の導入が容易でないとお伝えしました。

これはAWSでは基本的にNested Virtualization(入れ子の仮想化)がサポートされていないためなのですが、それではAWSでなくAzureではどうかと思い調べてみることにしました。

Azure仮想マシンにおける入れ子の仮想化サポート

Azureでは当初入れ子の仮想化はサポートされていませんでいたが、2017年ごろより順次サポートされるシリーズが増えています。
これはWindows Server 2016より入れ子の仮想化がサポートされる様になり、Azureの基盤 *1にもその更新が波及したためと推測されます。

本日時点での状況を調べてみましたが、入れ子の仮想化をサポートするシリーズに対する明確な決まりはない様で、各シリーズ毎で直接サポート状況を調べるしかない感じでした。
傾向としてはざっくりこんな感じです。

  • 基本Intel CPUを使っているシリーズでサポートされる
    • AMD CPUでも新しい世代はサポートされる傾向がある
  • D、Eシリーズではv3以降の新しい世代でサポート
  • GPU搭載シリーズは非サポート

本記事の最後に詳細な調査結果を補足しておくので必要があればご覧ください。

試してみた

ここまでを踏まえて実際に試してみました。

今回は東日本リージョンでDシリーズの最新世代であるDsv5からD2s_v5 (2vCPU, 8GiB Memory)の仮想マシン(第2世代)を作ってみます。
OSはAzureなのでWindows Server 2022 Datacenter Azure Editionにしています。

Azureポータルより仮想マシンの作成をざっくり下図の様な設定で作成します。

図に無い設定はだいたいデフォルト設定のままです。

仮想マシンを作成後にRDPでOSにログインし、前の記事と同じ手順でWSL 2をインストールします。

# 要管理者権限
# ※ wsl --install コマンドが使えるのはWindows Server 2022から
wsl --install

# OS再起動
Restart-Computer

本日時点のOSでは必要な更新は既に適用済みで問題なくWSL 2のインストールが開始されます。

再起動後、再ログインするとインストールが続行されます。
EC2の場合はここでエラーとなりましたが、入れ子の仮想化をサポートしているAzure仮想マシンでは問題なく続行されユーザー名・パスワードの入力まで進みます。

初期設定を完了して無事WSL 2が利用可能になりました。

念のためにwsl -l -vコマンドでWSLのバージョンを確認してみてもちゃんとVersion 2です。

# Azureのインスタンスメタデータを取得
Invoke-RestMethod -Headers @{"Metadata"="true"} -Uri 'http://169.254.169.254/metadata/instance/compute?api-version=2021-02-01' |
    Select-Object name, location, vmSize

# WSLのバージョン確認
wsl -l -v

なお、Windows Terminalも問題なく使えます。
開始ディレクトリが~だと起動エラーになる事象が今回も発生したのでどうやらこの事象はWSLのバージョンには関係ないようです。

最後に

以上となります。

入れ子の仮想化をサポートしている環境では本当にあっさりとWSL 2が利用可能でした。
この点についてはAzureが羨ましいですね。

補足 : シリーズ毎の入れ子の仮想化サポート状況

各シリーズ毎の入れ子の仮想化サポート状況を表にまとめました。
元ネタは以下のDocsを参照しており、本日(2022/06/26)時点の内容となります。

シリーズ シリーズ(世代込み) 概要 入れ子の仮想化 備考
A A 汎用 × 2024年8月31日廃止予定
A Av2 汎用 ×
Bs Bs 汎用 × 負荷の急増(バースト)に対応
D D 汎用 × 旧世代
D Dv2 汎用 ×
D Dsv2 汎用 × Premium Storageをサポート
D Dv3 汎用
D Dsv3 汎用 Premium Storageをサポート
D Dv4 汎用
D Dsv4 汎用 Premium Storageをサポート
D Dav4 汎用 × AMD CPU
D Dasv4 汎用 × AMD CPU, Premium Storageをサポート
D Ddv4 汎用
D Ddsv4 汎用 Premium Storageをサポート
D Dv5 汎用
D Dsv5 汎用 Premium Storageをサポート
D Ddv5 汎用
D Ddsv5 汎用 Premium Storageをサポート
D Dasv5 汎用 AMD CPU, Premium Storageをサポート
D Dadsv5 汎用 AMD CPU, Premium Storageをサポート
D DCsv2 汎用 × 幾つかの機密保護機構が有効
D DCsv3 汎用 × 〃 (同上)
D DCdsv3 汎用 × 〃 (同上)
D DCasv5 汎用 × AMD CPU, 幾つかの機密保護機構が有効
D DCadsv5 汎用 不明 〃 (同上)
E Ev3 メモリ最適
E Esv3 メモリ最適 Premium Storageをサポート
E Ev4 メモリ最適
E Esv4 メモリ最適 Premium Storageをサポート
E Eav4 メモリ最適 × AMD CPU
E Easv4 メモリ最適 × AMD CPU, Premium Storageをサポート
E Edv4 メモリ最適
E Edsv4 メモリ最適 Premium Storageをサポート
E Ev5 メモリ最適
E Esv5 メモリ最適 Premium Storageをサポート
E Edv5 メモリ最適
E Edsv5 メモリ最適 Premium Storageをサポート
E Ebdv5 メモリ最適 リモートストレージ特化
E Ebdsv5 メモリ最適 リモートストレージ特化
E Easv5 メモリ最適 AMD CPU, Premium Storageをサポート
E Eadsv5 メモリ最適 AMD CPU, Premium Storageをサポート
E ECasv5 メモリ最適 × AMD CPU, 幾つかの機密保護機構が有効
E ECadsv5 メモリ最適 不明 〃 (同上)
F Fsv2 コンピューティング最適
F FX コンピューティング最適
H H 高パフォーマンス 不明 2022年8月31日提供終了予定
H HB 高パフォーマンス 不明 2024年8月31日提供終了予定
H HBv2 高パフォーマンス 不明
H HBv3 高パフォーマンス 不明
H HC 高パフォーマンス 不明
Ls Lsv2 ストレージ最適 ×
Ls Lsv3 ストレージ最適 ×
Ls Lsav3 ストレージ最適 ×
M M メモリ最適
M Mv2 メモリ最適 ×
M Msv2 メモリ最適 ×
M Mdsv2 メモリ最適 ×
N NC GPU搭載 × 2023年8月31日提供終了予定
N NCv2 GPU搭載 × 2023年8月31日提供終了予定
N NCv3 GPU搭載 ×
N NCasT4_v3 GPU搭載 × AMD CPU
N NC_A100_v4 GPU搭載 ×
N ND GPU搭載 × 2023年8月31日提供終了予定
N NDv2 GPU搭載 ×
N NDasrA100_v4 GPU搭載 ×
N NDm_A100_v4 GPU搭載 ×
N NV GPU搭載 × 2023年8月31日提供終了予定
N NVv3 GPU搭載 ×
N NVv4 GPU搭載 ×
N NVads_v5 GPU搭載 × AMD CPU
N NP GPU搭載 × FPGA搭載

脚注

  1. 公開情報に変更がなければAzure OSおよびAzure Hypervisor