【WSL】LinuxからWindowsのファイルにアクセスする

WSL(Windows Subsystem for Linux)バージョン2(WSL2)で構築したLinux環境において、LinuxからWindowsのファイルにアクセスする方法を紹介します。
LinuxからWindowsのファイルにアクセスする
ファイルの参照
WSLでは、ドライブ文字(CやDなど)の割り当てられているローカルの固定ドライブ(ハードディスクやSSDなど)は、自動的にマウントされます。以下は、mountコマンドの結果です。
1 2 3 4 5 6 7 | wsladmin@hostname:~$ mount (途中省略) C:¥ on /mnt/c type 9p (rw,noatime,dirsync,aname=drvfs;path=C:¥;uid=1000;gid=1000;symlinkroot=/mnt/,mmap,access=client,msize=65536,trans=fd,rfd=5,wfd=5) (以下省略) |
マウント先は「/mnt/(ドライブ文字)」となるので、Cドライブの場合「/mnt/c」です。以下は、エクスプローラーで見たドライブの状態です。固定ドライブ(以下の場合、内蔵ハードディスク)である「ローカルディスク(C:)」のみがマウントされています。固定ドライブ以外のドライブ(以下の場合、D:~T:)については、自動的にマウントされません。
- 内蔵ハードディスク(C:)
- 内蔵カードリーダーに割り当てられたドライブ(D:~H:)、※F:にSDカード挿入済み
- USBメモリー(I:)
- DVDドライブ(Q:、R:)
- 共有フォルダーに割り当てられたドライブ(S:、T:)
mountコマンドの結果を見ると、ファイルシステムのタイプが「9P」となっています。この「9P」は「Plan 9 Filesystem Protocol」と呼ばれる方式で、ネットワーク経由でファイルにアクセスするためのプロトコルです。WSL2では、Hyper-Vハイパーバイザー上の仮想マシン(Lightweight Utility VM)内で、VM Workderプロセス(vmwp.exe)が9Pサーバーとして動作しており、このサーバーを経由して、Windowsのファイルへアクセスします。
マウント
自動的にマウントされない固定ドライブ以外のドライブをマウントする方法です。以下は、USBメモリー(I:)の場合です。別のドライブをマウントする場合は「I」、および「i」を別のドライブ文字に置き換えてください。
先に、マウントポイントとなる「/mnt/i」を作成します。
1 | wsladmin@hostname:~$ sudo mkdir /mnt/i |
対象のドライブをマウントします。WSL2では、ファイルシステムに「drvfs(ファイルシステム相互運用プラグイン)」を指定することで、自動的に9P(Plan 9 Filesystem Protocol)が使われます。ドライブ文字は「I:」を指定します。
1 | wsladmin@hostname:~$ sudo mount -t drvfs I: /mnt/i |
mountコマンドで、マウントの状態を確認します。
1 2 3 4 5 6 7 8 | wsladmin@hostname:~$ mount (途中省略) C:¥ on /mnt/c type 9p (rw,noatime,dirsync,aname=drvfs;path=C:¥;uid=1000;gid=1000;symlinkroot=/mnt/,mmap,access=client,msize=65536,trans=fd,rfd=5,wfd=5) I: on /mnt/i type 9p (rw,relatime,dirsync,aname=drvfs;path=I:;symlinkroot=/mnt/,mmap,access=client,msize=65536,trans=fd,rfd=3,wfd=3) (以下省略) |
使用後は、アンマウントします。
1 | wsladmin@hostname:~$ sudo umount /mnt/i |