LoginSignup
14
15

More than 5 years have passed since last update.

DockerでOverlayFS over XFSするために

Last updated at Posted at 2016-06-13

OverlayFSは上側に重ねるファイルシステムがファイルタイプを返すd_typeをサポートしていないと使えません。d_typeをサポートしないファイルシステムでOverlayするとwhiteoutファイルをDT_CHRと判定できないため、消したはずのファイル(やディレクトリ)が中途半端に見えてしまいます。

実際にどうなるかというと

Dockerfile
FROM busybox
RUN mkdir /tmp/a; touch /tmp/a/b
RUN rm -rf /tmp/a

このDockerfileでコンテナイメージをdocker buildすると失敗します。

$ docker build -t amatsus/ovl-test .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM busybox
 ---> 63e6ca37d7f4
Step 2 : RUN mkdir /tmp/a; touch /tmp/a/b
 ---> Running in fb1dcc19fabb
 ---> e5cf048d5b44
Step 3 : RUN rm -rf /tmp/a
 ---> Running in 7a0b086ad4e9
rm: can't remove '/tmp/a': Directory not empty
The command '/bin/sh -c rm -rf /tmp/a' returned a non-zero code: 1

Btrfsやext2/3/4はd_typeをサポートしていますが、XFSもd_typeをサポートしています。ですが現時点ではデフォルトで有効になるディストリビューションは少ないと思います。d_typeを使えるようにするにはXFS v4フォーマットにFTYPEフィールドを付与するか、v5フォーマットでフォーマットします。

xfsprogs-3.2.0から3.2.2まで
# mkfs.xfs -n ftype=1 <device>
もしくは
# mkfs.xfs -m crc=1 <device>

xfsprogs 3.2.3以降ではcrc=1がデフォルトになったので、mkfs.xfsにオプションをつけずにv5でフォーマットするか、crc=0にした上でFTYPEフィールドを追加します。

xfsprogs-3.2.3以降
# mkfs.xfs <device>
もしくは
# mkfs.xfs -m crc=0 -n ftype=1 <device>

次のコマンドでFTYPEが有効であることを確認できます。

# xfs_db -r -c version /dev/mapper/centos-root
versionnum [0xb4b4+0x28a] = V4,ATTR,NLINK,ALIGN,DIRV2,LOGV2,EXTFLG,MOREBITS,ATTR2,LAZYSBCOUNT,PROJID32BIT,FTYPE
# xfs_info /var/lib/docker| grep ftype
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1

ちなみにFTYPEが有効でないときは

# xfs_db -r -c version /dev/mapper/centos-root
versionnum [0xb4b4+0x8a] = V4,ATTR,NLINK,ALIGN,DIRV2,LOGV2,EXTFLG,MOREBITS,ATTR2,LAZYSBCOUNT,PROJID32BIT
# xfs_info /var/lib/docker| grep ftype
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0

参考

14
15
2

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
14
15