aufs/overlayfs/btrfs bugs

githubに移転しました．今後は基本的にはgithub版を更新します．
https://github.com/AkihiroSuda/docker-issues

* * * 
Dockerのストレージとして用いられるファイルシステムのバグのリスト(随時更新)

## AUFS
|issue|概要|原因|簡単な解決策|
|---|---|---|---|
|[#783](https://github.com/docker/docker/issues/783)|パーミッションがおかしい|AUFSの仕様．dirperm1をサポートするカーネルでは問題ない．|[dirperm1をサポートするカーネルに更新](https://github.com/docker/docker/issues/783#issuecomment-146455363)
|[#18180](https://github.com/docker/docker/issues/18180)|プロセスがゾンビになって刺さる|カーネル本体のバージョンとAUFSのバージョンとの相性|[AUFS 20160111以降にカーネル更新](https://github.com/docker/docker/issues/18180#issuecomment-179002757)|
|[#20199(Open)](https://github.com/docker/docker/issues/20199)|fcntl(F_SETFL, O_APPEND)が無視される|AUFSのバグ|なし(あるいはカーネルに[パッチ](https://github.com/docker/docker/issues/20199#issuecomment-182944585)を当てて野良ビルド)|
|[#20240(Open)](https://github.com/docker/docker/issues/20240)|dirperm1が有効でもパーミッションがおかしい|未解析|なし|

## OverlayFS
|issue|概要|原因|簡単な解決策|
|---|---|---|---|
|[#10180(Open)](https://github.com/docker/docker/issues/10180)|checksumエラーでyumが失敗する|ファイルディスクリプタに関するoverlayfsの仕様([1](https://bugzilla.redhat.com/show_bug.cgi?id=1213602#c0),[2](https://github.com/portworx/overlayfs))|`yum-plugin-ovl`パッケージを入れる|
|[#12080(Open)](https://github.com/docker/docker/issues/12080)|UNIXドメインソケットが使えない|overlayfsのバグ|なし(あるいはカーネルに[パッチ](https://github.com/docker/docker/issues/12080#issuecomment-146946771)を当てて野良ビルド)|
|[#19082(Open)](https://github.com/docker/docker/issues/19082)|カレントディレクトリの削除に失敗したときの挙動がおかしい|overlayfsのバグ|なし(あるいはカーネルに[パッチ](https://lkml.org/lkml/2016/1/8/482)を当てて野良ビルド)|
|[#19647(Open)](https://github.com/docker/docker/issues/19647)|symlinkを含むtarの展開が非決定的に失敗する|未解析|なし|
|[#19758(Open)](https://github.com/docker/docker/issues/19758)|run,removeを頻繁に繰り返すとハングアップ|未解析|なし|

#### バグとまでは言えないが懸念事項
* inode消費量が多い

## BtrFS
|issue|概要|原因|簡単な解決策|
|---|---|---|---|
|[#19073](https://github.com/docker/docker/issues/19073)|`sendfile(2)`が刺さる|btrfsのバグ|なし|
|[#20080(Open)](https://github.com/docker/docker/issues/20080)|cgroups kmem limit値を設定するとクラッシュ，データロス|btrfsのバグ|kmem limitの設定を避ける?|
#### バグとまでは言えないが懸念事項
* 遅い [#10161](https://github.com/docker/docker/issues/10161)
* ページが共有されない (DLLなどが重複して読み込まれる) http://comments.gmane.org/gmane.comp.sysutils.docker.devel/1384

## ZFS
|issue|概要|原因|簡単な解決策|
|---|---|---|---|
|[#20153(Open)](https://github.com/docker/docker/issues/20153)|諸々の操作がEBUSYでfail|未解析|なし|

## DeviceMapper (ファイルシステムではないが)
|issue|概要|原因|簡単な解決策|
|---|---|---|---|
|[#4036](https://github.com/docker/docker/issues/4036)|マウントできない|udev syncが無効|udev syncが有効なdaemonバイナリを使う|
|[#5684(Open)](https://github.com/docker/docker/issues/5684)|daemon再起動後，既存コンテナをstartできない|未解析(DeviceMapperとは関係ない?)|なし (daemon stop前にコンテナを全部手動で止める方法もあるが，耐障害性がない)|

#### バグとまでは言えないが懸念事項
 * 遅い [#10161](https://github.com/docker/docker/issues/10161)
 * ページが共有されない (DLLなどが重複して読み込まれる) http://comments.gmane.org/gmane.comp.sysutils.docker.devel/1384

## 結局どのファイルシステムがよいのか
実際の品質的にはいずれも似たり寄ったりで，どのファイルシステムが特別によいとは言えない．

コミュニティのサポート状況についても微妙であるが，devicemapperが多少ましかもしれない．Docker, Inc.としてはAUFSとdevicemapperが"production-ready"とのこと．

![ストレージドライバ比較](https://raw.githubusercontent.com/docker/docker/89923c1f32aeff5bf11fbb04723dd0e154559545/docs/userguide/storagedriver/images/driver-pros-cons.png)

|FS|サポート状況に関する注意点(2016/02/03時点)|
|---|---|
|AUFS|カーネルのメインラインにマージされていない．UbuntuとBoot2Dockerくらいでしか使えない．Ubuntuでも[廃止予定](https://lists.ubuntu.com/archives/ubuntu-devel/2012-March/034880.html)．|
|OverlayFS|RHELではOverlayFS自体が[Tech Preview扱い](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/7.2_Release_Notes/technology-preview-file_systems.html)．|
|BtrFS|DockerのBtrFSドライバは[Experimental](https://docs.docker.com/engine/userguide/storagedriver/btrfs-driver/)扱い．RHELではBtrFS自体が[Tech Preview扱い](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/7.2_Release_Notes/technology-preview-file_systems.html)．|

コンテナの起動が遅くなっても良いなら，これらのCopy-on-Writeファイルシステムは使わず，VFSバックエンドを使うのが無難かもしれない．

### いずれにせよ..
persistent data(及び，頻繁にアクセスする一時ファイル)はコンテナのファイルシステムにはおかず，外部ボリューム(`-v`)に置くのが安心．

コンテナのファイルシステムは基本，リードオンリーな領域として考えるべき．
書き込みはあくまで使い捨て用途．