Windows Insider ProgramのDevチャネルで公開されているWindows 10の開発バージョンからWSL 2の新機能を見ていこう。wsl.exeがWindows 10の標準コマンドになり、Linuxディストリビューションのインストールが簡単になるなど、大きな変化がある。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Windows Insider ProgramのDevチャネル(旧ファストリング)では、WSL 2の新機能が公開されている。これらは、2021年春に提供予定の機能アップデート「Windows 10 バージョン21H1(以下21H1)」での搭載が予定されている。本稿では、Devチャネルで公開されているプレビュー版から、2021年リリース予定のWSL 2の姿を予想する。今回は、正式提供前であるため、主要な機能概要のみを解説し、それぞれの詳細や設定方法などについては、正式版が公開されてから解説する。
また本稿では、「Windows Subsystem for Linux」の「バージョン2」を「WSL 2」と略し、以前の「バージョン1」を「WSL 1」と略す。特にバージョンを指定しない場合には、「WSL」と表記する。WSLが動作しているWindows 10側をホストまたはWin32側と呼び、WSL内で動作しているLinuxを「WSLディストリビューション」とする。
WSLディストリビューションは複数あるため、WSLディストリビューション内のコマンドとして記事中で示したものが必ずしも、全てのWSLディストリビューションに当てはまるとは限らない点にも注意してほしい。本稿ではWSLディストリビューションとして「Ubuntu 18.04」を利用している。
プレビュー版で公開された強化機能は、WSL 2環境に関するもののみである。WSLの標準バージョンがWSL 1からWSL 2になったこと、Windows 10 May 2019 Update(バージョン1903)とNovember 2019 Update(バージョン1909)でもWSL 2が利用可能になったことなどから、今後はWSL 2がWSLの利用主体であり、開発の中心となると思われる。
既に一般消費者向けのWindows 10 HomeやProでは、2020年12月でWindows 10 May 2019 Update のサポートが終了しており、企業向けのEnterpriseエディションなどは、移行期の特例で30カ月に延長されたWindows 10 April 2018 Update(バージョン1803)やOctober 2018 Update(バージョン1809)はサポートが継続されているものの、それも2021年5月までである。そういうわけで現行のWindows 10のほとんどが、WSL 2の稼働が可能なバージョンである。WSL 1は、WSL 2がどうしても利用できない場合の選択肢ということになるだろう。
Devチャネルで原稿執筆時点での最新版は、2021年1月6日(現地時間)に公開されたプレビュービルド21286である。これまでDevチャネルで公開された新機能の幾つかは、Windows 10 May 2020 Update(バージョン2004)やOctober 2020 Update (バージョン20H2)に取り込まれたが、WSL 2に関してはOctober 2020 Updateでのアップデートはなかった。改良点などに関しては、以下の記事を参考にしてほしい。
May 2020 Update公開以後にDevチャネルで公開されたプレビュー版のWindows 10でのWSL 2関連の変更点(バグ修正などは除く)は、以下のようなものがある。
これまでWSL 1と現時点のWSL 2のインストールでは、[コントロールパネル]の[プログラムと機能]−[Windowsの機能の有効化または無効化]やDISMコマンド、PowerShellを使ってインストール(有効化)を行う必要があった。wsl.exeは、このときにインストールされ、WSLの制御などを行っていた。
しかし、現在Devチャネルで配布されているプレビュー版では、標準のWindows 10インストールイメージにwsl.exeが含まれており、wsl.exeを使って、WSLの有効化が可能になった。
October 2020 Update (バージョン20H2)までは、WSLを有効化した後、Microsoft StoreからLinuxディストリビューションをインストールし、その後初期設定を行う必要がある。しかし、プレビュー版のwsl.exeでは、WSLのインストールと同時にWSLディストリビューションもインストールできるようになった。これまでと比べると、コマンド1つの実行で済むため、WSL利用までの手間が大幅に簡略化された。
追加されたオプションは、「--install」で、以下のような書式で使う。
wsl.exe --install --distribution <WSLディストリビューション名>
上記のコマンドでは、WSLが未インストールであれば、これをインストールし、既にインストールされているならば、指定のWSLディストリビューションをインストールする。また、「--distribution」は、「-d」と指定することも可能だ。
インストールが可能なWSLディストリビューション名を調べるため、もともとある「--list(-l)」オプションに「--online(-o)」オプションが追加されて、WSLのインストール前にコマンドラインによって、Microsoft Storeで配布中のWSLディストリビューションが表示できるようになった。
初回のインストールが終了すると、システムの再起動が必要になる。再起動後、もしくは2回目以降のディストリビューションのインストール後には、指定したWSLディストリビューションの初期設定コンソールが開く。ここでユーザー名などを設定すると、WSLが起動する。
WSL 2用のLinuxカーネルは、Windows Updateで配布されるようになっている。これは、October 2020 Update (バージョン20H2)でも有効だ。ただし、それには[Windowsの設定]アプリの[更新とセキュリティ]−[Windows Update]画面で[詳細オプション]を開き、「Windowsの更新時に他のMicrosoft製品の更新プログラムを受け取る」を「オン」にする必要がある。
また、Windows Updateであるため、GUI側で更新操作を行わないとLinuxカーネルの配布が開始されないことがある。これがプレビュー版では、wsl.exe --updateコマンドで、Linuxカーネルのアップデートを要求することが可能になった。
WSLでは、DrvFs(Windows 10のボリュームをマウントして、Windows 10のファイルにアクセス可能とする仕組み)でWin32側のドライブをマウントすることが可能な他、仮想ハードディスクファイル(VHDX)によるネイティブファイルシステム(標準はext4形式)を持つ。
ただし、ネイティブファイルシステムは、Win32のボリューム内(C:ドライブのユーザーフォルダ以下)にあるため、Win32側のストレージ空き容量に制限を受ける。しかし、本格的な利用を考えると、さらにファイルスペースが必要になることもあるだろう。
また、DrvFsによるWin32側ファイルシステムへのアクセスはあまり速くない。これは、「P9」と呼ばれるプロトコルを使ってネットワークドライブのような形でアクセスが行われているためだ。このあたりは、Windows 10 The Latest「前バージョンから大幅に性能向上した新Linux環境『WSL 2』の実力を探る」を参照してほしい。
こうした問題に対処するため、現在のプレビュー版では、ext4でフォーマットした外付けディスクや仮想ハードディスクファイル(VHDXファイル)などをマウントする機能が搭載された。これにより、WSL 2は、Win32側のドライブとは別に大きなファイルスペースが利用できるようになる。
ファイルシステムは、ext4などのLinuxネイティブのファイルシステムが利用できるため、DrvFsでWin32側ドライブをアクセスするよりも高速なアクセスが可能だ。なお、対応しているファイルシステム形式は、WSL 2のLinuxカーネルに組み込まれているext4などのネイティブファイルシステムのみで、FUSE(File System in User Space:ユーザー空間で動作するファイルシステムドライバの機構)など、カーネル外にモジュールがあるファイルシステムには対応していない。
多くのLinuxディストリビューションでは、NTFSのマウントは、FUSEを使って実装されていることが多いため、この方法でNTFS形式のドライブを利用することはできない。もっとも、Win32側で認識されているドライブであれば、DrvFsの機能を使ってWSLディストリビューション内からマウントが可能だ。
現状のプレビュー版には幾つかの制限事項がある。プレビュー版では、Win32側でwsl.exeコマンドを使う。ここで、「DeviceID」(wmicコマンドなどで表示が可能)を使って、WSL 2で使う外部ディスクなどを指定しておく。
WSL 2を起動すると、wsl.exeコマンドで指定したドライブがLinuxのブロックデバイスとして認識され、マウントされた状態になる。この機能のため、wsl.exeには「--mount」オプションが追加されている。これを使うことで、WSL2で利用する物理ドライブを指定することが可能だ。
まずは、マウントする外部ディスクなどを接続した状態でwmicコマンドを使い、DeviceIDを調べる。ドライブのDeviceIDは、「\\.\PHYSICALDRIVE<数字>」という形式になっており、末尾の数字だけが変わる。
wmic.exe diskdrive list brief
PowerShellならGet-Diskコマンドレットで得られる「Number」プロパティがDeviceID末尾の数字に対応している。
得られたDeviceIDを使って「wsl.exe --mount」コマンドを実行する。ただし、この操作には管理者権限が必要になる。また、複数パーティションを持つドライブの場合、パーティションを指定する必要がある。
wsl.exe --mount <DeviceID> --partition 1
その後WSLディストリビューションを起動すれば、外部ドライブを「PHYSICALDRIVE1p1」のようにDeviceIDとパーティション番号を組み合わせたディレクトリ名を使って「/mnt/wsl/PHYSICALDRIVE1p1」にアクセスできるようになる。なお、「--bare」オプションを使うと、WSL側では、ブロックデバイスのみが認識された状態でマウントされない状態となるため、自分でマウントポイントなどを指定してmountコマンドを実行できる。
この機能は、インストールしてある全てのWSLディストリビューション(コマンド実行前に起動していたものも含む)で有効になる。また、「wsl.exe --umount」でアンマウントする場合には、WSLディストリビューションが停止している必要がある。これには、個別にWSLディストリビューションを閉じるか、「wsl.exe --shutdown」コマンドを使う。
Copyright© Digital Advantage Corp. All Rights Reserved.