从docker文档中我们可以看到以下内容https://docs.docker.com/storage/storagedriver/overlayfs-driver/#prerequisites
警告:在不支持 d_type 的 XFS 上运行现在会导致 Docker 跳过使用 overlay 或 overlay2 驱动程序的尝试。现有安装将继续运行,但会产生错误。这是为了让用户迁移他们的数据。在未来版本中,这将是一个致命错误,这将阻止 Docker 启动。
不明白这句话- This is to allow users to migrate their data
???
这里真正的问题是什么?(举几个例子会很有用)
答案1
在挂载期间,请确保上层 fs 支持 d_type,否则会出错。
在某些情况下,xfs 已使用 ftype=0 创建,并且如果删除了较低 fs 上的文件,则覆盖会在上述 fs 中留下空白,但该空白不会被过滤掉,并且对覆盖 fs 用户可见。
并且它没有被过滤掉的原因是,上层文件系统在 iterate_dir() 期间没有将 whiteout 的文件类型报告为 DT_CHR。
因此,似乎需要上层文件系统支持 d_type,overlayfs 才能正常工作。在挂载期间进行此检查,如果不支持 d_type,则会失败。
RedHat 有记录要求:
请注意,创建 XFS 文件系统时必须启用 -n ftype=1 选项才能用作覆盖。
这可能会产生不良后果,例如破坏删除目录的能力因为目录永远不能被清空。也有人认为破坏图像构建。如果出现任何其他问题,docker 将不会为该配置提供任何支持,因为它已知会导致问题。
来自手册页,该选项的效果如下:
ftype=value
This feature allows the inode type to be stored in
the directory structure so that the readdir(3) and
getdents(2) do not need to look up the inode to
determine the inode type.
The value is either 0 or 1, with 1 signifying that
filetype information will be stored in the
directory structure. The default value is 1.