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側はリンクされていないという実装でも対応が可能になる。
本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
-
第533回
PC
PCの世界ではすっかり存在感が薄くなった光学メディアをあらためて整理 -
第532回
PC
モニターの情報が含まれる「VESA EDID」をWindowsで調べる方法 -
第531回
PC
Windowsのコンソール上でUnix/Linuxの標準的なコマンドを動かす「Windows CoreUtils」 -
第530回
PC
Windows 11でタスクバーの位置の移動機能が復活するのは結局どうなった? プレビュー版の現状を見る -
第529回
PC
Windowsの標準スクリプト言語であるPowerShellの現状をあらためて紹介する -
第528回
PC
Windows 11の標準機能でメモリに問題がないかを診断する -
第527回
PC
Windowsがクラッシュする原因を究明する方法 AIを活用すると結構早い -
第526回
PC
今年6月にPCが起動しなくなる心配はないが、セキュアブートが機能しないとWindowsのセキュリティ機能は一部使えなくなる -
第525回
PC
6月以降「PCが起動不可能に?」と間違った騒がれ方をしている原因の「セキュアブート」とは? -
第524回
PC
Windows Insider Programが変化 チャンネルが3つになって整理される -
第523回
PC
AI傾倒に一息入れて、既存のWindowsの改良を宣言するMicrosoft タスクバーを画面の上下左右に移動可能に!? - この連載の一覧へ











