Overlayfsでバインドマウントを使用する

Overlayfsでバインドマウントを使用する

OverlayFSでバインドマウントを使用して仮想マウントを作成しようとしています。最適な状況は次のとおりです。

チャート

ルートフォルダは新しいサブフォルダにバインドマウントされ、サブディレクトリとして使用されます。オーバーレイの違いを保存する新しい親ディレクトリ、コンポーネント用のwork_dirディレクトリworkdir、最後にオーバーレイインストール用mntのディレクトリを作成します。

私が経験している問題は、一度設定すると、バンドルマウントアイテムがオーバーレイに表示されないことです。

再帰マウントと共有/非共有マウントの使用を含む、マウントのさまざまな属性を調べました。あるいは、ルートの個々のフォルダをlowerdirの下の個々のフォルダにバインドしようとしましたが、まだファイルがありません。マウントの設定がありませんか?それともこれは不可能ですか?

ベストアンサー1

バインドマウントはoverlayfsマウントポイント内で作成できます。 mount(8) コマンドはこのオプションを提供しないため、C コードでのみこれを実行できます。

<fd> = openat(AT_FDCWD, <merge-dir>, O_RDONLY|O_CLOEXEC|O_PATH)
mount(<source-dir>, "/proc/self/fd/<fd>", "", MS_BIND|MS_REC, NULL)
close(<fd>)

<マージディレクトリ>ホストシステムに相対的にインストールされるディレクトリです。最低/低あなたの場合

<ソースディレクトリ>マウントするディレクトリです。<ルートディレクトリ>あなたの場合。これはホストシステムにも関連しています。

<FD>これはopenatによって返されるファイル記述子intであり、/proc/self/fd/stringに関連付ける必要があります。

このプロセスは、Overlayfsを取り付けた直後またはインストール後にいつでも完了できます。

--mount type=bind オプションを使用して実行すると、図に記載されているように正確に進むように見える "docker run" の syscall を見て、この事実を発見しました。オーバーレイマウントはサブマウントを暗黙的に含まないため(MS_RECの場合でも)オープン(2)マウントするディレクトリに対応するファイル記述子を開くために使用できます。 /proc/self/fd/にあるファイル記述子デバイスファイルはバインドマウントターゲットとして使用でき、ディスクリプタが閉じた後も開いたままになります。

おすすめ記事