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

您可以使用zfs destroy <dataset>删除ZFS文件系统(或其他数据集)。 如果数据集包含子项(包括快照),则失败。 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 

我已经testing了它,它确实是我想要的。

我没有testing过,但是我在其他文章中看到你可以删除所有的快照:

 zfs destroy -rv dataset_or_vol_name@% 

然后可以使用destroy命令进行后续操作以删除数据库。

这不是一个class轮,但你可以使用输出

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

并有一个脚本通过它,仔细validation的东西,并摧毁适当的文件系统。