zfs:文件系统具有依赖克隆

问题描述 投票:0回答:2

我正在运行 Ubuntu 20.04 并在我的系统驱动器上使用 zfs。

我正在尝试删除 docker 容器,但出现此错误:

glen $ docker rm c3250e315b06
Error response from daemon: container c3250e315b0631cc7fee17ab0c7f649a3995ea17e969705117e064a045b3775e: driver "zfs" failed to remove root filesystem: exit status 1: "/usr/sbin/zfs fs destroy -r rpool/ROOT/ubuntu_bl0u7i/var/lib/120f50d109cf1c84f20db9e6402fef9a4bd91fa8b94f1848a874539663bbdc40" => cannot destroy 'rpool/ROOT/ubuntu_bl0u7i/var/lib/120f50d109cf1c84f20db9e6402fef9a4bd91fa8b94f1848a874539663bbdc40': filesystem has dependent clones
use '-R' to destroy the following datasets:
rpool/ROOT/ubuntu_bl0u7i/var/lib/38ff67538bf4b2ccfef54cfeb55847cf6da6bee70a6bf2e5b063ab0e5820c0fd
rpool/ROOT/ubuntu_bl0u7i/var/lib/120f50d109cf1c84f20db9e6402fef9a4bd91fa8b94f1848a874539663bbdc40-init

我不知道从哪里开始出现错误。

有人可以帮忙吗?

编辑:

我从这个评论中修复了它:https://github.com/moby/moby/issues/36967#issuecomment-676698563

但它炸毁了我所有的容器

docker ubuntu zfs
2个回答
0
投票

我不确定如何通过 Docker 来完成此操作,但 ZFS 告诉您文件系统

rpool/ROOT/ubuntu_bl0u7i/var/lib/120f50d...bbdc40
有几个从该文件系统上的快照创建的克隆。为了便于讨论,我们假设只有一个,克隆的文件系统称为
clone1
,它是根据
snapshot1
文件系统上的
rpool/...bbdc40
创建的。所以你的层次结构是这样的:

rpool/...bbdc40 -> rpool/...bbdc40@snapshot1 -> clone1

问题在于

clone1
仍在引用
snapshot1
中的数据,因此您无法删除快照,这会阻止您删除原始文件系统。

但是,ZFS 允许您使用

zfs promote
命令更改“父”文件系统,该命令可让您将层次结构更改为:

clone1 -> clone1@snapshot1 -> rpool/...bbdc40

现在没有人依赖于

rpool/...bbdc40
中的数据(因为快照已移至新提升的父级
clone1
上),因此您可以将其删除。

(也就是说,Docker 可能假设它对其文件系统的状态具有完全控制权,因此,如果您四处运行随机 ZFS 命令,它可能会让 Docker 感到悲伤和困惑。使用风险由您自行承担。)


0
投票

我有确切的问题,正打算按照你的评论建议去做,但我没有 想要失去portainer。 因此,在我用核武器摧毁一切之前,作为最后的努力,我尝试用 Midnight Commander 强行删除 docker 容器,幸运的是,它成功了。

我没有意识到 ZFS 有这些致命缺陷,并且将来可能不会使用它,除非这个问题得到修复(2025 年我写这篇文章时)

© www.soinside.com 2019 - 2024. All rights reserved.