相互運用の制限
日々アップデートされる「WSL」により、「Windows」環境と「WSL」上に構築した「Ubuntu」環境間で相互運用性が高まり、ユーザーはあまり意識することなくお互いの環境にインストールされているアプリを連携して活用できるようになりました。今後さらに相互運用性の向上及び多くの改善がなされていくことでしょう。
仕掛けが必要
そもそも「Windows」と「Ubuntu」は構造が大きく異なるOSです。「WSL」により「Windows」は「Linux Kernel」の機能を提供できるようになり、「WSL」上に本物の「Ubuntu」を構築できるようになりました。
しかし「Windows」と「Ubuntu」の双方から利用される共有・共通的なリソース内でOSの違いを吸収するには、それ相応の仕掛けが必要になります。
ファイルの配置場所
共有リソースの一つにストレージ(ファイルの配置場所)があります。「Windows」が使用するストレージは「NTFS」でフォーマットされたファイルシステム(ボリューム)です。
「WSL」はこのファイルシステム内に「Ubuntu」のファイルを配置します。
「Ubuntu」が要求するファイルシステムの機能のいくつかは、「NTFS」のファイルシステムには存在しない機能です。
例えば「inode」がこれに該当します。
NTFSの拡張属性
そこで「WSL」は、「NTFS」の拡張属性を利用して「Ubuntu」が要求するファイルシステムの機能を実現しています。「NTFS」の拡張属性は「WSL」のために新規に用意された仕組みではなく、以前から存在する仕組みです。
ファイルのメタデータみたいなものです。
拡張属性はファイルごとに存在します。
「Ubuntu」が要求するファイルシステムの機能を実現するため、「WSL」は各ファイルの拡張属性に必要な情報を保存します。
VolFsの登場
「WSL」では「Ubuntu」のファイル群を配置する場所を確保するため、「VolFs」というファイルシステムを提供しています。このファイルシステムは「Windows」から見ると「%LocalAppData%\lxss」フォルダーになります。
「Windows」から見ればただのフォルダーです。
このファイルシステム内(%LocalAppData%\lxssフォルダー内)に配置されるファイルは、「NTFS」の拡張属性を利用して「Ubuntu」が要求するファイルシステムの機能を実現しています。
言い換えれば、この「NTFS」の拡張属性がなければ、「Ubuntu」が要求するファイルシステムの機能が提供できなくなるということです。
Windowsアプリは拡張属性を解釈できない
「VolFs」はWindowsアプリから見ればただのフォルダーです。「VolFs」内のファイルはWindowsアプリから見ればただのファイルです。
Windowsアプリは「WSL」が生成した「NTFS」の拡張属性の内容を解釈できません。
そのためWindowsアプリから「VolFs」内のファイルを編集して保存したり、Windowsアプリから「VolFs」内にファイルを作成すると、「WSL」が必要とする「NTFS」の拡張属性が存在しないファイルを「VolFs」内に作成することになります。
WindowsアプリからUbuntu環境内のファイルを決していじってはならない
本題です。WindowsアプリからUbuntu環境内のファイルを決していじらないでください。
Ubuntu環境内のファイルとは、「VolFs」内のファイルのことであり、Windowsから見ると「%LocalAppData%\lxss」フォルダー内のファイルのことです。
WindowsアプリからUbuntu環境内のファイルをいじると、「WSL」はそのファイルを破損したファイルとして扱い、最悪「Ubuntu」環境が壊れる結果になります。
「Ubuntu」環境が壊れてしまった場合、「Ubuntu」を再インストールすることになります。
「NTFS」の拡張属性に必要な情報が保持されているからこそ、「WSL」は「Ubuntu」が要求するファイルシステムの機能を提供できるわけです。
そのおかげで「Ubuntu」はそれらのファイルに正常にアクセスできます。
Ubuntu環境内のファイルをいじるとは
Ubuntu環境内のファイルをいじるとは、Windowsアプリから以下のファイル操作を行うことです。- ファイルの新規作成
- 既存ファイルの編集や保存
- ファイルの移動
Windowsアプリによっては、ファイルにアクセスしただけでアクセスしたファイルと同じフォルダー内にキャッシュファイルやバックアップファイルを生成する機能があるかもそれません。
簡潔に言えば、Windowsアプリから「%LocalAppData%\lxss」フォルダー以下には一切アクセスしないようにしましょう。
UbuntuとWindowsから同じファイルを共有したいときは
「Ubuntu」と「Windows」から同じファイルを共有したい時は、そのファイルを「DrvFs」内に配置します。「DrvFs」は、「Ubuntu」と「Windows」の相互運用のために提供されるファイルシステムです。
「DrvFs」を「Windows」から見ると、CドライブなどWindowsのボリュームそのものです。
「DrvFs」を「Ubuntu」から見ると、「/mnt/c」など「/mnt」以下にマウントされているWindowsのボリュームです。
従って双方からアクセスしたいファイルは、Windowsユーザーのフォルダー内に配置するなど、「%LocalAppData%\lxss」フォルダー以外のフォルダーにファイルを配置します。
NTFSの拡張属性に必要な情報がないファイルはどうなるのか
「WSL」は「NTFS」の拡張属性に必要な情報がないファイルを、破損したファイルとして扱います。そのため「Ubuntu」からそれらのファイルへアクセスしようとすると、そのアクセスは失敗します。
少なくとも、ユーザーが意図とした結果にはなりません。