WSL2の/ initにインストールされている「ツール」ファイルシステムを見つけます。

WSL2の/ initにインストールされている「ツール」ファイルシステムを見つけます。

私は数年間Linuxを使ってきましたが、WSL2を試してみたかったのです。驚くべきことは、Windows PEバイナリ(* .exeファイル)を「このように」実行できることです。いくつかの研究の結果、これはbinfmt_miscLinuxの性質によるものであることがわかりました。 Windowsの実行可能ファイルのインタプリタが/tools/init

しかし、ディレクトリが見つかりません/tools(実行ファイルのみが見つかります/init)。 WSL2で実行すると、mount | grep tools次のようになります。

tools on /init type 9p (ro,relatime,dirsync,aname=tools;fmask=022,loose,access=client,trans=fd,rfd=6,wfd=6)

しかし、私はそれを見つけることはできません/init/(私が見つけることができる最も良いのはC:\Windows\System32\lxss\toolsWindows上です)。 WSL2では、これはどのように機能しますか?/この取り付けポイント「上」に設置されていますか?それでは、/toolsWSL2またはでコンテンツをどのように表示できますか?/init

答え1

まず、ほとんどのWSLはプライベートソースであるため、観察された動作とLinuxおよびWindowsのメカニズムを理解することによっていくつかの情報を収集する必要があります。つまり、Microsoft は Interop の仕組みに関する多くの興味深い情報を提供しています。マイクロソフトブログ投稿WindowsとUbuntuの相互運用性すばらしい本ですが、個人的にはまだ負担です。 WSL1時代に書かれましたが、ほとんどはまだWSL2に適用されます。

このブログを読むときは注意してください。いくつかの用語が変更されました。たとえば、bash.exe今はwsl.exe「Ubuntu」が当時利用可能な唯一のディストリビューションです。

Microsoftの実装はプライベートソースですが、このブログは次のリンクにリンクされています。パイオニアオープンソースプロジェクトこれにより、WSLはWindowsバイナリを実行できるため、学習する内容を確認するのが興味深いことがあります。

しかし、私はそれを見つけることはできません/init/(私が見つけることができる最も良いのはC:\Windows\System32\lxss\toolsWindows上です)。

私たちは少なくともかなり明確に答えることができます。 Windowsのツールディレクトリにinitバイナリを見つけることができます。/initWSL(バージョン1または2に関係なく)インスタンスに表示される内容は、実際には存在するファイルシステムから。インスタンスを起動すると、WSLによってマウントされます。あなたのWindowsC:\Windows\System32\lxss\tools\init/init

WSL Store Previewを使用している場合、実際のバイナリは..\System32\lxss

また、上記のブログ投稿には次の内容が記載されています。

/initマイクロソフトで書いてくださいLxssManager.dll

もうそうではないかもしれません。しばらくの間、WSL1とWSL2の/initファイルサイズは少し異なりました。この時点で、サイズとタイムスタンプは同じように見えます。これは、Microsoftが少なくとも現在実行されているストアプレビュービルドでは、/initこのタスクから完全に退いた可能性があることを意味します。LxssManager.dll

/この取り付けポイント「上」に設置されていますか?

上でこの質問に答えたと思いますが、明確に言えばその逆です。 /init起動時にインストールされます/。少なくともWSL2は、ネットワークファイルシステムである9Pプロトコルファイルシステムを使用します。デフォルトでは、9PはすべてのWindowsドライブを/mnt/c/mnt/dなど)にマウントするためにも使用されます。

tools on /init type 9p (ro,relatime,dirsync,aname=tools;fmask=022,loose,access=client,trans=fd,rfd=6,wfd=6)

したがって、マウントポイントは、「Windows..\lxss\toolsディレクトリが9Pプロトコルを介してマウントされている/init」と解釈されます。

より興味深い情報私は同じ問題についてRedditに投稿したu / diddlesnapsの投稿を知りません。この情報(私には完全に理解されています)によると、toolsインストールはWSLを介して実行されてinitrdから削除されます。

関連情報