OverlayFSを使用するにはどうすればよいですか?


53

この回答メールメッセージは、「OverlayFS」と呼ばれるものがUbuntu 11.10で利用可能であり、Ubuntu 12.04のaufsを強制的に置き換えることを示しています

どうやって使うの?ドキュメントはどこにありますか?


1
あなたと私、兄弟。私はこれまでにこれに出くわしました:mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point。それを超えて私は無知です。私はライブシステムでそれをいじっていますが、まだ機能させることができていません。「upperdir」と「lowerdir」の意味が正確にわかるようになればと思います。何も見つかりませんでした。
チャックR

回答:


63

編集:この答えを書いているので、いくつかのものは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]

[マウントオプション]は次のとおりです。

  • lowerdir = somedir:lowerdirは、新しいファイルシステムを配置するディレクトリです。重複がある場合は、実際にはupperdirのバージョンによって上書きされます(実際には隠されています)。
  • upperdir = somedir:upperdirは、lowerdirをオーバーレイするディレクトリです。lowerdirとupperdirに重複するファイル名が存在する場合、upperdirのバージョンが優先されます。
  • 標準マウントオプション。コードから私が見た唯一のものはro / rwですが、実験することができます。

最初に私を混乱させたので、おそらく明確にする必要があるのは、overlayfsをマウントしても実際にはファイルシステムがマウントされないということです。overlayfsマウントを使用してsquashfsファイルシステムをマウントしようとしましたが、それは動作しません。最初に(私の場合はsquashfs)ファイルシステムを任意のディレクトリにマウントし、次にoverlayfsを使用してマウントポイント(ディレクトリ)と別のディレクトリをターシャリディレクトリ(overlayfsマウントポイント)にマージする必要があります(編集:この「ターシャリ」ディレクトリ実際にはupperdir =ディレクトリにすることができます)。三次ディレクトリは、マージされたファイルシステム(またはディレクトリツリー-柔軟な)を表示する場所です。

例1、ルートファイルシステムのオーバーレイ

私はベース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ファイルシステムをマウントし、/overlayOverlayFSを使用して/overlayover のコンテンツを本質的にマージし/ます。

例2、2つのディレクトリの透過的なマージ

リリースごとにライブ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フォルダーに表示されます。次に、chrootkubuntuフォルダーに移動して、のような操作を行いますapt-get install kubuntu-desktop。このOverlayFSマウント中に行われた変更は、上位ディレクトリ(この場合はkubuntuフォルダー)に残ります。次に、OverlayFSをアンマウントすると、実際にはubuntu-baseに存在するが、kubuntuフォルダーに「ミラーリング」されているファイルは、変更されない限り消えます。これにより、ubuntu-baseにファイルの複数のコピーを作成する必要がなくなり、各場所に物理的に存在するかのように使用できます。


3
「しかし、何らかの理由でkernel.orgのgitツリーに表示されません」 -これは、aufsが存在しない(および表示されない)ように、overlayfsがアップストリームカーネルに存在しないためです。このようなユニオンファイルシステムは、Ubuntu Kernel Teamによって統合されています。
メストレリオン

2
OverlayFSは明らかにカーネル3.10に入っています。
デビッドC.ビショップ

8
最後に、3.18 lwn.net/Articles/617099
Rmano

4
@Rmano:私のマシンでは、次のoverlayものと一緒にしか動かないoverlayfs
Janus Troelsen

1
@austinmartonありがとう、これもしばらく前に見つけたので、答えを更新する前にtottiがそれを以下で説明しました。
チャックR

20

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つのみが保存されます。

ディレクトリの名前のリストのみがマージされます。メタデータや拡張属性などの他のコンテンツは、上位ディレクトリについてのみ報告されます。下位ディレクトリのこれらの属性は非表示です。


4
workdirの説明をありがとう。それはかなり最近の変更であり、何らかの理由で、「workdir」が実際に行ったことに関するドキュメントを見つけることができませんでした。私が最後に見たときには、カーネルの助けにもありませんでした。overlayfs IMOに混乱の層を追加します。新しいバージョンがそれなしで使用できることを望みます-それは私のワークフローを混乱させます。
チャックR

7

これらのアーティクルを拡張して、読み取り専用ルートfsを設定するoverlayfs用のスクリプトを含めました。

それが役に立てば幸い。


1
他の人が行った作業のおかげで、Dustinと私は、「overlayroot」という名前のバナリーパッケージをquantalに追加しました。これはcloud-initramfs-toolsソースパッケージの一部です。/etc/overlayroot.confの
smoser

2

最小限の実行可能な例

# 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

GitHubアップストリーム

最初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:work/気にする必要のないランダムなコンテンツ(ディレクトリ)が含まれています

適応例:OverlayFSの使用例

複数の下位レイヤーを使用したより複雑な例は次のとおりです。

Ubuntu 18.04、Linuxカーネル4.15.0でテスト済み。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.