ディレクトリで複数のFUSEプログラムが動作する場合はどうなりますか?

ディレクトリで複数のFUSEプログラムが動作する場合はどうなりますか?

もちろん、システムは1つのディレクトリに2つのインストールを防ぐことができます。

しかし、最上位ディレクトリにFUSEプログラムをマウントし、下位ディレクトリに別のFUSEプログラムをマウントするとどうなりますか?

サブディレクトリからタスクを呼び出すと、正確に何が起こりますか?

私の仮定は、最初は親FUSEからマウントに関連する操作を実行し、次に子FUSEから呼び出される実際の操作に移動することです。

そうですか?

編集:誤って1つのディレクトリに2つをインストールできませんでした。それでは、2つの異なるFUSEプログラムが同じディレクトリにマウントされている場合、どのFUSEプログラムが優先順位を持ちますか?

答え1

もちろん、システムは1つのディレクトリに2つのインストールを防ぐことができます。

不要。必要に応じて同じディレクトリを複数回マウントできます。

mkdir /tmp/foo /tmp/bar /tmp/baz
mount --bind /tmp/foo /tmp/baz
mount --bind /tmp/bar /tmp/baz # <-- no error

しかし、最上位ディレクトリにFUSEプログラムをマウントし、下位ディレクトリに別のFUSEプログラムをマウントするとどうなりますか?

FUSEプログラムによってマウントが制御されない場合でも、同じ状況が発生します。新しいマウント「下」にあるディレクトリツリーの上部にはアクセスできなくなります(以前に開いたファイルハンドルを介した場合を除く)。

私の仮定は、最初は親FUSEからマウントに関連する操作を実行し、次に子FUSEから呼び出される実際の操作に移動することです。

そうですね。 Linuxカーネルには「dentry」キャッシュがあるため、ディレクトリがすでにカーネルキャッシュにある場合、「最上位」FUSEプログラムはマウント操作または子FUSEで発生する操作からイベントを必ず取得する必要はありません。

答え2

すべてのファイルシステムは任意の場所にマウントできます。このマウントポイント内のファイルへのすべてのアクセスは、周囲のファイルシステムではなく、その場所にマウントされたファイルシステムにのみ表示されます。これは他のインストールと変わらず(必ず)ルートファイルシステム内にあります。

外部ファイルシステムが知っている限り、マウントポイントはディレクトリだけです。観点から見ると、そのディレクトリ内にないファイルに対する要求を処理する方法がわからないため、仮定が正しくありません。 FUSEはこの点で他のファイルシステムと変わりません。

まず、ルートからマウントポイントに到達します。〜する外部ファイルシステムに移動する必要があります。これがこのコンテンツにアクセスできる唯一のポイントです。

関連情報