このページの本文へ

Windows Info 第157回

「WslFs」はWindows Subsystem for Linuxでのファイルシステムを置き換える存在!?

2019年01月27日 10時00分更新

文● 塩田紳二 編集● ASCII編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

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の機能として実行される。

WSLでは、アプリケーション側からのファイルアクセス要求は、すべてVFSに対する処理となり、LxCore.sysがNTFSなどのNTカーネル機能に変換する

 このとき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 対象ファイルパス

で表示させられる。

$EA/$EA_INFOMATIONの存在を確認するには、Windows標準付属のfsutil.exeが利用できる

 VolFsやDrvFsは、必要な情報をEAに入れておく。また、VFSがサポートするシンボリックリンクといったファイル構造にかかわる機能もEAに情報を格納することで、永続的に利用可能としている。

 DrvFsもVolFsも、ファイルとディレクトリは、NTFSのそれと完全に対応している。LinuxのシンボリックリンクリンクをNTFSのシンボリックリンク(ソフトリンク)に対応させることは不可能ではないが、NTFSでは、ソフトリンクの作成には、管理者権限が必要であるため、WSLからは常に設定できるとは限らない。

 しかし、WSLからだけリンクが存在してればいいので、NTFS側はリンクされていないという実装でも対応が可能になる。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン