问题
我已经可以手动检查文件系统的每个快照。
我更愿意一次检查所有内容(全部使用单个命令或脚本)。请:
- 可以用脚本来完成吗?
对于名称中有空格的文件系统,答案应该是好的。
背景
从 zfs(8) 的手册页:
zfs holds [-H] [-r] snapshot…
... -r
指定将具有给定标记的保留递归地应用于所有后代文件系统的快照。
我想知道最近的快照是否被视为旧快照的后代。不:
Last login: Sat Dec 8 09:02:26 on ttys003
macbookpro08-centrim:~ gjp22$ zfs holds -r gjp22@2012-12-08-081957
NAME TAG TIMESTAMP
macbookpro08-centrim:~ gjp22$ zfs holds -r gjp22@2012-10-28-212255
NAME TAG TIMESTAMP
gjp22@2012-10-28-212255 problem with LocalStorage for WOT for Safari Mon Oct 29 6:44 2012
macbookpro08-centrim:~ gjp22$ zfs hold experiment gjp22@2012-12-08-081957
macbookpro08-centrim:~ gjp22$ zfs holds -r gjp22@2012-10-28-212255
NAME TAG TIMESTAMP
gjp22@2012-10-28-212255 problem with LocalStorage for WOT for Safari Mon Oct 29 6:44 2012
macbookpro08-centrim:~ gjp22$ zfs holds -r gjp22@2012-12-08-081957
NAME TAG TIMESTAMP
gjp22@2012-12-08-081957 experiment Sat Dec 8 9:04 2012
macbookpro08-centrim:~ gjp22$ zfs holds -r gjp22@2012-10-28-212255
NAME TAG TIMESTAMP
gjp22@2012-10-28-212255 problem with LocalStorage for WOT for Safari Mon Oct 29 6:44 2012
macbookpro08-centrim:~ gjp22$
澄清
我不打算在单个命令或脚本中结合检查和销毁。这个问题本质上是关于支票的。
不确定 2012 年的情况如何,但现在您可以查看该
userrefs
物业:列出所有池中的所有保留:
zfs get -Ht snapshot userrefs | grep -v $'\t'0 | cut -d $'\t' -f 1 | tr '\n' '\0' | xargs -0 zfs holds
对于具有多个文件系统的池
感谢 calmh in,
irc://irc.freenode.net/#zfs
但我不确定语法是否需要更多工作。对我来说,使用简单的文件系统层次结构(只有一个孩子)和相对较少的快照(目前有十七个孩子),该命令似乎无法得出结论。例子:
借用其他答案,仅关注子文件系统:
– 并且该输出几乎是即时的。
这里的 ZFS 是 ZEVO Community Edition 1.1.1。
对于具有单个文件系统的池
– 也就是说,没有
-r
递归到管道的右侧。归功于冷静
irc://irc.freenode.net/#zfs
工作示例
对于名称中没有空格的文件系统:
有一个Control-T看看事情是如何运行的。
为了完整起见,我应该声明有一个孩子
gjp22
。但我猜这个例子(没有关注后代)确实证明了命令的有效性。非工作示例
对于名为
Pocket Time Machine
(名称中有空格)的文件系统,以下命令均不成功:输出:
… 等等。
抱歉,这是隐含在答案中的一个问题……具有良好命令行知识的人(不是我)可能能够使这个答案更聪明,而无需我转向另一个问题。我会在聊天中寻求建议。
以下命令将显示 [pool] 的所有快照(<-将其替换为您的池名称)
这些属性将列为
property:stuff
有了这些信息,我们可以释放快照..
(将“property:stuff”替换为保存数据集的任何内容)
..最后删除它们