Windows Subsystem for LinuxのプレビューVer.2.0が9月に公開された。WSL2と混同を避けるため、これをWSL V2.0と表記する。
現在、WSLはMicrosoftストア経由で配布されており、自動的にアップデートされる。ただし、WSL V2.0はまだプレビュー段階で、安定版はV1.2.5だ。このため、Windows Insider Programのプレビュー版ではないWindows 11では、当面は安定版のままになる。ただし、強制的にプレビュー版をインストールすることはできる。
追加される機能自体はそれほど難しいものではないが、動作条件などが複雑で、また既存のプログラムに影響を与える可能性があることから、評価やテストなどには十分な注意が必要と言える。実験的機能であることから、WSLや動作しているプログラムに大きな影響が出る可能性もある。日常的にWSLを使っているのであれば、安定版になるまで待つべきだろう。
WSL V2.0の概要
現時点では、WSL V2.0の新機能の多くは「実験的」とされている。これらは標準状態では無効とされており、各ユーザーフォルダ以下にある.wslconfigファイルで機能を有効化させる必要がある。
搭載される機能には、以下のようなものがある。
自動メモリ解放(Auto Memory Reclaim)
自動ディスクスペースクリーンアップ/スパースVHD(Automatic disk space clean up)
ミラードモードネットワーク(Mirrored mode Networking)
DNSトンネリング(DNS Tunneling)
Hyper-V ファイアウォール(Firewall)
自動プロキシー(auto Proxy)
それぞれで必要となる.wslconfigの設定項目を以下の表に示す。
自動メモリ解放
「自動メモリ解放」は、Linuxのファイルキャッシュを自動的に解放して、WSLを動かす軽量ユーティリティ仮想マシンのメモリ利用量を下げる技術だ。Linuxでは利用できるメモリを積極的にファイルキャッシュとして用いる。このため、利用可能な物理メモリをできうる限り使ってしまう。これまでも、メモリが解放されたら、Win32側に返すという機能はあったものの、ファイルキャッシュとして利用されることが多かったためにあまり有効ではなかった。
自動メモリ解放の設定には、「アイドル時に段階的に解放していくもの(gradual)」「全部を解放するもの(dropcache)」「自動メモリ解放機能の動作禁止(disable)」の3つの動作モードのどれか1つを指定する。また、シェルスクリプトを使うことで、キャッシュの解放ルールをカスタマイズすることができる。
ただし、スクリプトによるカスタマイズやgradualでのキャッシュ解放には、ディストリビューションがcgroup v2(Contrl Group Ver.2)に対応している必要がある。Control Groupとは、CPU時間やメモリなどの「資源」を制限・分離するためのLinuxカーネルの機能で、仮想マシンやコンテナ技術で利用されている。cgroupにはv1とv2があり、現状では両方を併用しているディストリビューションが多い。
cgroup v2がディストリビューションで利用できるかどうかは、以下のコマンドで調べることができる。
grep cgroup /etc/mtab
実行結果にcgroup v2を表す「cgroup2」があるかどうかを調べる。cgroupの機能は、sysファイルシステムにマウントされるため、マウンド結果を記録するmtabに情報がある。
ただし、自動メモリ解放を設定すると、上記のmtabのマウント項目など、システムの挙動が大きく変わる。設定前の段階では、cgroup v1とcgroup v2の両方が利用できる状態だったが、自動メモリ解放を設定すると、cgroup v2のみが有効となり、cgroup v1に依存しているプログラムがあれば動作がしなくなる。
自動ディスクスペースクリーンアップ
「自動ディスクスペースクリーンアップ」は、WSL2のLinux側ファイルシステムを格納する仮想ハードディスクファイル(vhdxファイル)の未使用部分を解放することで、ファイルサイズを圧縮する機能である。
容量可変(Dynamic)仮想ハードディスクファイルは、利用に応じて、物理ファイルサイズを拡張していくが、一回確保したファイル領域は、あとから未使用状態になっても開放されない。解放するためには、ファイルシステムやパーティション構造やVHDXの構造を理解して、ファイルシステム内の未使用領域が、VHDXファイルの末尾部分になるように変更した上で縮小処理をする必要があるからだ。
これまでは、仮想マシンでWindowsを動かし、VHDファイル内にWindowsが作るパーティションとNTFSによるファイルシステムを作った場合に限り、「最適化」(仮想ハードディスクの編集ウィザードの機能)などを利用して、未使用領域を開放できた。
「自動ディスクスペースクリーンアップ」は、おそらくExt4形式を理解して、未使用領域の物理ファイル領域を開放するものと考えられる。このコマンドに対応するため、wsl.exeに「--manage」オプションが追加され、WSLディストリビューションのext4.vhdxを「スパースVHD」ファイルに変換できる。
このスパースVHD機能に対応して、wsl.exeコマンドには、既存の容量固定VHDファイルを容量可変VHDファイルに変換する機能が搭載された。
wsl.exe --manage <ディストリビューション名> --set-sparse
ただし、WSL V2.0以前でも最近インストールしたWSLディストリビューションは、容量可変VHD形式になっているようだ。
この連載の記事
-
第466回
PC
PowerToysの最近の新機能には、複数アプリを指定位置に起動する「ワークスペース」や新規作成のカスタマイズがある -
第465回
PC
WindowsのPowerShellからBluetoothデバイスを調べる -
第464回
PC
Windows 10のサポート切れまで1年を切った さてWindows 10マシンをどうする? -
第463回
PC
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる -
第462回
PC
Windows Terminal Preview版でSixelグラフィックスを扱う -
第461回
PC
Copilot+ PCを買ってみたが、「今焦って買う必要はない」のかもしれない -
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ - この連載の一覧へ