オーバーレイマウントの上位ファイルシステムから下位ファイルシステムへの変更をマージできるようにしたいと思います。
オンラインの両方に興味があります (つまり、 whileをマージします オーバーレイがマウントされます)およびオフライン (オーバーレイをアンマウントしてからマージします)ソリューション。
いくつかのオフラインソリューションを見つけました。それらを回答として追加しました。
オンラインを知っている人はいますか ソリューション?オーバーレイがまだマウントされている間にレイヤーをマージするために実行できる「コミット」タイプのコマンドがあると便利です。
次の質問では、このような質問があり、答えはありません。
- 1つのファイルを変更して、OverlayFsの下位ディレクトリに同期する方法はありますか?
- OverlayFSディレクトリを介して下位ファイルを変更するにはどうすればよいですか?
- OverlayFSは下位ディレクトリのファイルをシームレスに編集します
- OverlayFS –アンマウントせずに上位のファイルシステムに変更を永続的に行う方法は?
これらの投稿のコメントは、さまざまなmergerfsとbcacheを示唆しています。どちらも特定のユースケースを解決しますが、オーバーレイが提供する一般的なファイルシステムにとらわれないユースケースは解決しません。
私の目標は、スナップショットを備えた安全なファイルシステムサンドボックスを用意し、基盤となる任意の(実用的な)ファイルシステム上で任意のLinuxアプリケーションで使用できるようにすることです。これにより、変更をロールバックしたり、準備ができたら手動でコミットしたりできます。
使用方法を知っていれば、過去数年間のサンドボックス化/仮想化の革新のおかげで、現代のメインラインLinuxにはこの組み込み機能を実行するために必要なすべての機能があるのではないかと疑っています。
承認された回答:
オンラインでの試み 解決策ですが、完全にはありません。
セットアップ(例:/tmp
ディレクトリ、ルートとして):
LOWER=$HOME
mkdir u1 w1 o1 O
mount -t overlay overlay -o lowerdir=$LOWER,upperdir=u1,workdir=w1 o1
mount --bind o1 O
次に、O
で作業できます $LOWER
のオーバーレイであるディレクトリ 。スナップショットを作成する場合:
mkdir u2 w2 o2
mount -t overlay overlay -o lowerdir=o1,upperdir=u2,workdir=w2 o2
(このようなネストされたオーバーレイは、古いカーネルでは機能しないことに注意してください)。
しかし、O
でバインドマウントをアトミックに変更する方法が必要です。 o2
を指す o1
の代わりに 。これを行う方法がわからない:
umount O
mount --bind o2 O
(アトミックではありません; O
があるウィンドウがあります マウントされていません。
理想的には、実行中のプロセスは、O
の基盤となるファイルシステムを知らなくても実行を継続できます。 o1
から変更されました o2
へ 。これが可能かどうか、またはO
の基になるファイルシステムを変更するかどうかはわかりません このようにすると、開いているアプリケーションが混乱しすぎます。さらに調査する必要があります。
次に、O
o2
にリダイレクトされました 、o1
を再マウントできます 予防措置として読み取り専用にしてから、たとえばrdiffdirまたはoverlayfs-toolsを使用してオフラインマージを実行します。
最後に、o2
をアトミックに再マウントする方法が必要です。 lowerdir=$HOME,upperdir=u2,workdir=w2
として o1
、u1
およびw1
(現在はすべて空のdirs)を削除できます。繰り返しますが、これが可能かどうかはわかりません。
それ以外の場合は、オーバーレイをどんどん深くネストし、マージやクリーンアップを試行せずに、マウントされたそれぞれのオーバーレイとアッパーダイアを残すだけでスナップショットを作成できます。ただし、マウントできるネストされたオーバーレイの数にはおそらく制限があります。そして、ある時点で、変更を永続化する場合は、レイヤーを下にマージする必要があります。