このページの本文へ

前へ 1 2 次へ

Windows Info 第161回

Win32側からWindows Subsystem for LinuxのVolFsへのアクセスが可能に

2019年02月24日 10時00分更新

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

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

Windows側から、WSLのファイルにアクセスする仕組みが追加

 4月に配布予定の次期Windows 10機能アップデートである「19H1」(Windows 10 Ver.1903)には、Windows Subsystem for Linux(WSL)に新機能が搭載される予定だ。

今年4月から配布予定の19H1では、Win32側からWSLのVolFsをアクセスする機能が搭載される予定だ

 現在配布中のプレビュー版ビルド18342にその機能が搭載されている。簡単に言えば、Win32側からWSLのファイルシステム(VolFs)をアクセスする機能だ。ただし、LinuxとWindowsではファイルのアクセス管理方法がちがうため、ネットワーク共有の仕組みを使う。

 形式としては、Windows Explorerのネットワークの下に仮想的なwsl$というホストが見え、その下にVolFsが見えるようになる。この新機能には名前がないため、ここでは仮にホスト名をすべて大文字にした「WSL$」と呼ぶことにする。

 まずは、簡単にWSLのファイルシステムについて復習しておく。WSLにはVolFsとDrvFsの2つのファイルシステムがある。VolFsは、Linux側のストレージをNTFSの上に仮想的に実現するもの。Linux側からは、VFS(仮想ファイルシステム)を経由した通常のファイルシステムのように見える。しかし実際には、ファイルはNTFSの上にあり、ユーザーフォルダーのディストリビューションパッケージの部分に記録されている。

具体的には、

%LOCALAPPDATA%\Packages\[WSLディストリビューションフォルダ-]\LocalState\rootfs

にある。しかし、LinuxとWindowsではファイルアクセス管理が異なるため、Win32側からのVolFs実ファイルへのアクセスは推奨されず、アクセスすれば結果は保証されない。最悪の場合では、ファイルシステムを壊してしまう可能性がある。機能的にファイルへのアクセスは禁止されているわけではないが、「触るな」というのが実際のところだろう。

 このため、これまではWin32側からWSLのVolFs内にあるファイルをアクセスする方法は提供されてこなかった。しかし、WSL側からはWin32側のファイルにアクセスできる。これを可能にするのがDrvFsというものだ。

 WSLからは、/mnt/cディレクトリ以下にCドライブが見えるようになっている。実質上、このDrvFs側にファイルを置くことで、WSLとWin32の間で共同作業をすることはできた。ただし、WSL側とwin32側では、同じファイルでもパスが違うため、ファイルパスを渡す場合には変換の必要があった。

 今回実装されたWSL$は、Windowsのリダイレクタドライバーを利用し、仮想的なホストwsl$を見せる。実際、WSL側では、サーバーが動作し、プロセス間通信(AF_UNIX)を使って、Win32側のリダイレクタードライバーとWSL側のサーバー(9Pというプロトコルを使うため仮に9Pサーバーと呼ぶ)が通信し、VolFs側のファイルをアクセスさせる。

 なお、WSL側で9Pサーバーが動作するため、wsl$ホストは、WSLが動作しているときにしか見えない。Win32とWSLとの間のファイルアクセスとそのときに使うファイルシステムなどを整理したのが、以下の図だ。これまで、WSL$の部分が欠けていたわけだ。

WSLには、Linuxのファイルシステムに相当するVolFsとWin32側をアクセスするためのDrvFsがあったが、Win32側からはWSLのファイルシステムにアクセスする手段がなかった。これを可能にするのがWSL$である

 今回のビルド18342では、WSLを起動し、エクスプローラーのネットワークを開くと、wsl$というホストが見える。その下にディストリビューション名が並び、これを開くと、個々のWSL内で動作しているディストリビューションのファイルシステムが見える。

 注意したいのは、WSLが起動していないと、wsl$自体が見えなくなることだ。なお、来年春に配布予定の「20H1」(Windows Ver.2003)のプレビュー版ビルド18836にも同様の機能があるが、こちらは、エクスプローラーに「Linux」アイコンが新設されており、その下にディストリビューションへのリンクが見える。

すでにプレビューが開始された20H1(Windows 10 Ver.2003)では同様の機能を搭載するも、エクスプローラーのツリー領域「Linux」アイコンが表示される

 wsl$ホスト以下のディストリビューションごとのディレクトリーを見ると、VolFsによるファイルシステムだけでなく、/procなどの疑似ファイルシステムも見えている。

WSL$では、VolFsのみでなく、Linuxの/procや/sysなどの疑似ファイルシステムを含んだツリーにアクセスが可能だ

 マウントされているファイルシステムを見るとわかるが、Linuxの/procや/sysは通常のファイルシステムではなく、カーネルの内部データを見せるための擬似的なファイルシステムになっている。それぞれproc、sysfsという特殊なファイルシステムになっている。

/procや/sysは、ファイルシステムのように見えるが、実際には、カーネル内の情報を階層ディレクトリ形式で表示する擬似的なファイルシステムである

 なお、WSL$は、Windows側から見れば、あくまでもファイル共有である。たとえば、WSL$へのアクセスは、

\\wsl$\Ubuntu\home

などのようにUNC(Universal Naming Convention)を使ってできる。

 また、cmd.exeは、UNC(//wsl$/……といったネットワークパス)をファイルパスのように扱うことはできるが、cdコマンドを実行することはできない。

 本来、cmd.exeからローカルフォルダーのように扱うには、ドライブ文字を割り当てる必要があるのだが、現時点では、WSL$にドライブ文字を割り当てることはできないようだ。なお、powershellは、UNCをカレントディレクトリに設定することが可能である。また、WSL$経由でのアクセスは可能だが、依然としてVolFsを直接操作することは禁止されたままだ。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

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

ピックアップ

ASCII.jp RSS2.0 配信中

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