Windows10: WSLのファイルシステムはどこにある?その3

先日、WSL2のファイルシステムが、以前はnftsファイルシステムの上に直接linuxコマンドが置かれていたものが、仮想ハードディスクに置き換わっているとメモしました。

Linux → Windows ファイルをアクセスする場合、Windowsドライブは、/mnt/<ドライブレター> としてアクセスできるので、Linux側からWindowsのファイルをアクセスすることはわかりやすいのですが、これが逆方向になると、Linuxのルートファイルシステムがどこにあるのかを探す必要がありました。

では、WindowsからLinuxファイルシステムにファイルをコピーする場合は?

以前のように、ユーザーフォルダーの AppData下にファイルとして見える場合は、(パスが長くなることさえ気にしなければ)アクセスしやすいのですが、ファイルシステムが仮想ハードディスクとなってしまった後は、どうすればいいのでしょうか?

もちろん、GUIからはアクセスできますが、DOSやPowershell コマンドラインからプログラムとしてアクセスしたい場合はどうしたらいいの?例えば、Linux側のログをWindows側で処理したり、Windows側でテキストタイプの設定ファイルを編集した後、Linux側に保存したいような場合です。ファイルが1個,2個ならGUIから手作業でアクセスすることもできますが、ファイル数が100個、1000個となると、コマンドラインから処理したいものです。

調べてみたところ、仮想ハードディスク上にファイルシステムが置かれている場合のアクセス方法は二つ。

  1. \\wsl.localhost\debian や \\wsl.localhost\ubuntu のように、ネットワークドライブとしてアクセスする。Linuxファイルシステムがある仮想ハードディスクのロケーション
    C:\>dir \\wsl.localhost\debian
    ドライブ \\wsl.localhost\debian のボリューム ラベルがありません。
    ボリューム シリアル番号は 0000-0000 です
    
    \\wsl.localhost\debian のディレクトリ
    
    2022/02/24 21:16 <DIR> .
    2022/02/24 21:16 <DIR> ..
    2022/02/24 23:39 <DIR> bin
    2021/10/03 18:15 <DIR> boot
    2022/12/10 03:24 <DIR> dev
    2022/12/10 03:24 <DIR> etc
    2022/02/24 21:16 <DIR> home
    2022/12/01 23:57 644,432 init
    2021/12/09 17:29 <DIR> lib
    2021/12/09 17:28 <DIR> lib64
    2021/12/09 17:28 <DIR> media
    2022/02/24 21:16 <DIR> mnt
    2021/12/09 17:28 <DIR> opt
    2022/12/10 03:24 <DIR> proc
    2022/02/24 23:29 <DIR> root
    2022/12/10 03:24 <DIR> run
    2022/02/24 23:39 <DIR> sbin
    2021/12/09 17:28 <DIR> srv
    2022/12/10 03:24 <DIR> sys
    2022/12/02 00:17 <DIR> tmp
    2021/12/09 17:28 <DIR> usr
    2021/12/09 17:28 <DIR> var
    1 個のファイル 644,432 バイト
    21 個のディレクトリ 353,384,366,080 バイトの空き領域
  2. 一旦、🐧Linux\Debian にドライブレターを割り当てる
    C:\>dir q:
    ドライブ Q のボリューム ラベルがありません。
    ボリューム シリアル番号は 0000-0000 です
    
    Q:\ のディレクトリ
    
    2022/12/08 18:13 <DIR> mnt
    2022/10/01 19:54 <JUNCTION> lib [...]
    2022/10/01 19:54 <JUNCTION> sbin [...]
    2022/12/10 02:55 <DIR> .
    2022/12/10 02:55 <DIR> run
    2022/10/01 19:54 <JUNCTION> libx32 [...]
    2022/12/08 18:14 <DIR> home
    2022/10/01 19:54 <JUNCTION> bin [...]
    2022/10/01 19:54 <DIR> var
    2022/12/08 18:13 <DIR> tmp
    2022/10/01 19:54 <DIR> media
    2022/10/01 19:54 <JUNCTION> lib32 [...]
    2022/12/10 03:03 <DIR> dev
    2022/10/01 19:54 <DIR> usr
    2022/12/10 02:55 <DIR> etc
    2022/12/10 02:55 <DIR> proc
    2022/10/01 19:54 <JUNCTION> lib64 [...]
    2022/12/10 02:55 <DIR> ..
    2022/12/08 18:13 <DIR> lost+found
    2022/10/01 19:54 <DIR> root
    2022/10/01 19:54 <DIR> opt
    2022/12/10 02:54 <DIR> sys
    1970/01/01 09:00 1,939,720 init
    2022/09/03 21:10 <DIR> boot
    2022/10/01 19:54 <DIR> srv
    7 個のファイル 1,939,770 バイト
    18 個のディレクトリ 1,025,818,898,432 バイトの空き領域

ドライブレターを割り当てると、その後はパスの表現方法が短くなるので、見やすいとは思います(上の例では、Q: に Debian をマップしました)が、どのPCでも同じドライブレターにマップできるとは限らないので、スクリプトを書くときに注意が必要でしょう。私の場合、Windows側からLinuxをアクセスする必要はなさそうですけどね。

ファイルシステムがWindowsフォルダーとして見えなくなったので、Windowsから見た場合のアクセス速度向上には役立っているかも。インデックス対象からは外れていると思う。(そうあってほしい。)

コメントを残す