solaris – 如何删除除最后[n]个ZFS快照之外的所有快照?

我目前正在每晚和每周快照我的基于ZFS的NAS,这个过程已经拯救了我的屁股几次.但是,虽然创建快照是自动的(来自cron),但删除旧快照仍然是手动任务.显然存在这样的风险:如果我被总线击中,或者没有执行手动任务,则NAS将耗尽磁盘空间.

有没有人有他们用来管理ZFS系统上存储的快照数量的好方法/脚本?理想情况下,我想要一个脚本来遍历给定ZFS文件系统的所有快照,并删除除该文件系统的最后n个快照之外的所有快照.

例如.我有两个文件系统,一个叫tank,另一个叫sastank.快照以创建它们的日期命名:sastank @ AutoD-2011-12-13所以一个简单的排序命令应该按顺序列出它们.我希望在坦克上保留最近2周的每日快照价值,但只有最后两天的价值快照在sastank上.

最佳答案
你可能会发现这样的事情有点简单

zfs list -t snapshot -o name | grep ^tank@Auto | tac | tail -n +16 | xargs -n 1 zfs destroy -r

>使用zfs list -t snaphot -o name输出快照列表(仅限名称)
>过滤只保留与tank @ Auto匹配的那些与grep ^ tank @ Auto
>使用tac反转列表(先前从最旧到最新排序)
>将输出限制为第16个最早的结果,然后使用tail -n 16
>然后用xargs -n 1 zfs destroy -vr销毁

以相反的顺序删除快照据说效率更高.

或者按照相反的顺序排序

zfs list -t snapshot -o name -S creation | grep ^tank@Auto | tail -n +16 | xargs -n 1 zfs destroy -vr

用…测试它| | xargs -n 1 echo

转载注明原文:solaris – 如何删除除最后[n]个ZFS快照之外的所有快照? - 代码日志