59
56

More than 5 years have passed since last update.

実践! OverlayFS

Posted at

先日、OverlayFSについて 調べたので、今回は実際に使ってみて挙動を確かめてみた。

OverlayFSの基礎

ドキュメントには色々書いているが、Overlayfsの基本的な考え方は以下の通り

  1. Readonlyな下の層と、Writableな上の層を重ね合わせ1つのファイルシステムに見せる
  2. このとき、ディレクトリは重ね合わされ、ファイルは上から見ていく
    • コンフリクトしていたらファイルだと上が優先され、ディレクトリだとマージされる
  3. 下(readonly)にしかないファイルを編集すると上にコピーが作成される

実験環境

最新のCoreOSはOverlayFSがマージされたKernel 3.18が入っているので、これのvagrantを使う

$ git clone https://github.com/coreos/coreos-vagrant
$ cd coreos-vagrant
$ vagrant up
$ vagrant ssh

念のため、CoreOSの中でKernelのバージョンを確認しておこう。

core@core-01 ~ $ uname -r
3.18.2

OverlayFSの実験

overlayfsを行うためには、以下の4つのディレクトリが必要

  • work: ワーキングディレクトリ。upperと同じファイルシステムであり、空である必要がある
  • lower: 下の層のディレクトリ。読み込み専用で、様々なファイルシステムが使用できる
  • upper: 上野層のディレクトリ。書き込み可能であり、readdirのd_typeを適切に返す必要がある。このためNFSは使用できない
  • merged: overlayfsのマウント先のディレクトリ

準備

$ mkdir work
$ mkdir upper
$ mkdir lower
$ mkdir merged
$ echo "upper" >> upper/both
$ echo "upper" >> upper/only_upper
$ echo "lower" >> lower/both
$ echo "lower" >> lower/only_lower

必要な4つのディレクトリを作り、挙動を確かめるため以下の3種類のファイルを準備:

  • both: 上下両方に存在するファイル
  • only_upper: 上のみに存在するファイル
  • only_lower: 下のみに存在するファイル

overlayfsでマウント

$ sudo mount -t overlay overlay -o lowerdir=lower,upperdir=upper,workdir=work merged

-tオプションにoverlayと指定することでoverlayfsでマウントすることを示す
-oは、-tで指定したファイルシステムに必要なパラメータを指定する部分。lowerdir,upperdir,workdirのすべての指定が必要。

workdirとかなくても大丈夫だろとたかをくくっていると、悪いところの可能性が豊富すぎるよくわからないエラーが出るので注意。

$ sudo mount -t overlay overlay -o lowerdir=lower,upperdir=upper merged        
mount: wrong fs type, bad option, bad superblock on /home/core/overlay,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

挙動の確認

lsをするとちゃんと3つのファイルが見えている:

$ ls merged
both  only_lower  only_upper

それぞれのファイルの中身を見ると、両方にあるファイルbothの中身は上のものの中身になっている:

core@core-01 ~ $ cat merged/only_lower
lower
core@core-01 ~ $ cat merged/only_upper
upper
core@core-01 ~ $ cat merged/both      
upper

下のみにしか無いファイルをeditすると、上にファイルがコピーされ、それが編集される:

$ ls upper
both  only_upper
$ vi merged/only_lower
$ ls upper
both  only_lower  only_upper

補足

本来overlayfsは何層にも重ねることができ、てっぺんの層以外はReadOnlyでよい。
この時、overlayfs でのマウントのupperdirにもNFSが使える。
このようにする際にはmount-r --read-onlyオプションを使えばよい。

59
56
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
56