web-dev-qa-db-ja.com

Linuxオーバーレイ(OverlayFS)マウントで上位ファイルシステムから下位ファイルシステムへの変更をマージ

オーバーレイマウントの上位ファイルシステムから下位ファイルシステムへの変更をマージできるようにしたいと思います。

online(つまり、マージがwhileオーバーレイがマウントされている)とoffline(オーバーレイをアンマウントしてからマージ)ソリューション。

いくつかのオフラインソリューションが見つかりました。これを回答として追加しました。

オンラインソリューションを知っている人はいますか?オーバーレイがまだマウントされている間にレイヤーをマージするために実行できる「コミット」タイプのコマンドがあるとよいでしょう。

このような何かが答えのない次の質問で尋ねられました:

これらの投稿のコメントは、さまざまな mergerfs および bcache を示唆しています。どちらも特定のユースケースを解決しますが、オーバーレイが提供する一般的なファイルシステムに依存しないユースケースを解決しません。

私の目標は、スナップショットを備えた安全なファイルシステムサンドボックスを作成し、スナップショットを使用して、(実用的な)基盤となるファイルシステム上でLinuxアプリケーションを使用して、準備ができたら変更をロールバックしたり手動でコミットしたりできるようにすることです。

最近のメインラインLinuxには、この組み込みを実現するために必要なすべての機能が備わっているのではないかと疑っています。過去2、3年のサンドボックス化/仮想化の革新のおかげです。

7
ejm

私が思いついた別のoffline解決策は、オーバーレイがマウントされたパッチを作成するために rdiffdir を使用してから、アンマウントして適用しますそれ。このソリューションでは、パッチを当面のど​​こかに(ディスク上またはramdisk/tmpfsに)保存する中間ステップが必要です。

2
ejm

オンラインの解決策の試みはありますが、完全には解決していません。

セットアップ(例:/tmpディレクトリ、rootとして):

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

(このようなネストされたオーバーレイは古いカーネルでは機能しないことに注意してください)。

ただし、o2ではなくo1を指すようにOのバインドマウントをアトミックに変更する方法が必要です。私はこれ以外の方法がわかりません:

umount O
mount --bind o2 O

非アトミック; Oがアンマウントされているウィンドウがあります)。

理想的には、Oの基礎となるファイルシステムがo1からo2に変更されたことを知らなくても、実行中のプロセスは実行を継続できます。これが可能かどうか、またはOの基礎となるファイルシステムをこのように変更すると、開いているアプリケーションが混乱するかどうかはわかりません。さらに調査する必要があります。

次に、Oo2にリダイレクトされたら、予防策としてo1を読み取り専用で再マウントし、rdiffdirやoverlayfs-toolsなどを使用してオフラインマージを実行できます。

最後に、o2lowerdir=$HOME,upperdir=u2,workdir=w2o1(すべて空のディレクトリ)を削除できるように、u1w1としてアトミックに再マウントする方法が必要です。繰り返しますが、これが可能かどうかはわかりません。

それ以外の場合は、オーバーレイをより深くネストし、マージやクリーンアップを試行せずに、それぞれのオーバーレイと上位ディレクトリをマウントしたままにして、スナップショットを作成できます。ただし、マウントできるネストされたオーバーレイの数にはおそらく制限があります。そして、ある時点で、変更を永続化したい場合は、レイヤーを下にマージする必要があります。

2
ejm

便利なツールセット(diff、merge、vacuum)を実装する overlayfs-tools プロジェクトを見つけました。オーバーレイをアンマウントする必要があるため、offlineのみのソリューションになります。

これは概念実証には適していますが、メンテナが1人しかいないため、数年間活動がないため、現状ではこれに依存しません。

1
ejm

私はそれを https://github.com/StuartIanNaylor/zram-config で使用しています=シャットダウン時にzram-configがかなりの数のインストールをマージし、かなりの数のユーザーで動作するようです。

OverlayFSチームがいくつかの公式ツールを作成してくれることを願っています。 Aufsにはツールがありますが、多くのカーネルには含まれていません。overlayfsは、使用シナリオを大幅に強化するため、マージダウンツールのスナップショットがないことが見落とされているようです。

0
Stuart Naylor