Microsoft Corporation

Microsoftは「Windows Subsystem for Linux: File System - Seth Juarez - Channel 9」において、Windows Subsystem for Linuxにおけるファイルシステムの内部構造について解説した。WindowsカーネルでLinuxソフトウェアをネイティブに実行する機能「Windows Subsystem for Linux」ではNTFSを基盤となるファイルシステムとして利用している。どのような仕組みでこの機能を提供しているのかが動画で紹介されている。

「Windows Subsystem for Linux」ではLinuxバイナリがシステムコールを実行すると、カーネルモードで動作するドライバLXCORE.SYSに処理が飛ぶようになっている。最初はエントリポイントであるシステムコールレイヤが呼び出され、ファイルシステムに関するシステムコールだった場合にはVFSのレイヤがコールされる。そこから先は要望に応じてVolFS、DriverFS、ProcFSなどのレイヤに処理が移り、そこからWindowsカーネルのシステムコールに変換されてからWindowsカーネルに処理が移ることになる。Linuxカーネルで実装されている機能の一部をLXCORE.SYSが実装していることになる。

「Windows Subsystem for Linux」を利用するとLinuxファイルシステムのマウント以外にも、/net/c/のようにWindowsのドライブがファイルシステムとしてマウントされていることに気がつく。前者をVolFSが、後者をDriverFSが管轄している。VolFSではLinuxのファイルシステムが必要とする各種情報(持ち主、ファイルの種類、パーミッションなど)をNTFSの拡張属性として記録し、Linuxファイルシステムと同様に振るまうようにしている。一方、DriverFSではこうしたことを行っておらず、あくまでもNTFSのファイルが見えるといった程度になっている。

Windows側の開発環境を利用して、Ruby on Railsのアプリケーションを開発した場合、プロジェクトデータはWindows側のファイルシステムに存在することになる。しかし、実行するには「Windows Subsystem for Linux」の中でLinuxファイルステム側(VolFS)にデプロイしてあることが好ましい。動画では今のところこれを解決する方法はなく、直接コピーして使ってほしいと説明している。