美文网首页docker and K8SUbuntu
基于XFS文件系统的overlayfs下使用docker,为何要

基于XFS文件系统的overlayfs下使用docker,为何要

作者: 海角之南 | 来源:发表于2018-08-16 01:13 被阅读1004次

    什么是overlayfs

    首先,overlayfs是一种文件系统,也是目前dokcer在使用的最新的文件系统,其他的文件系统还有:aufs、device mapper等。而 overlayfs 其实和 aufs 是类似的。更准确的说,overlayfs,其实是 Linux 文件系统的一种上层文件系统。下面的底层的文件系统格式,是支持overlayfs的:

    ①:ext4

    ②:xfs(必须在格式化为xfs的是,指定ftype=1,如果在 未使用ftype=1的方式格式化的xfs文件系统上使用,否则docker可能出现未知问题)

    如何查看当前操作是否支持overlay

    lsmod |grep over
    

    如果没有输出,表示不支持,可以通过下面的命令开启overlay

    modprobe overlay
    

    需要注意的是:

    ①:docker官方,建议使用 overlay2,而不是 overlay,因为 overlay2 更高效。要使用 overlay2的话,需要 Linux 内核在版本4以上。

    ②:docker 官方建议,在 docker-ee 17.06.02及以上的版本使用 overlay2,以及,在docker-ce的版本,也使用 overlay2。而 overlay 虽然在 docker-ce 版本中是支持的,但是并不推荐。

    ③:只要当前操作系统支持overlay,那docker就可以使用overlay或者overlay2了。

    ④:指定docker的overlay2驱动,需要在启动docker的时候,指定 --storage-driver 参数,或者,在配置文件 /etc/docker/daemon.json 中 ,指定驱动配置

    {
      "storage-driver": "overlay2",
      "storage-opts": [
        "overlay2.override_kernel_check=true"
      ]
    }
    

    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 提供了

    docker info
    

    此命令,用来检测你docker服务,是否在使用overlay的时候正确的使用 d_type。如果用了 overlay/overlay2,但 d_type 没有开,就报警告。

    如果在不支持 d_typ 的 overlay/overlay 驱动下使用docker,也就意味着 docker 在操作文件的时候,可能会遇到一些错误,比如 无法删除某些目录或文件,设置文件或目录的权限或用户失败等等。这些都是不可预料的错误。举个具体的场景,就是,docker构建的时候,可能在构建过程中,删除文件等操作失败,导致构建停止。

    如何检测当前的文件系统,是否支持 d_type ?

    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表示不支持。

    参考:

    https://linuxer.pro/2017/03/fix-chown-error-discourse-bootstrap/

    https://linuxer.pro/2017/03/what-is-d_type-and-why-docker-overlayfs-need-it/

    https://blog.csdn.net/zxf_668899/article/details/54667521

    https://docs.docker.com/storage/storagedriver/overlayfs-driver/

    相关文章

      网友评论

        本文标题:基于XFS文件系统的overlayfs下使用docker,为何要

        本文链接:https://www.haomeiwen.com/subject/usogbftx.html