CoreOSが最近btrfsをやめてoverlayfsに移行するという発表をしたのでoverlayfsについて簡単に調べてみた。
そもそもFileSystemとは
Wikipedia 英語版 の説明がわかりやすい。
In computing, a file system (or filesystem) is used to control how data is stored and retrieved. Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins. By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified. Taking its name from the way paper-based information systems are named, each group of data is called a "file". The structure and logic rules used to manage the groups of information and their names is called a "file system".
http://en.wikipedia.org/wiki/File_system
簡単にポイントを抽出すると、
- ファイルシステムとは、どうやってデータを格納し探しだすかを制御する仕組み
- ファイルシステムが無いと、ストレージに入れられた情報が、ただのデータの塊になってしまい、どこからどこまでが1つの情報で次はどこから始まるかがわからなくなってしまう
- データを情報のピースに分けて、そのピースに名前を与える
- これら情報のピースの集合と名前をどう管理するかという仕組みがファイルシステムと呼ばれる
OverlayFSとは
UnionFSと言われる、分離したファイルシステムのファイルやディレクトリを透過的に重ねることができる仕組みの実装の1つ
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/overlayfs.txt
(日本語訳)
以下メモ
- overlayfsは上の層と下の層をマージして1つのファイルシステムに見せる仕組み
- ディレクトリだけマージするが、その他のファイルは単純に上だけが見える。上がない場合は下が見える
- このマージは、statやreaddirなどのシステムコールの値を何と報告するかを適切に調整することにより行われる
- 下の層はReadonly、上の層はReadonly/Writableどちらでも良い
- Readonlyの層はNFSや別のoverlayfsでも良い
- Wratableの時は、trusted.*拡張属性と、readdirのd_typeを返す必要があり、NFSではいけない
- Readonlyな削除を実現するため、そのディレクトリ以下のファイルを見せなくするwhiteoutという機能がある
- 上だけを見せて下を見せないという不透明というモードもある
- 下の層に対して書き込みをする際、
copy_up
と言い、上の層に内容がディレクトリ階層/メタ情報ごとコピーされる
OverlayFSに関するニュース
- [2014/12/6] overlayfsはlinuxカーネル3.18にマージされた
- [2014/12/9] linux 3.19ではmultilayer overlayfsをサポート
- [2015/1/18] CoreOSはbtrfsをext4+overlayfsに移すことに決めた
- btrfs は単にUnionFSなだけでなく、高速さや大きいファイルの扱いなどかなりアグレッシブな目標を掲げている分、仕様もFixしていなく、問題も多いらしい。
追記
OverlayFSの挙動を簡単に実験してみました!
http://qiita.com/awakia/items/af9b46c322905cdce1d7