WSL2におけるソフトリンク対応は実際どうなってる?
ここからは具体的に、NTFS上に作られたシンボリックリンクをWSL2からアクセスしてみよう。WSL2では、Win32側へのアクセスに9pプロトコルを使い、仮想的なネットワークを介して接続する。これは、WSL2が仮想環境にあり、直接NTFSをアクセスすることができないからだ。逆も同じで、Win32側からは、WSL2のExt4ファイルシステムを9pプロトコルを使う「ネットワーク共有フォルダ」としてアクセスする。
NTFS側にハードリンク、ソフトリンクを作り、これをWSL2側からlsコマンドなどでアクセスしてみる。まずはハードリンクだが、予め、NTFS上にハードリンクを作成しておく。Windowsでは、以下のコマンドを使うことでハードリンクしているファイルを表示させることができる。
なお、「比較.txt」は比較のためのハードリンクしていないファイルである。
fsutil hardlink list ファイル名
Linuxでは、ファイルをinodeと呼ばれるデータ(構造体)を複数使ってファイルやディレクトリを管理している、1つ1つのinodeには、inode番号が割り振られ、inode番号を使うことでinodeをアクセスできる。このため、inode番号をファイルを指定するために利用できる。
実際には、Linuxでのファイルアクセスは最終的にinode番号で実行されている。もし、ファイルが同じinode番号を持っていたら、それはハードリンクされた同一のファイルだと判定できる。Linuxでinode番号を表示させるには、lsコマンドに「-i」オプションを付ける。NTFS上のハードリンクのあるフォルダーでWSL2からlsコマンドを実行させると、同じinode番号が表示され、同一のファイルであることがわかる。
ソフトリンクでは、NTFS側にシンボリックリンク(ファイル、ディレクトリ)、ジャンクション(ディレクトリ)をそれぞれ、同一ドライブ、別ドライブとして作成した。別ドライブは、WSL2側ではマウントしていないため、リンク先が不明になるパターンである。
同様に、ここをlsコマンドで表示させてみる。
ls -lコマンドでは、各項目の先頭の1文字が対象のタイプを表し、“l”になっているものがシンボリックリンクである。NTFSシンボリックリンクもジャンクションもどちらもシンボリックリンクとして扱われている。また、リンク先を同時に表示する。矢印の後ろがリンク先で、項目が赤で表示されているのは、リンク先が見つからないものだ。WSL2側ではDドライブをマウントしていないため、リンク先がないように見える。
このアップデートにより、WSL2からでも、NTFS上のファイルやディレクトリを扱いやすくなった。ジャンクションとNTFSシンボリックリンクを同一視しているが、実際には区別する必要はなく問題はないだろう。なお、WSL2側からNTFS上でのシンボリックリンクの作成はまだ未完成で、なぜかジャンクションを作ってしまう。WSL1では、正しくNTFSシンボリックリンクを作っていたので、今後のアップデートで対応すると思われる。
この連載の記事
-
第429回
PC
Windows Updateの「利用可能になったらすぐに最新の更新プログラムを入手する」はオンにした方がいいか? -
第429回
PC
WindowsからWordPadが廃止! RTF(Rich Text Format)はどうなる? -
第428回
PC
Google/Bingで使える検索オプション -
第427回
PC
WindowsのPowerShellのプロファイルを設定する -
第426回
PC
WindowsでAndroidスマホをWebカメラにする機能を試した -
第425回
PC
無料で使えるExcelにWord、Microsoft 365のウェブ版を調べた -
第424回
PC
Windowsの基本機能であるクリップボードについてあらためて整理 -
第423回
PC
PowerShellの今を見る 2つあるPowerShellはどっち使えばいい? -
第422回
PC
Windows 11の目玉機能が早くも終了、Windows Subsystem for Android(WSA)を振り返る -
第421回
PC
進化しているPowerToys LANで接続したマシンでキーボード/マウス共有機能などが追加 -
第420回
PC
Windowsプレビュー版に搭載されたsudoを試す - この連載の一覧へ