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


9

以下是我的ZFS卷和快照的列表,以及它们的来源和克隆。

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

我尝试zfs promote过尝试删除文件系统的许多不同组合的每个文件系统。这会在快照的“实时”位置移动;例如,zfs promote tank/containers/six将快照Ftank/containers/three@F移到tank/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 promote5和2,则仍然无法销毁任何快照。有解决方案吗?

# 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

Answers:


9

AFAIK您将不得不将那些数据集复制到新的独立数据集中。升级只切换哪个数据集是“父级”还是“子级”,如果您想同时保留两个依赖关系,实际上并不会破坏任何依赖关系。

例如:

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部分严格是可选的,但是会在您等待时为您提供进度条。

现在或将来,也可以考虑使用syncoid自动执行复制任务。(强制性:我是该工具的原始作者,该工具已获得GPLv3许可,可以免费使用。)


吉姆,请透露您与晕厥的隶属关系。根据网站规则:“发布好的,相关的答案,并且如果某些(但不是全部)碰巧是关于您的产品或网站的,那没关系。但是,您必须在答案中公开您的从属关系。”
Costin Gușă

Costin很高兴-没意识到这没什么大不了的,因为我直接链接到GitHub存储库项目,并且没有对咨询服务发表任何言论。
吉姆·萨尔特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.