目录
什么是OverlayFS
xfs文件系统的 d_type是什么
为什么docker在overlay2(xfs文件系统)需要d_type
什么是OverlayFS
首先,OverlayFS是一更现代的联合文件系统,类似于AUFS,但速度更快,实现更简单。Docker为OverlayFS提供了两个存储驱动程序:原始版本overlay,更新版本更稳定overlay2。
目前OverlayFS是dokcer在使用的最新的文件系统,其他的文件系统还有:aufs、device mapper等。
注意:如果使用OverlayFS,请使用overlay2驱动程序而不是 overlay驱动程序,因为它在inode利用率方面更有效。
更准确的说,OverlayFS其实是 Linux文件系统的一种上层文件系统。它的底层文件系统(backing filesystem):
①:EXT4
②:XFS(必须在格式化为xfs时,指定ftype=1或者d_type=true,如果在未使用ftype=1的方式格式化的OverlayFS文件系统上使用,docker可能出现未知问题)
如何查看当前操作是否支持overlay
lsmod |grep overlay
如果没有输出,表示不支持,可以通过下面的命令开启overlay
modprobe overlay
需要注意的是:
- docker要使用 overlay2的话,Version 4.0 or higher of the Linux kernel, or RHEL or CentOS using version 3.10.0-514 of the kernel or higher.
- overlay2 driver is supported for Docker EE 17.06.02-ee5 and later and recommended for Docker CE.
- The overlay driver is allowed but not recommended for Docker CE.
xfs文件系统的 d_type是什么
d_type 是 Linux 内核的一个术语,表示 “目录条目类型”,而目录条目,其实是文件系统上目录信息的一个数据结构。d_type,就是这个数据结构的一个字段,这个字段用来表示文件的类型,是文件,还是管道,还是目录还是套接字等。
d_type 从 Linux 2.6 内核开始就已经支持了,只不过虽然 Linux 内核虽然支持,但有些文件系统实现了 d_type,而有些,没有实现,有些是选择性的实现,也就是需要用户自己用额外的参数来决定是否开启d_type的支持。
为什么docker在overlay2(xfs文件系统)需要d_type
不论是 overlay,还是 overlay2,它们的底层文件系统都是 OverlayFS文件系统。而 OverlayFS文件系统,就会用到 d_type 这个东西用来文件的操作是被正确的处理了。换句话说,docker只要使用 overlay 或者 overlay2,就等于在用 overlayfs,也就一定会用到 d_type。
docker info命令可以检测你docker服务,是否在使用overlay的时候正确的使用 d_type。如果用了 overlay/overlay2,但 d_type 没有开,就报警告。
如果在不支持 d_typ 的 overlay/overlay 驱动下使用docker,也就意味着 docker 在操作文件的时候,可能会遇到一些错误,比如 无法删除某些目录或文件,设置文件或目录的权限或用户失败等等。这些都是不可预料的错误。举个具体的场景,就是,docker构建的时候,可能在构建过程中,删除文件等操作失败,导致构建停止。
# xfs_info /
它用于检测指定挂载点的文件xfs文件系统的信息。如果你的文件系统是 xfs,则会提示类似如下信息
$ xfs_info /
meta-data=/dev/sda1 isize=256 agcount=4, agsize=3276736 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0 spinodes=0
data = bsize=4096 blocks=13106944, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=6399, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
注意其中的 ftype,1表示支持 d_type,0表示不支持。