删除只有快照但没有其他子文件系统的 ZFS 文件系统?

删除只有快照但没有其他子文件系统的 ZFS 文件系统?

您可以使用 删除 ZFS 文件系统(或其他数据集)zfs destroy <dataset>。如果数据集有子级(包括快照),则删除会失败。 zfs destroy -r <dataset>将删除文件系统及其子级,但也会销毁文件系统的任何非快照子级。有没有简洁的方式来表示“删除此文件系统及其快照,但前提是它没有非快照子级”?

基本上,我有许多嵌套文件系统,并且广泛使用快照,用于复制和廉价备份。我希望有一种方法可以轻松删除子文件系统及其快照(例如zfs destroy tank/container/leaf),同时提供一定程度的保护,以防止意外破坏整个文件系统集合(例如zfs destroy tank/container<enter>leaf

如果有必要的话,我会在带有 Scientific Linux 7 的 Linux 上使用 ZFS。


解决方案

根据 longneck 的评论,我可以用两行来做到这一点:

zfs destroy tank/example/leaf@%
zfs destroy tank/example/leaf

我已经测试过它并且它完全符合我的要求。

答案1

我还没有测试过,但我在其他帖子中看到你可以像这样删除所有快照:

zfs destroy -rv dataset_or_vol_name@%

然后您可以按照命令destroy删除数据库。

答案2

这不是一行代码,但你可以使用

zfs list -t all -r -H <dataset>

并让脚本执行它,仔细验证事物并销毁相应的文件系统。

相关内容