类型 | 版本/名称
--- | ---
分布名称 | 任何
发行版 | 任何
Linux 内核 | 任何
建筑 | 任何
ZFS 版本 | 任何
声压级版本 | 任何
这更像是一个功能请求而不是一个错误。 我找不到任何人积极跟踪这个问题,但是我知道 docker 的用户在声明 ZFS 有问题之后已经停止使用 ZFS,这很不幸。
在 zfs 数据集上使用 docker 时,唯一的选择是 docker 的“zfs 驱动程序”,它使用 zfs 数据集操作来创建分层文件系统。 在 ext4 和 btrfs 等其他文件系统上,可以使用“overlay2 驱动程序”(利用内核的 overlayfs 模块),速度非常快。 Docker 构建时间可以从 ext4/overlay2 上的几分之一秒到 zfs/zfs 上的几分钟。
overlay2 驱动程序选择当前被 docker 在 zfs 上列入黑名单:
https://github.com/moby/moby/blob/master/daemon/graphdriver/overlay2/overlay.go#L165
请注意,btrfs 在内核 4.7 中添加了必要的支持:
https://github.com/moby/moby/blob/master/daemon/graphdriver/overlay2/overlay.go#L169
从性能的角度来看:
构建具有多个层的 Dockerfile 的时间如下:
time docker build . -t date_image
```Dockerfile
从头开始
CMD [日期]
CMD [日期]
CMD [日期]
CMD [日期]
CMD [日期]
From a functional perspective:
```c
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <linux/fs.h>
#include <sys/syscall.h>
int main()
{
int ret;
ret = syscall(SYS_renameat2, 0, "/zfs/file1", 0, "/zfs/file2", RENAME_EXCHANGE);
fprintf(stderr, "renameat2 ret=%d errno=%d\n", ret, errno);
return ret;
}
对 RENAME_WHITEOUT 标志也重复测试。
我相信在 renameat2() 中实现了 RENAME_EXCHANGE 和 RENAME_WHITEOUT 之后,我们应该能够在 ZFS 上使用 docker w/overlay2
我一直在研究这个, renameat2(2)
标志支持不足以让 overlayfs-on-ZFS 工作。 主要的障碍是当前 ZFS 使用d_revalidate
,这意味着 overlayfs 拒绝将其用作上层目录。 为了修复它(除了#8667),我们需要重新编写大量移植的dcache
-interacting 代码,以便不再需要d_revalidate
。
此问题已被自动标记为“陈旧”,因为它已经有一段时间没有任何活动了。 如果没有进一步的活动,它将在 90 天内关闭。 感谢你的贡献。
太糟糕了 stalebot 没有完成相关工作 - 似乎@snajpa即将完成。
是的,我终于开始为 ZFS 回滚编写测试了,在 #9600 中需要……至少给我几天的时间来制作原型 :)
最有用的评论
是的,我终于开始为 ZFS 回滚编写测试了,在 #9600 中需要……至少给我几天的时间来制作原型 :)