WSL 2.0.0の新機能と変更点
2023年9月18日にリリースされた「WSL 2.0.0」の新機能と変更点をピックアップします。ストアアプリケーション版WSL
ストアアプリケーション版「WSL」の詳細やインストール方法は、以下を参照してください。リリースノート
リリースノートは以下を参照してください。WSLの変更点
「WSL」の変更点をいくつか紹介します。1. セッション 0からWSLにアクセスできない不具合の修正
「PSRemoting」や「ssh」などセッション 0から「WSL」にアクセスできない不具合が修正されました。これにより改善する問題は、以下を参考にしてください。
2. バイナリーの署名
WSLパッケージに含まれるすべてのバイナリーに署名されました。3.VMPの有効化
HNSが利用できないマシンでVMPを有効化するかユーザーに尋ねるようになりました。4.localhostのリレー処理修正
IPv6が無効になっている環境で「localhost」のリレーが失敗する問題が修正されました。5. エラーメッセージの改善
アップグレード手順を提供するため「WSL 1」の無効化ポリシー向けエラーメッセージが改善されました。6. Microk8sの問題修正
ミラーリングネットワークで発生する「Microk8s」に関連する不具合が修正されました。7. 共有マウントポイントの作成
「init」がディストリビューションの名前空間をセットアップする時に、共有マウントポイントの作成するようになりました。これにより改善する問題は、以下を参考にしてください。
8. ブロックデバイスのデタッチ
仮想マシンが終了する時に、ユーザーのブロックデバイスをデタッチするようになりました。9. 不正な変換からの保護
「.wslconfig」が不正な変換から保護されるようになりました。10.systemd unitの生成ロジック追加
「binfmt」インタープリターを保護するため、systemd unitの生成ロジックが追加されました。これにより改善する問題は、以下を参考にしてください。
11. wslservice.exeがクラッシュする問題の修正
「wslservice.exe」がクラッシュしうる問題が修正されました。12. plan9のマウント再試行
I/Oエラー発生時にplan9のマウントを再試行するようになりました。13. Microsoft.WSL.Kernelのアップデート
「Microsoft.WSL.Kernel」が「5.15.123.1-1」にアップデートされました。14. 通知プロンプトの表示
不足しているオプションコンポーネントをインストールする時に、ユーザーに通知プロンプトを表示するようになりました。15.wsl.exeにオプション追加
「wsl.exe」に以下のオプションが追加されました。
--manage <distro_name> --set-sparse
16. 更新通知ロジックの修正
更新通知ロジックの様々な不具合が修正されました。17. MSRDCのアップデート
「MSRDC」はリモートデスクトップクライアントです。「MSRDC」が「MSRDC 1.2.4485」にアップデートされました。
18. WSLgのアップデート
「WSLg」は「WSL」上でLinuxのGUIアプリを動かす仕組みです。「WSLg」が「WSLg 1.0.57」にアップデートされました。
これによりLinuxのGUIアプリでウィンドウスナッピングを利用できるようになりました。
Windowsキーを押しながらカーソルキーを押せば、ウィンドウがサイドにスナップできます。
実験的な新機能の導入
「WSL 2.0.0」では数々の実験的な新機能が導入されています。フィードバックにより高い評価を得た実験的な機能は、今後デフォルトで有効になる予定です。
実験的な機能を有効にするには
実験的な機能を有効にするには、「.wslconfig(C:\Users\ユーザー名\.wslconfig)」ファイルに「[experimental]」を記述し、有効にしたい実験的な機能を及びその設定を指定してください。詳細は以下を参照してください。
記述例
[experimental]
autoMemoryReclaim=gradual
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
autoMemoryReclaim=gradual
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
1. キャッシュメモリーの自動解放機能
CPUがアイドルになった時に、Linux側で確保されているキャッシュメモリーを自動的に解放する機能です。解放されたキャッシュメモリーはWindows側に空きメモリーとして返却され、「WSL VM(仮想マシン)」のメモリーサイズが自動的に削減されます。
設定
設定の内容は以下のとおりです。設定名 | 値の型 | デフォルト | 設定値 |
---|---|---|---|
autoMemoryReclaim | 文字列 | 無効 |
|
gradual
「gradual」を設定すると、徐々にキャッシュメモリーが解放されていきます。WSLはCPUの使用率を監視し、CPUの使用率が低い状態が5分間続いた場合、キャッシュメモリーの解放が始まります。
このキャッシュメモリーの解放は、「Control Group v2(cgroup v2)」の「memory.reclaim」機能を利用して行われます。
またキャッシュメモリーは、30分後にキャッシュメモリーがすべて解放されるように徐々に解放されていきます。
例えば3000MBのキャッシュメモリーが存在する場合、毎分100MBずつキャッシュメモリーが解放されていきます。
注意事項
この機能を利用するにはWSLで「Control Group v1(cgroup v1)」を無効化する必要があります。そのためWSLでDockerデーモンをサービスとして実行できなくなります。
現時点での回避策は、「Docker Desktop」を利用することです。
現在この問題の解消に向けて取り組まれています。
アイドル時間のしきい値など柔軟に設定を変更するには
アイドル時間のしきい値など柔軟に設定を変更するには、この機能を利用せず、代わりに以下のスクリプトを活用してください。drop
「drop」を設定すると、WSLがCPUのアイドルを検出した時に、一気にキャッシュメモリーが解放されます。こちらの設定は「Control Group(cgroup)」に対する影響がありません。
2. 仮想HDDサイズの自動的な削減機能
WSLで使用される仮想HDD(VHD)はユーザーがファイルを作成する時など、現在よりも大きなストレージサイズが要求された時に、それに合わせ自動的にストレージサイズが増加していきます。今回実験的な機能でVHDをスパースVHDで作成する機能が追加され、これにより自動的にVHDのサイズを減らせるようになりました。
設定
設定の内容は以下のとおりです。設定名 | 値の型 | デフォルト | 設定値 |
---|---|---|---|
sparseVhd | bool | false |
|
設定値
「true」を指定するとこの機能が有効になり、新規に作成されるVHDはスパースVHDで作成されるようになります。既存のディストリビューションに設定するには
以下のコマンドを実行すれば、この機能の有効・無効を切り替えられます。wsl --manage <ディストリビューション> --set-sparse <true/false>
3. ネットワークインターフェースのミラーリング
ネットワークの使い勝手を改善するため、WSLで利用されてきた伝統的なNATネットワークアーキテクチャーが見直され、NATに代わる新しいネットワークモードが追加されました。この新しいネットワークモードは「Mirrored」と呼ばれています。
この機能の目的はWindowsのネットワークインターフェースをLinuxにミラーし、新しいネットワーク機能の導入と互換性を改善することです。
現時点での利点
この機能を有効にすることで現状以下の利点が得られます。- IPv6のサポート
- localhost(127.0.0.1)を利用してLinux内からWindowsサーバーに接続可能に
- LANからWSLへ直接接続可能に
- VPNのネットワーク互換性向上
- マルチキャストのサポート
設定
設定の内容は以下のとおりです。設定名 | 値の型 | デフォルト | 設定値 |
---|---|---|---|
networkingMode | 文字列 | NAT |
|
設定値
「mirrored」を指定すると、ネットワークインターフェースのミラーリングが有効になります。それ以外の設定値は「NAT」が使用されます。
注意事項
現状以下の既知の問題があります。- 「Visual Studio Code Remote Development」コンテナを実行しポートをバインドする時に「Address already in use」エラーが発生する
その他不具合を見つけた時は、以下に不具合報告してください。
また現状この機能は「Windows Insiders」でのみ利用できます。
4. DNSのトンネリング
WSLからインターネットに接続できない要因の一つは、WSLからWindowsへのDNSリクエストがブロックされることです。現在のネットワーク構成によっては、「WSL VM」からWindowsホストへ送信されるDNSパケットがブロックされます。
この要因は仮想化機能を利用してWindowsと通信する代わりに、DNSをトンネリングすることで解消できます。
またネットワークパケットを送信せずに「DNS name request」を解決できるため、VPNや特定のファイアウォールやネットワーク設定でも、インターネットへの接続性が改善されます。
この機能によりWSL内からネットワークに接続できない状況が減るでしょう。
設定
設定の内容は以下のとおりです。設定名 | 値の型 | デフォルト | 設定値 |
---|---|---|---|
dnsTunneling | bool | false |
|
設定値
「true」を指定すると、この機能が有効になります。注意事項
現状この機能は「Windows Insiders」でのみ利用できます。5. Windows Firewallのルール適用
「Hyper-V Firewall」では、WSLに適用するファイアウォール設定やルールを指定できます。この機能は「Hyper-V Firewall」の設定に加え、「Windows Firewall」の設定やルールもデフォルトでWSLに適用する機能です。
設定
設定の内容は以下のとおりです。設定名 | 値の型 | デフォルト | 設定値 |
---|---|---|---|
firewall | bool | false |
|
設定値
「true」を指定すると、この機能が有効になります。注意事項
現状この機能は「Windows Insiders」でのみ利用できます。6. HTTPプロキシー設定の適用
WindowsのHTTPプロキシーの設定はLinux側に反映されず、例えば以下のようにLinux側でHTTPプロキシーを設定する必要があります。この機能はWindowsのHTTPプロキシーの設定をLinux側に適用する機能です。
設定
設定の内容は以下のとおりです。設定名 | 値の型 | デフォルト | 設定値 |
---|---|---|---|
autoProxy | bool | false |
|