SupportWSLのファイルシステム解説。LinuxはPOSIX互換システムなのでinodeベースのファイルシステムが使われていて、VFSで実際のファイルシステムとアプリケーションAPIから見えるファイルシステムと分離する仕組みになっており、Windowsのファイルシステムとは全然違うわけです。このため、普通にやればWSL用にベアメタル上にパーティションを作ってそこにExt3なりLinuxのファイルシステムのドライブを構築するのが一番無難なわけですが、その作業自体煩わしいですしWSLではそんな普通な事はしていないわけです。逆に見ればVFSの仕組みを使って、アプリケーションに対してNTFSを上手くinodeベースのファイルシステムに見せかける事が出来れば、アプリケーション側でファイルシステムの違いに対応する必要がなくなります。このため、ほぼ完全にinodeベースのLinuxファイルシステムをエミュレートするVolFsとNTFSファイルシステムのディレクトリ、ファイルをinodeベースのファイルシステムに見せかけるDrvFSが作られました。以下内容を要約してみます。VolFsWSLが使用するプライマリファイルシステムがにvolfsです。Linuxのシステムファイル、ならびにLinuxのホームディレクトリの内容を格納するために使用されます。このように、volfsはLinuxのVFSをほとんどサポートし、Linuxのパーミッション、シンボリックリンク、FIFOは、ソケット、およびデバイスファイルを含め、提供しています。volfsは、バッキングストレージとして%LocalAppData%\lxss\rootfsを使用して、VFSルートディレクトリをマウントするために使用されます。マウントし、/homeとして%LocalAppData%\lxss\homeがマウントされます。これはWSLがアンインストールされてもそれらのフォルダは削除されないので、ユーザーファイルを保護することが出来ます。これらのすべてのポイントはストレージが、Windowsのユーザーフォルダ内のディレクトリを使用してマウントされていることに注意してください。各Windowsユーザーは、自分のWSL環境を有しているので、Linuxのルート権限を持っているし、他のWindowsユーザーに影響を与えることなく、アプリケーションをインストールすることができます。objectsWindowsは全くinodeとそれに関連する概念がないので、volfsはiノードに、Windowsのファイルオブジェクトへのハンドルを保持する必要があります。VFSがルックアップコールバックを使用してあたらしい要求をしたとき、VolFsは親inodeからのハンドルを使用して、相対的に子の名前を取得して、新しいinodeのハンドルを取得します。これらのハンドルはファイルへの読み書きのアクセス無しに開かれ、メタデータ要求に対してのみに使用されます。features簡単にまとめるとNTFSで足りていないものはVolFsがエミュレーションするか機能を提供すると言う事です。NTFSに無いファイルのメタデータはNTFSのEA(EAレコード)として保存されます。Windowsvolfsファイルが上記のディレクトリにWindows上で通常のファイルに格納されていますが、Windowsとの相互運用性がサポートされていません。このためWindowsのエディタから直接volfsのファイルを編集してしまうと、Windowsエディタの多くがEAをサポートしていないので、保存時にEAを削除して問題を起こしてしまいます。DrvFsWindowsとの相互運用性を容易にするために、WSLがDrvFsファイルシステムを使用しています。/mnt/d等としてマウントします。現在、NTFSとReFsがサポートされています。permissions簡単にまとめると以下のようになります。DrvFsではWindowsのファイルアクセス権限が使用されるよbash.exeの実行権限に依存するのでsudoしてもアクセスできない場所があるよ。UACの昇格の有る無しでアクセスできる出来ないが発生するよ。アクセス権限が必ずしも1:1で対応できているわけでないよ。一応計算して出来るだけ対応するようにしている。sensitivityまとめると。DrvFsはNTFSの元々の機能を使用して大文字と小文字を区別したファイルをサポートしているけど、Windowsのアプリケーションは区別できないから注意してね。ドライブのルートでは禁止しているので必ずその下のディレクトリを作ってね。linksNTはシンボリックリンクをサポートしていますがWSLによって作成されたシンボリックリンクはWindowsでは意味を持たない/procのようなパスを指している可能性があるため、私たちはこのサポートに頼ることができませんでした。NTは、シンボリックリンクを作成するには、管理者権限が必要です。このため、我々は別の方法を見つけなければなりませんでした。VolFsとは異なり、我々はファイルがDrvFsにシンボリックリンクであることを示すためにEAに頼ることができませんでした。その代わりに、WSLは、シンボリックリンクを実現するために新しいリパースポイントを使用しています。その結果、これらのリンクは、WSLの内側にのみ機能し、エクスプローラやcmd.exeのようなWindowsのコンポーネントから使用する事は出来ません。(ワオ!)また、ReFsではリパースポイントのサポートがないので、シンボリックリンクのサポートがないことに注意してください。NTFSでは完全にWSLのシンボリックリンクをサポートされます。WindowsVolFsとは異なり、DrvFsは、任意の追加情報を格納しません。代わりに、すべてのinodeの属性が照会ファイル属性、有効なアクセス許可、およびその他の情報によって、NTで使用される情報から導出されています。DrvFsはまた、常にWindowsプロセスは、ディレクトリの内容を変更した場合でも、正しい、最新の情報を提供し保証するために、ディレクトリエントリのキャッシュを無効にします。このように、DrvFsは彼らに動作している間、Windowsのプロセスはファイルに何ができるかに制限はありません。DrvFsはファイルに対してWindowsのデリートセマンティクスを使用するので、ファイルが開かれている場合にはリンクを解除することが出来ません。SysFsLinuxでのように、これらの特殊なファイルシステムは、ディスク上に存在するファイルを表示するのではなく、プロセス、スレッド、およびデバイスについてのカーネルによって保持される情報を表すものではありません。読んだときにこれらのファイルは、動的に生成されます。いくつかのケースでは、ファイルの情報がlxcore.sysドライバ内部に完全に保持されます。このようなプロセスのCPU使用率などの他の例では、WSLはこの情報のためのNTカーネルを照会します。Windowsのファイルシステムとここには相互作用はありません。まとめ今後も改善していくのでGitHub等でフィードバックしてください。感想もうなんかお疲れ様でしたとしか言いようが無いwただシンボリックリンクに関してはやはりNTFSの実装が中途半端すぎた感じですね。このサイトの使用を継続することで、その使用に同意したとみなされます。コントロール方法を含む詳細についてはこちらをご覧ください。キャンセル投稿を送信できませんでした。メールアドレスを確認してください。メール送信チェックに失敗しました。このブログではメールでの投稿共有はできません。%d人のブロガーが「いいね」をつけました。