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側はリンクされていないという実装でも対応が可能になる。
この連載の記事
-
第424回
PC
Windowsの基本機能であるクリップボードについてあらためて整理 -
第423回
PC
PowerShellの今を見る 2つあるPowerShellはどっち使えばいい? -
第422回
PC
Windows 11の目玉機能が早くも終了、Windows Subsystem for Android(WSA)を振り返る -
第421回
PC
進化しているPowerToys LANで接続したマシンでキーボード/マウス共有機能などが追加 -
第420回
PC
Windowsプレビュー版に搭載されたsudoを試す -
第419回
PC
Windows Insider Previewが変わって、今秋登場のWindows 11 Ver.24H2の新機能が見えてきた? -
第418回
PC
Windows 11のスマートフォン連携は新機能が追加されるなど、いまだ進化している -
第417回
PC
Windows 11のスマートフォン連携機能をあらためて使ってみる -
第416回
PC
Windowsセキュリティ(Defender)をコマンドラインで扱う -
第415回
PC
ConvertFrom-Stringを使って、テキストデータをテンプレートで読み込む -
第414回
スマホ
Windows Subsytem for Linux(WSL)が昨年9月のアップデートでファイアウォール対応になった - この連載の一覧へ