はじめに
WSL(Windows Subsystem for Linux)の概要と導入にて、WindowsでUbuntuのコマンドラインを利用できる様になりましたが、完全なLinuxの互換性はありませんでした。そこで、システムコールの完全な互換性をサポートした、WSL2を利用してみます。
環境
- OS: Windows10 Pro 64bit
- Version: 1909
- OS build: 18363.1256
WSL2の要件
- x64 システム
- Version: 1903 以降
- OS build: 18362 以上
- ARM64 システム
- Version: 2004 以降
- OS build: 19041 以上
WSL1からの変更点
WSL1からWSL2にバージョンアップしましたが、大きな変更点は
- ファイル システム パフォーマンスの向上
- システム コールの完全な互換性のサポート
この2点です。
参照:WSL 2 と WSL 1 の比較 | Microsoft Docs
ただし、WindowsファイルシステムとWSL2ファイルシステム間でのファイル共有速度は遅いようです。
WSL2の構成
アーキテクチャ自体も大きく変わっています。
参照:完全なLinuxがWindows 10上で稼働する? 「WSL 2」とは:Windows 10 The Latest - @IT
WLS1では、Linuxカーネルは存在せずエミュレートしていましたが、WSL2では「軽量LinuxユーティリティVM」という仮想マシン上で動作します。仮想マシン上で動作するものの、
- 使い勝手はWSL1と同等
- WSL1よりも少ないメモリ使用量
- WSL1より高速なファイルIO
Microsoftによってチューニング、ビルドされたLinuxカーネルで、通常の仮想マシンに比べて高速に動作します。
インストール手順
参照:Windows Subsystem for Linux (WSL) を Windows 10 にインストールする | Microsoft Docs
WSLの機能を有効化
PowerShellを管理者権限で開き、WSLの機能を有効化します。
> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
展開イメージのサービスと管理ツール
バージョン: 10.0.18362.1139
イメージのバージョン: 10.0.18363.1256
機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。
仮想マシン機能を有効化
すでに要件を満たしたWindowsバージョンなので、仮想マシン機能の有効化を実施します。
> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
展開イメージのサービスと管理ツール
バージョン: 10.0.18362.1139
イメージのバージョン: 10.0.18363.1256
機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。
Linuxカーネル更新プログラムパッケージのインストールと設定
x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ
上記リンクからパッケージをダウンロードし、インストールを実行します。
その後、PowerShell上でWSL2を規定バージョンとして設定します。
> wsl --set-default-version 2
Linuxディストリビューションのインストール
今回はUbuntu20.04をWSL2用にインストールします。
Ubuntu 20.04 LTS を入手 - Microsoft Store
上記リンクを開き「入手」ボタンを押すと、Microsoft Storeが開きます。その画面でもう一度「入手」ボタンを押します。ダウンロード完了後、Ubuntuを起動を選択するとshellが起動します。
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: username
New password:
Retype new password:
passwd: password updated successfully
username/passwordを設定すると完了です。PowerShellでディストリビューションを確認します。
> wsl -l -v NAME STATE VERSION
* Ubuntu-18.04 Running 1
Ubuntu-20.04 Installing 2
あと便利なのでWindows Terminalもインストールしておきましょう。
参照:Windows ターミナルのインストール | Microsoft Docs
また、デフォルトで起動するディストリビューションをUbuntu20.04に変更します。
> wsl -s Ubuntu-20.04
> wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Running 2
Ubuntu-18.04 Running 1
挙動確認
Ubuntu20.04にログインして操作を実施してみます。
> wsl
username@DESKTOP-V2VK678:/mnt/c/Users/xxx $ sudo apt update && sudo apt upgrade
[sudo] password for xxx:
デフォルトではWSL2にマウントされたWindows側のファイルシステムディレクトリにログインするようです。
Windows Terminalの設定を変えてみます。Windows Terminalを起動し「▽」->「設定」を選択し、settings.jsonを開きます。
{
"guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
"hidden": false,
"name": "Ubuntu-20.04",
"source": "Windows.Terminal.Wsl",
"startingDirectory": "//wsl$/Ubuntu-20.04/home/username" # 追加
}
この設定は//wsl$/イメージ名/パス
という構成です。
保存後、再度Ubuntu20.04をWindows Terminalで開くと設定が反映されています。
まとめ
WSL2と聞くと、WSLのバージョンアップのように聞こえますが、アーキテクチャを見るとほとんど別物になりました。
特に「システム コールの完全な互換性のサポート」は良いですね!
WSL1とWSL2は棲み分けされているため、しばらくは両方ともサポートが続くようですが、特殊な用途でない限りはWSL2を利用するのが無難そうです。