ZFS 删除具有相互依赖关系的快照和克隆

ZFS 删除具有相互依赖关系的快照和克隆

下面是我的 ZFS 卷和快照列表,以及每个卷和快照的来源和克隆。

我想删除所有快照,但保留所有文件系统。我怎样才能做到这一点?

我尝试zfs promote删除每个文件系统,并尝试了多种不同的文件系统组合。这会改变快照的“实时”位置;例如,zfs promote tank/containers/six将快照F从移动tank/containers/three@Ftank/containers/six@F。文件系统中的实时数据没有被修改(这正是我想要的!),但我仍然无法删除快照(这不是我想要的)。

典型的zfs destroy尝试告诉我它有依赖的克隆,其中一些(快照)我我想销毁,但其他的(文件系统)我不要想要毁掉。

例如。

# zfs destroy tank/containers/six@A
cannot destroy 'tank/containers/six@A': snapshot has dependent clones
use '-R' to destroy the following datasets:
tank/containers/five
tank/containers/two@B
tank/containers/two

在上面的例子中,我不想销毁tank/containers/fivetank/containers/two,但如果我zfs promote五和二,我仍然无法销毁任何快照。有解决方案吗?

# zfs list -t all -o name,origin,clones
NAME                         ORIGIN                       CLONES
tank                         -                            -
tank/containers              -                            -
tank/containers/five         tank/containers/two@B        -
tank/containers/four         tank/containers/six@C        -
tank/containers/one          -                            -
tank/containers/one@E        -                            tank/containers/three
tank/containers/two          tank/containers/six@A        -
tank/containers/two@B        -                            tank/containers/five
tank/containers/six          tank/containers/three@F      -
tank/containers/six@A        -                            tank/containers/two
tank/containers/six@C        -                            tank/containers/four
tank/containers/three        tank/containers/one@E        -
tank/containers/three@F      -                            tank/containers/six

答案1

据我所知,您必须将这些数据集复制到新的独立数据集中。提升只是切换哪个数据集是“父”数据集还是“子”数据集,如果您想保留两者,它实际上不会破坏任何依赖关系。

例如:

root@box~# zfs snapshot tank/containers/six@1 
root@box~# zfs send tank/containers/six@1 | pv | zfs receive tank/containers/newsix  
root@box~# zfs destroy -R tank/containers/six  
root@box~# zfs destroy tank/containers/three@F 
root@box~# zfs rename tank/containers/newsix tank/containers/six

慢慢来,确定自己在做什么。尤其是实际删除时。

此复制是逐块进行的,因此如果其中有任何重要数据,则需要一段时间。此pv部分完全是可选的,但会为您提供一个进度条,供您在等待时查看。

也许还可以考虑合子现在和将来都可以自动执行复制任务。(声明:我是此工具的原作者,该工具遵循 GPLv3 许可,可免费使用。)

相关内容