回答:
編集:この答えを書いているので、いくつかのものはoverlayfsに変更されている、必要なパラメータのすなわち加えworkdir
、参照トッティの答えこの新しいパラメータの詳細については下記を。
やっと見つけました。カーネルソースでそれを参照していましたが、何らかの理由でkernel.orgのgitツリーに表示されません。しかし!次のようにUbuntuカーネルソースを取得する場合:でapt-get source linux-image-3.0.0-16-generic
見つけることができますlinux-3.0.0/Documentation/overlayfs.txt
。のlinux-docパッケージにもあります/usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz
。
実際のヘルプドキュメントは、「マウント方法」ではなく「動作方法」に近いため、ここに簡単な要約を示します(カーネルドキュメントには1つの例があります)。
mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]
[マウントオプション]は次のとおりです。
最初に私を混乱させたので、おそらく明確にする必要があるのは、overlayfsをマウントしても実際にはファイルシステムがマウントされないということです。overlayfsマウントを使用してsquashfsファイルシステムをマウントしようとしましたが、それは動作しません。最初に(私の場合はsquashfs)ファイルシステムを任意のディレクトリにマウントし、次にoverlayfsを使用してマウントポイント(ディレクトリ)と別のディレクトリをターシャリディレクトリ(overlayfsマウントポイント)にマージする必要があります(編集:この「ターシャリ」ディレクトリ実際にはupperdir =ディレクトリにすることができます)。三次ディレクトリは、マージされたファイルシステム(またはディレクトリツリー-柔軟な)を表示する場所です。
私はベースUbuntuシステムがfilesystem.squashfsとして存在するUbuntuハイブリッドブートディスクで作業しており、ubuntu.overlay kubuntu.overlay xubuntu.overlayおよびlubuntu.overlayというファイルがあります。.overlayファイルは、(スペースを節約するために)filesystem.squashfsの内容が削除された上記システムの基本インストールです。次に、overlayfsと上記のオプションを使用して、initスクリプトを修正し、(ブートパラメーターからの)正しいディストリビューションの.overlayファイルをオーバーレイします。
これらは、initスクリプトで使用した行です(すべての変数が変換されると):
mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /
上記のfilesystem.squashfs は、ファイルではなくcasperによって作成されたディレクトリであることに注意してください。
これらの3つのステートメントは/overlay
ディレクトリを作成し、そのディレクトリにsquashfsファイルシステムをマウントし、/overlay
OverlayFSを使用して/overlay
over のコンテンツを本質的にマージし/
ます。
リリースごとにライブUSBを再構築するプロセスでは、OverlayFSを使用して時間を大幅に節約します。まずは、最も基本的なインストールであるubuntu-coreイメージの内容を含むubuntu-baseというディレクトリから始めます。次に、ubuntu、kubuntu、lubuntu、およびxubuntuというディレクトリを作成します。
次に、OverlayFSを使用して、ubuntu-baseのファイルを個々のディレクトリに表示します。私はこのようなものを使用します:
mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu
これにより、ubuntu-baseのファイルがkubuntuフォルダーに表示されます。次に、chroot
kubuntuフォルダーに移動して、のような操作を行いますapt-get install kubuntu-desktop
。このOverlayFSマウント中に行われた変更は、上位ディレクトリ(この場合はkubuntuフォルダー)に残ります。次に、OverlayFSをアンマウントすると、実際にはubuntu-baseに存在するが、kubuntuフォルダーに「ミラーリング」されているファイルは、変更されない限り消えます。これにより、ubuntu-baseにファイルの複数のコピーを作成する必要がなくなり、各場所に物理的に存在するかのように使用できます。
overlay
ものと一緒にしか動かないoverlayfs
https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txtから:
上も下も
オーバーレイファイルシステムは、「上部」ファイルシステムと「下部」ファイルシステムの2つのファイルシステムを組み合わせたものです。両方のファイルシステムに名前が存在する場合、「上位」ファイルシステムのオブジェクトは表示されますが、「下位」ファイルシステムのオブジェクトは非表示になるか、ディレクトリの場合は「上位」オブジェクトとマージされます。
両方のディレクトリツリーが同じファイルシステムに存在する可能性が非常に高く、ファイルシステムのルートを指定する必要がないため、「ファイルシステム」ではなく、上部および下部の「ディレクトリツリー」を参照する方がより適切です。上部または下部のいずれか。
下位のファイルシステムは、Linuxがサポートする任意のファイルシステムにすることができ、書き込み可能である必要はありません。下位のファイルシステムは別のoverlayfsである場合もあります。上位のファイルシステムは通常書き込み可能であり、信頼できる場合は拡張属性の作成をサポートし、readdir応答で有効なd_typeを提供する必要があるため、NFSは適切ではありません。
2つの読み取り専用ファイルシステムの読み取り専用オーバーレイは、任意のファイルシステムタイプを使用できます。
ディレクトリ
オーバーレイには主にディレクトリが含まれます。指定された名前が上位と下位の両方のファイルシステムに表示され、いずれかの非ディレクトリを参照する場合、下位オブジェクトは非表示になります-名前は上位オブジェクトのみを参照します。
上位オブジェクトと下位オブジェクトの両方がディレクトリである場合、マージされたディレクトリが形成されます。
マウント時に、マウントオプション「lowerdir」および「upperdir」として指定された2つのディレクトリが、マージされたディレクトリに結合されます。
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
「workdir」は、upperdirと同じファイルシステム上の空のディレクトリである必要があります。
その後、このようなマージされたディレクトリでルックアップが要求されるたびに、ルックアップは実際の各ディレクトリで実行され、結合された結果はオーバーレイファイルシステムに属するdentryにキャッシュされます。両方の実際のルックアップでディレクトリが見つかった場合、両方が保存され、マージされたディレクトリが作成されます。それ以外の場合は、1つのみが保存されます。
ディレクトリの名前のリストのみがマージされます。メタデータや拡張属性などの他のコンテンツは、上位ディレクトリについてのみ報告されます。下位ディレクトリのこれらの属性は非表示です。
これらのアーティクルを拡張して、読み取り専用ルートfsを設定するoverlayfs用のスクリプトを含めました。
それが役に立てば幸い。
最小限の実行可能な例
# Create the filesystems.
dd if=/dev/zero of=lower.ext4 bs=1024 count=102400
mkfs -t ext4 lower.ext4
cp lower.ext4 upper.ext4
mkdir lower upper overlay
sudo mount lower.ext4 lower
sudo mount upper.ext4 upper
sudo chown "$USER:$USER" lower upper
printf lower-content > lower/lower-file
# Upper and work must be on the same filesystem.
mkdir upper/upper upper/work
printf upper-content > upper/upper/upper-file
# Work must be empty. E.g. this would be bad:
#printf work-content > upper/work/work-file
# Make the lower readonly to show that that is possible:
# writes actually end up on the upper filesystem.
sudo mount -o remount,ro lower.ext4 lower
# Create the overlay mount.
sudo mount \
-t overlay \
-o lowerdir=lower,upperdir=upper/upper,workdir=upper/work \
none \
overlay \
;
# Interact with the mount.
printf 'overlay-content' > overlay/overlay-file
ls lower upper/upper upper/work overlay
# Write to underlying directories while mounted
# gives undefined behaviour.
#printf lower-content-2 > lower/lower-file-2
#printf upper-content-2 > upper/upper-file-2
# Unmount the overlay and observe state.
sudo umount overlay
ls lower upper/upper upper/work
# Cleanup.
sudo umount upper lower
最初ls
のマウントの出力:
lower:
lost+found lower-file
overlay:
lost+found lower-file overlay-file upper-file
upper/upper:
overlay-file upper-file
upper/work:
work
ls
マウントなしの2番目の出力:
lower:
lost+found lower-file
upper/upper:
overlay-file upper-file
upper/work:
work
解釈:
work/
気にする必要のないランダムなコンテンツ(ディレクトリ)が含まれています適応例:OverlayFSの使用例
複数の下位レイヤーを使用したより複雑な例は次のとおりです。
Ubuntu 18.04、Linuxカーネル4.15.0でテスト済み。
mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point
。それを超えて私は無知です。私はライブシステムでそれをいじっていますが、まだ機能させることができていません。「upperdir」と「lowerdir」の意味が正確にわかるようになればと思います。何も見つかりませんでした。