低サブマウント位置にオーバーレイをマウントする方法は?

低サブマウント位置にオーバーレイをマウントする方法は?

chroot環境用にOverlayfsを設定しようとしています。環境は、複数の読み取り専用squashfsファイルシステム(下)と書き込み可能ディレクトリ(上記)で構成されています。

トリッキーな部分は、1つのsquashfsファイルシステムにのみchrootのルートディレクトリがあり、他のファイルシステムにはルートに戻る完全な祖先チェーンが含まれていないことです。だから私は次のことを試みます:

mount -o ro,loop base.squash /media/foo/myimage
mount -o ro,loop home.squash /media/foo/myimage/home/
mount -t overlay overlay -o lowerdir=/media/foo/myimage,upperdir=/var/lib/myimage,workdir=/var/chache/myimage /media/bar

/media/barこれは次のような(素晴らしい)結果をもたらしました。ただ base.squashそして/var/lib/myimagehome.squash無視 空白のままにします/media/bar/home

追加のサブレイヤーとして追加する方法についてドキュメントを見てみましたが、home.squashすべてのレイヤーがルートの祖先ディレクトリの完全なチェーンを含むと仮定しているようです/

コンテンツを変更せずにsquashfsイメージをどのようにマウントするのですか?

答え1

この問題の解決策を見つけました。ファイルシステムのマージ入れ子になった複数のマウントの階層を、 overlayfs が動作する単一のマウントポイントに再マップします。例えば

mount -o ro,loop file1 /mnt/dir/part1
mount -o ro,loop file2 /mnt/dir/part2
mount.mergerfs /mnt/dir /mnt/view
mount -t overlayfs lowerdir=/mnt/view,... 

答え2

これは素晴らしい発見であり、解決策を探したいです。バインドマウントのいくつかのバリエーションを試しましたが、目的の結果が得られませんでした。

しかし、明らかに動作しなければならないネストされたオーバーライドに関する別の問題を見ましたが、Linuxカーネル4.2にはそのバージョンで動作しないという回帰問題があります。幸いにも私は4.15なので、この方法を試してみました。

mount -o ro,loop base.squash /media/foo/myimage
mount -o ro,loop home.squash /media/foo/myhome
mount -t overlay overlay -o lowerdir=/media/foo/myimage,upperdir=/var/lib/myimage,workdir=/var/chache/myimage /media/bar
mount -t overlay overlay -o lowerdir=/media/foo/myhome,upperdir=/var/lib/myhome,workdir=/var/chache/myhome /media/bar/home

これはあなたが望む効果があるようです。

「upperdir」と「workdir」の部分はどこかに動作すると述べられていますが、読み取り専用オーバーライドを生成するので、指定しないようにしました。しかし、それはうまくいきませんでした。少なくとも私にとってはそうではありません。

関連情報