overlayfs
overlayfsは、他のファイルシステムの上に結合されたファイルシステムビューを提供しようとします
上も下も
overlayfsは、2つのファイルシステム(上位ファイルシステムと下位ファイルシステム)を組み合わせたものです。
同じ名前のファイルが上部と下部の両方に存在する場合、下部のファイルは非表示になり、ディレクトリの場合はマージされて表示されます。
下位のファイルシステムは、より正確にはディレクトリツリーである必要があります。これらのディレクトリツリーは異なるファイルシステムに属している可能性があるためです。
下位のファイルシステムは、Linuxでサポートされている任意のファイルシステムタイプにすることができ、overlayfsにすることもできます。
ディレクトリのマージ
非ディレクトリファイルの場合、上位と下位の両方が存在すると、下位のオブジェクトは非表示になります。
ディレクトリの場合は、上下のディレクトリがマージされます。
以下のコマンドでupperdir、lowerdirを指定すると、マージされたディレクトリにマージされます。
mount -t overlay overlay -o lowerdir = / root / lowerdir /、upperdir = / root / overlayt / upper、workdir = / root / overlayt / work / root / overlayt / merged
lowerdirディレクトリの内容は次のとおりです。
[root @ localhost overlayt]#ls -l / root / lowerdir /
総消費量4
-rw-r--r-- 1ルートルート4 3月15 18:35 1
-rw-r--r-- 1ルートルート0 3月15 18:35 2
-rw-r--r-- 1ルートルート0 3月15 18:35 3
drwxr-xr-x 2ルートルート6 3月15 18:35 4
[root @ localhost overlayt]#
上部:書き込み可能なレイヤー
下:一番下のディレクトリツリー
マージ:ジョイントビュー
workdir:空のディレクトリで、上部と同じファイルシステムにある必要があります
マージされたディレクトリでルックアップ操作を実行すると、ルックアップは各ディレクトリを検索し、その結果をoverlayfsファイルシステムのdentryにキャッシュします。
上下に同じディレクトリが存在する場合は、マージされてマージされて表示されます
下のdir1ディレクトリにlow1ファイルを作成します
上位のdir1ディレクトリにup1ファイルを作成します
Up1、low1はマージされたdir1ディレクトリに表示されます。
削除されたファイルの処理を見てみましょう
ホワイトアウトと不透明なディレクトリ
rm、rmdir操作をサポートし、lowdirの内容に影響を与えないために、overlayfsは削除されたファイルの情報を上部に記録する必要があります。
ホワイトアウトは、マスターとスレーブのデバイス番号が0/0のキャラクターデバイスファイルです。マージされたディレクトリにホワイトアウトファイルがある場合、下位ディレクトリにある同じ名前のファイルは無視されます。ホワイトアウトファイル自体も非表示になり、上位ディレクトリで見つけることができますそれ。
readdir
マージされたディレクトリでreaddirを呼び出すと、上位および下位ディレクトリのファイルが読み取られます(最初に上位ディレクトリを読み取り、次に下位ディレクトリを読み取ります)。このマージされたリストはファイル構造にキャッシュされ、ファイルが閉じられるまで保持されます。ディレクトリが2つの異なるプロセスによって開かれ、読み取られる場合、それらは異なるキャッシュを持っています。seekdirがオフセットを0に設定した後、readdirを呼び出すと、キャッシュが無効になり、再構築されます。
これは、diredを開いているときにmergedの変更が反映されないことを意味します。これは、多くのプログラムでは簡単に無視できます。
非カタログ
非ディレクトリオブジェクト(ファイル、シンボリックリンク、特殊デバイスファイル)の場合。lowdirオブジェクトに書き込むとき、copy_up操作が最初に実行されます。Copy_upは、ハードリンクの作成にも必要ですが、ソフトリンクには必要ありません。
Copy_upは必要でない場合があります。たとえば、読み書きモードで開かれ、実際には変更されません。
copy_up処理のプロセスは、おおよそ次のとおりです。
- オンデマンドでディレクトリ構造を作成する
- 同じメタデータでファイルオブジェクトを作成する
- ファイルデータをコピーする
- 拡張属性をコピーする
copy_upが完了した後、overlayfsは単に上位ファイルシステム上のオブジェクトへのアクセスを提供できます。
複数の下層
「:」を使用して、複数の下層を指定できます。
mount -t overlay overlay -olowerdir = / lower1:/ lower2:/ lower3 /マージ
上記の例では、upper、workdirを指定していないため、overlayfsは読み取り専用です。
複数の下位レイヤーが右からスタックにプッシュされ、スタック内の順序でマージに反映されます。lower3は下部にあり、lower1は上部にあります。
非標準の動作
copy_up操作は新しいファイルを作成します。新しいファイルは古いファイルとは異なるファイルシステムにある可能性があるため、st_devとst_inoは新しいファイルです。
古いファイルのファイルロックはcopy_upの前にcopy_upしません
複数のハードリンクを持つファイルがコピーされた場合、このリンクは壊れます。変更は、同じハードリンクファイルには反映されません。
基になるアンダーレイファイルシステムを変更する
オフライン修正、オーバーレイにマウントがない場合、上位および下位ディレクトリの修正を許可
オーバーレイを取り付けるときにアンダーレイを変更することはできません。アンダーレイが変更された場合、オーバーレイの動作は不確実になります。クラッシュやデッドロックはしませんが。