📖
Overlayfsについてメモ
概要
mountでoverlayfsを作成する際にlowerdirを複数指定できることを知らなかったため, どんな挙動になるか何となく予想はつくが実際に試してみたのでメモ.
シナリオ
- lowerdirが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.
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