首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除除最后一个以外的所有ZFS快照?

问如何删除除最后一个以外的所有ZFS快照?
EN

Server Fault用户
提问于 2011-12-14 12:27:44
回答 6查看 66.6K关注 0票数 44

我目前正在快照我的基于ZFS的NAS每晚和每周,这一过程已经节省了我的屁股几次。但是,虽然快照的创建是自动的(从cron),但删除旧快照仍然是一项手动任务。显然,如果我被总线撞到,或者手动任务没有执行,NAS将耗尽磁盘空间,这是有风险的。

有人有什么好的方法/脚本来管理存储在ZFS系统上的快照数量吗?理想情况下,我希望脚本能够迭代给定ZFS文件系统的所有快照,并删除该文件系统的最后n个快照。

我有两个文件系统,一个叫tank,另一个叫sastank。快照以创建日期命名:sastank@AutoD-2011-12-13,因此一个简单的sort命令应该按顺序列出它们。我希望在tank上保存最后两周的每日快照,但在sastank上只保存最后两天的快照。

EN

回答 6

Server Fault用户

回答已采纳

发布于 2011-12-14 12:59:14

你可能会发现这样的事情更简单一些

代码语言:javascript
复制
zfs list -t snapshot -o name | grep ^tank@Auto | tac | tail -n +16 | xargs -n 1 zfs destroy -r
  • 使用zfs list -t snapshot -o name输出快照列表(仅为名称)
  • 过滤器,只保留与tank@Auto和grep ^tank@Auto匹配的
  • 用tac反转列表(以前从最老到最新)
  • 将输出限制为第16最老的结果,然后使用tail -n +16
  • 然后用xargs -n 1 zfs destroy -vr摧毁

按反向顺序删除快照应该更有效,或者按创建的相反顺序排序。

代码语言:javascript
复制
zfs list -t snapshot -o name -S creation | grep ^tank@Auto | tail -n +16 | xargs -n 1 zfs destroy -vr

用...|xargs -n 1 echo测试它。

票数 60
EN

Server Fault用户

发布于 2016-11-11 02:21:33

这完全不能回答问题本身,但别忘了你可以删除快照的范围。

zfs销毁zpool1 1/dataset@20160918%20161107

会破坏从"20160918“到"20161107”的所有快照。两端可以留空,意思是“最老的”或“最新的”。这样你就可以编造出"n“然后销毁”...%n“。

抱歉,我又问了一个老问题。

票数 37
EN

Server Fault用户

发布于 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:管对头,只返回第一行。

票数 25
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/340837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档