
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/myimage
。 home.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」の部分はどこかに動作すると述べられていますが、読み取り専用オーバーライドを生成するので、指定しないようにしました。しかし、それはうまくいきませんでした。少なくとも私にとってはそうではありません。