23 August 2021

Windows 10バージョン21H1でのWSL2インストール

Windows 10バージョン21H1でWSL2をインストールする。

WSL2本体のインストール

管理者権限でコマンドプロンプト(Windows PowerShell)を開き、WSLの関連コンポーネントを一括インストールする。

管理者権限コマンドプロンプト(Windows PowerShell)での作業
c:\>wsl --install

Installing: Virtual Machine Platform
Virtual Machine Platform has been installed.
Installing: Windows Subsystem for Linux
Windows Subsystem for Linux has been installed.
Downloading: WSL Kernel
Installing: WSL Kernel
WSL Kernel has been installed.
Downloading: Ubuntu
The requested operation is successful. Changes will not be effective until the system is rebooted.
管理者権限コマンドプロンプト(Windows PowerShell)での作業
(日本語表示だった場合)
c:\>wsl --install

インストール中: 仮想マシン プラットフォーム
仮想マシン プラットフォーム はインストールされました。
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム はインストールされました。
ダウンロード中: WSL カーネル
インストール中: WSL カーネル
WSL カーネル はインストールされました。
ダウンロード中: Ubuntu
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。

ここでインストールされるのは、次の3つ

  • Virtual Machine Platform(仮想マシン プラットフォーム)
  • Windows Subsystem for Linux(Linux 用 Windows サブシステム)
  • WSL Kernel(WSL カーネル)

wslコマンドがインストールに対応する前は、コントロールパネルの「Windowsの機能」でインストールされていたコンポーネントだ。

20210823-windowsfeature-cpl.jpg
Windowsの機能(参考)で確認すると、すでに「Linux用Windowsサブシステム」「仮想マシンプラットフォーム」がインストールされているのがわかる

現在のところGUI App Support(WSLg)はインストールされない。(21H2ではインストールされるのだろうか)

なお、インストールメッセージ中の「Downloading: Ubuntu」が何なのかはわからない。 wsl -l -v で調べる限り、ディストリビューションは何もインストールされていない。ディストリビューションは、実際にWSLを利用するユーザ権限で後ほどインストールすればよい。

管理者権限コマンドプロンプト(Windows PowerShell)での作業
c:\>wsl --list --verbose

Linux 用 Windows サブシステムには、ディストリビューションがインストールされていません。
ディストリビューションは Microsoft Store にアクセスしてインストールすることができます:
https://aka.ms/wslstore

インストール時のメッセージの通り、いったんWindows 10を再起動する。

WSLのシステムコンポーネント類を(念のため)アップデートする

管理者権限コマンドプロンプト(Windows PowerShell)での作業
c:\>wsl --update

更新をチェック中...
利用できる更新はありません。
カーネル バージョン: 5.10.16

当然、セットアップ直後なのでアップデートは存在しない。

次に、WSLのデフォルト・バージョンを2に設定する。設定後、念のため既定のバージョンが2に変更できたかを再確認する。

管理者権限コマンドプロンプトでの作業
C:\> wsl --set-default-version 2

WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
この操作を正しく終了しました。

C:\> wsl --status
既定のバージョン: 2

Linux 用 Windows サブシステムの最終更新日: 2021/08/21
WSL の自動更新が有効になっています。

カーネル バージョン: 5.10.16

「Linux用Windowsサブシステム」「仮想マシンプラットフォーム」の有効化を再確認

wslコマンドがインストールに対応したのちは、この作業はやらなくてよいとされているが、私が作業した2台のマシンのうち1台ではこの作業は必要だった。(参考資料 Microsoft WSLドキュメント『Windows 10 用 Windows Subsystem for Linux のインストール ガイド』)

これらの機能が有効化(インストール)されているかどうかは、次のコマンドで確認できる。この例では「状態 : 有効」と表示されているので、既に有効であるとわかる。

管理者権限Windows PowerShellでの作業
C:\> dism /online /Get-FeatureInfo /featurename:VirtualMachinePlatform

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.844

イメージのバージョン: 10.0.19043.1165

機能情報:

機能名 : VirtualMachinePlatform
表示名 : 仮想マシン プラットフォーム
説明 : 仮想マシンのプラットフォーム サポートを有効にします
再起動が必要 : Possible
状態 : 有効

カスタム プロパティ:

(カスタム プロパティが見つかりません)

操作は正常に完了しました。

C:\> dism /online /Get-FeatureInfo /featurename:Microsoft-Windows-Subsystem-Linux

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.844

イメージのバージョン: 10.0.19043.1165

機能情報:

機能名 : Microsoft-Windows-Subsystem-Linux
表示名 : Linux 用 Windows サブシステム
説明 : ネイティブなユーザー モードの Linux シェルおよびツールを Windows で実行するためのサービスと環境を提供します。
再起動が必要 : Possible
状態 : 有効

カスタム プロパティ:

ServerComponent\Description : ネイティブなユーザー モードの Linux シェルおよびツールを Windows で実行するためのサービス と環境を提供します。
ServerComponent\DisplayName : Linux 用 Windows サブシステム
ServerComponent\Id : 1033
ServerComponent\Type : Feature
ServerComponent\UniqueName : Microsoft-Windows-Subsystem-Linux
ServerComponent\Deploys\Update\Name : Microsoft-Windows-Subsystem-Linux

操作は正常に完了しました。

もし、機能が有効化(インストール)されていない場合(「状態 : 無効」と表示された場合)は、次の2行のコマンドを実行すると有効化することができる。

管理者権限Windows PowerShellでの作業
C:\> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

C:\> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

ここで再びWindows 10を再起動する。

インストール可能なLinuxディストリビューション一覧より、最新版Ubuntuをインストールする

Linuxを使うユーザのコマンドプロンプト(Windows PowerShell)での作業
C:\> wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d <Distro>' を使用してインストールします。

NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS

C:\> wsl --install -d Ubuntu-20.04

Ubuntu 20.04のインストール完了後、確認する

Linuxを使うユーザのコマンドプロンプト(Windows PowerShell)での作業
C:\> wsl --list --verbose

  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2

WSLカーネル、ディストリビューションのインストールサイズ

どれくらいのHDD容量を消費するものなのか、コマンドの段階ごとのディスク残量( fsutil volume diskfree c: で調査)からコンポーネントのサイズを推測してみた

コンポーネントHDD消費サイズ
WSL本体・カーネル0.88 GBytes
Ubuntu-20.04インストール直後2.19 GBytes
Ubuntu-20.04をapt upgradeで更新後3.01 GBytes
Ubuntu-20.04にbuild-essentialをインストールした状態3.14 GBytes
Ubuntu-20.04にbuild-essentialとgeditをインストールした状態4.36 GBytes

WSL本体とUbuntu-20.04を最低限使える状態にすると、 0.88 GB + 4.36 GB = 5.24 GBytes ほどのHDD容量を消費するようだ。

ディストリビューションの仮想ディスクファイル

ディレクトリ C:\Users\ユーザ名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState の中に、 ext4.vhdx という仮想ディスクファイルが格納されている。(現在のサイズは 3.77 GBytes)

仮想ディスクファイルを最適化するには、まずWSLをシャットダウンしてから

Linuxを使うユーザのコマンドプロンプト(Windows PowerShell)での作業
C:\> wsl --shutdown

仮想ディスクを最適化する(管理者権限で実行する)

Hyper-Vの機能をインストールしている場合
C:\> Optimize-VHD -Path C:\Users\vm\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx -Mode full
Hyper-Vの機能をインストールしていない場合
C:\> diskpart

Microsoft DiskPart バージョン 10.0.19041.964
Copyright (C) Microsoft Corporation.
コンピューター: M720Q-WIN10

DISKPART> select vdisk file="C:\Users\vm\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"

DiskPart により、仮想ディスク ファイルが選択されました。

DISKPART> attach vdisk readonly

  100% 完了しました
DiskPart により、仮想ディスク ファイルがアタッチされました。

DISKPART> compact vdisk

  100% 完了しました
DiskPart により、仮想ディスク ファイルは正常に圧縮されました。

DISKPART> detach vdisk

DiskPart を終了しています...

DISKPART> exit
C:\> 

DISKPART compact vdisk のドキュメント

最適化の結果は... 今の時点では大したことなかった。(たった、200 MBytesのコンパクト化)

コマンドプロンプト(Windows PowerShell)での作業
> dir  ... 最適化前
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2021/08/27     16:39     3857711104 ext4.vhdx

> dir  ... 最適化後
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2021/08/27     16:42     3834642432 ext4.vhdx