我目前正在快照我的基于ZFS的NAS每晚和每周,这一过程已经节省了我的屁股几次。但是,虽然快照的创建是自动的(从cron),但删除旧快照仍然是一项手动任务。显然,如果我被总线撞到,或者手动任务没有执行,NAS将耗尽磁盘空间,这是有风险的。
有人有什么好的方法/脚本来管理存储在ZFS系统上的快照数量吗?理想情况下,我希望脚本能够迭代给定ZFS文件系统的所有快照,并删除该文件系统的最后n个快照。
我有两个文件系统,一个叫tank,另一个叫sastank。快照以创建日期命名:sastank@AutoD-2011-12-13,因此一个简单的sort命令应该按顺序列出它们。我希望在tank上保存最后两周的每日快照,但在sastank上只保存最后两天的快照。
发布于 2011-12-14 12:59:14
你可能会发现这样的事情更简单一些
zfs list -t snapshot -o name | grep ^tank@Auto | tac | tail -n +16 | xargs -n 1 zfs destroy -rzfs list -t snapshot -o name输出快照列表(仅为名称)tank@Auto和grep ^tank@Auto匹配的tac反转列表(以前从最老到最新)tail -n +16xargs -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测试它。
发布于 2016-11-11 02:21:33
这完全不能回答问题本身,但别忘了你可以删除快照的范围。
zfs销毁zpool1 1/dataset@20160918%20161107
会破坏从"20160918“到"20161107”的所有快照。两端可以留空,意思是“最老的”或“最新的”。这样你就可以编造出"n“然后销毁”...%n“。
抱歉,我又问了一个老问题。
发布于 2013-09-01 10:20:38
更一般的情况是,根据创建日期而不是名称获取最近的快照。
zfs list -H -t snapshot -o name -S creation | head -1
作用域为特定的文件系统名称TestOne。
zfs list -H -t snapshot -o name -S creation -d1 TestOne | head -1
-H:没有头,所以第一行是快照名称
-t snapshot:列表快照(列表可以列出其他事情,如池和卷)
-o name:显示快照名称属性。
-S creation:大写S表示基于创建时间的降序排序。这将最近的快照作为第一行。
-d1 TestOne:表示包含子命令,这似乎让人感到困惑,但这是因为就该命令而言,TestOne的快照是子命令。这将不会列出TestOne中的卷快照(如TestOne/SubVol@someSnapshot )。
| head -1:管对头,只返回第一行。
https://serverfault.com/questions/340837
复制相似问题