NTFS上でLinuxのファイルシステムを実現するために必要な存在
WSLには前述のようにVolFsとDrvFsという2つの固有のファイルシステムがある。VolFsは、WSL内で動作するLinuxディストリビューションのOSイメージなどが記録される、LinuxのメインのファイルシステムをNTFS上に実現するものだ。まず、LinuxのファイルシステムとしてVFSの機能をすべて満たす必要があり、NTFSそのままでは利用できない。たとえば、ファイルに関するアクセス情報などもLinuxとWindowsでは違っている。
VolFsはNTFSの上にあるものの、WSLが利用しているあいだは、Windows側からアクセスされない前提で動作する。これは、Linuxのカーネルがファイルや関連情報のキャッシングなどを実行するため、リアルタイムに変更状態を反映していないことやWindowsのアプリケーションが必要な処理がなされないなどの問題があるからだ。
WSLは、Windowsの上にLinuxディストリビューションのバイナリファイルが動作できるLinux環境を構築するのが目的であるため、Linux自体の変更はないのが前提だ。違いは、LxCore.sysと呼ばれるソフトウェアが、Linuxカーネルの代わりになるだけで、それ以外のファイルはほとんどがx64/x86用のディストリビューションほぼそのままになっている。
なおWSLでは、登場初期にはVolFsをユーザーフォルダー以下に置いていたが、現在では、
%UserProfileAppData¥Local¥Packages¥[ディストリビューションフォルダー]¥LocalState¥rootfs
に置いて、複数のディストリビューションでも同じ場所を使わないようになっている。
DrvFsは、現在ではメタデータや作成者、作成者のグループIDといった情報を利用できるようになり、よりLinux的に利用できるようになった。たとえば、Windows側では読み書きが可能でも、WSL側からはリードオンリーといった動作が可能になった。
また、Linuxのファイルシステムでは、ファイルやフォルダー名の大文字小文字の区別(ケースセンシティビティ)があるのが普通で、現在のWSLでは、DrvFs上のフォルダーに関して、ケースセンシティビティの設定ができようになっていて、区別する/しないを選択できる。なお、このケースセンシティビティは、サブフォルダーに引き継がれるようになった。 こうしたファイルシステムに対する処理は、LxCore.sysがLinuxカーネルの代わりに引き受け、最終的にNTカーネルが持つ、NTFSの機能として実行される。
このときNTFS側で、ファイルフォルダーごとにLinuxのメタデータなどを管理する必要がある。たとえば、Linuxでは、セキュリティのために機密性の高い情報の入ったファイルを他人に読めないようにしていないと動作しないものなどがあるが、こうしたメタデータが保存されないと、WSLを再開したときにプログラムが動作出来なくなる可能性がある。
このため、VolFsやDrvFsでは、NTFSがもつ「$EA/$EA_INFOMATION」(以下、EA)というアトリビュート(ストリームと呼ぶこともある)にLinux側のメタデータなどを記録する。EAは、NTFSのメタデータの一部ではあるが、これはもともとOS/2のHPFSというファイルシステムをサポートするために作られたもので、NTFSは通常、このアトリビュートを操作しない。簡易にファイルに対して$EAや$EA_INFOMATIONといったアトリビュートがあるかどうかは、fsuti.exeコマンドを使い、
fsutil.exe file layout 対象ファイルパス
で表示させられる。
VolFsやDrvFsは、必要な情報をEAに入れておく。また、VFSがサポートするシンボリックリンクといったファイル構造にかかわる機能もEAに情報を格納することで、永続的に利用可能としている。
DrvFsもVolFsも、ファイルとディレクトリは、NTFSのそれと完全に対応している。LinuxのシンボリックリンクリンクをNTFSのシンボリックリンク(ソフトリンク)に対応させることは不可能ではないが、NTFSでは、ソフトリンクの作成には、管理者権限が必要であるため、WSLからは常に設定できるとは限らない。
しかし、WSLからだけリンクが存在してればいいので、NTFS側はリンクされていないという実装でも対応が可能になる。
この連載の記事
-
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 - この連載の一覧へ