📖

Overlayfsについてメモ

2023/02/26に公開

概要

mountでoverlayfsを作成する際にlowerdirを複数指定できることを知らなかったため, どんな挙動になるか何となく予想はつくが実際に試してみたのでメモ.

シナリオ

  1. lowerdirが2つ存在するだけのケース
  2. lowerdirが2つに加えてupperdirが存在するケース

overlayfsがどのような挙動をするか知っていれば1がどのような挙動をするかわかった時点で2もどのように動くか予想はつくが試してみることは重要なのでやってみた.

準備

まずは以下のような構成のフォルダ/ファイルを作る. ()はファイルの中身

# シナリオ1
tree
.
├── lower_layer1
│   ├── lower_both (lower_both lower_layer1)
│   └── lower_layer1_only (lower_layer1_only)
├── lower_layer2
│   ├── lower_both (lower_both lower_layer2)
│   └── lower_layer2_only (lower_layer2_only)
├── merged

# シナリオ2
tree
.
├── lower_layer1
│   ├── common_all (common_all lower_layer1)
│   ├── lower_both (lower_both lower_layer1)
│   └── lower_layer1_only (lower_layer1_only)
├── lower_layer2
│   ├── common_all (common_all lower_layer2)
│   ├── lower_both (lower_both lower_layer2)
│   └── lower_layer2_only (lower_layer2_only)
├── merged
├── upper_layer
│   ├── common_all (common_all upper_layer)
│   └── upper_layer_only (upper_layer_only)
└── work

実践

シナリオ1

mount -t overlayコマンドでlowerdirを2つ指定して実行. lowerdirが2つ以上あるときはupperdir, workerdirを省いても動作する.

As the example shows, "upperdir=" and "workdir=" may be omitted. In
that case the overlay will be read-only.

https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt

sudo mount -t overlay -o lowerdir=lower_layer1:lower_layer2 overlay merged

ls merged
lower_both  lower_layer1_only  lower_layer2_only

cat merged/lower_both
lower_both lower_layer1

ファイル名が同じものが存在する場合は, lowerdirで先に指定した方のディレクトリのファイルが優先される模様. それぞれに共通のファイルがない場合はそのまま置かれる(これはupperdirがある場合も同じ).

シナリオ2

予想はつくがやはりシナリオ1の挙動に加えてupperdirが優先されるようになっている.

sudo mount -t overlay -o lowerdir=lower_layer1:lower_layer2,upperdir=upper_layer,workdir=work overlay merged

ls merged
common_all  lower_both  lower_layer1_only  lower_layer2_only  upper_layer_only

cat merged/common_all
common_all upper_layer

cat merged/lower_both
lower_both lower_layer1

所感

大体予想した通りの挙動ではあったが, このように細かい挙動を把握するのは大事なのでやってみたというメモ.

Discussion