销毁或者释放持有的 ZFS 快照

如前所述,如果快照上存在保留,我们将无法使用 zfs destroy 命令销毁它。
要销毁保留的快照,我们有两种选择:

  • 我们可以使用“zfs destroy -d”命令后跟快照名称来销毁保留的快照,然后释放快照保留,这将删除快照。
  • 我们可以释放快照,然后使用不带 -d 选项的 zfs destroy 命令将其销毁。

要释放对快照或者一组快照的保留,请使用带有 -r 选项的 zfs release 命令,后跟保留标记 keep 和快照名称。
-r 启用递归释放保留并且是可选的。
在下面的示例中,我们将释放对 datapool/home@now 快照的递归保留。

# zfs release -r keep datapool/home@now

如果所有保留都已释放,则可以销毁此快照。

什么是“持有 ZFS 快照”功能(Holding a ZFS Snapshot)

ZFS 数据集的远程复制可能会导致复制对两侧的自动快照策略不同。
例如,发送方可能希望以一分钟为间隔保留五个快照,而接收方可能希望以一分钟为间隔保留 10 个快照。
这可能导致较旧的快照被 zfs 接收无意中破坏,因为它们不再存在于发送端。
ZFS 快照保留功能解决了这个问题。
持有快照(zfs hold)可以防止它被破坏。
如果快照上存在保留,我们将无法使用 zfs destroy 命令销毁它。
在接下来的示例中,我们将查看用于销毁保留的快照的两个选项。

此外,快照保留功能允许使用 zfs destroy -d 命令在删除最后一个克隆之前删除带有克隆的快照。
我们将在后续幻灯片中仔细查看这是如何完成的。

每个快照都有一个关联的用户引用计数,它被初始化为零。
每当对快照有保留时,此计数就会增加 1,而在释放保留时则减少 1.
如前所述,只有在没有克隆的情况下才能销毁快照。
在 Oracle Solaris 11 发行版中,快照在销毁之前还必须具有零用户引用计数。

Solaris“持有 ZFS 快照”功能

如何保存 ZFS 快照

要保存一个快照或者一组快照,请使用 zfs hold keep 命令,后跟快照名称。
在下面的示例中,一个保持标记(keep)被放置在 datapool/home/user@snap1 上。

# zfs hold keep datapool/home/user@snap1

我们可以将 -r 选项与 zfs hold 命令和 keep hold 标记一起使用,以递归方式保存所有后代文件系统的快照,如第二个示例所示。
其中:我们保存了 datapool/home@now 的所有后代文件系统的快照。

# zfs hold -r keep datapool/home@now
https://onitroad.com 更多教程

显示保留快照列表

我们可以使用 zfs hold 命令后跟快照名称来显示已保留快照的列表。
在第一个示例中,为 rpool/export/home@before 显示快照保留。
请注意,输出会返回快照名称、标记名称(在本例中为 keep)和时间戳。

# zfs holds rpool/export/home@before
NAME                      TAG   TIMESTAMP                 
rpool/export/home@before  keep  Sun Jan 14 11:57:45 2018

我们可以将 -r 选项与 zfs hold 命令和快照名称一起使用以获取递归列表,如下面的第二个示例所示。

# zfs holds -r rpool/export/home@before
NAME                           TAG   TIMESTAMP
rpool/export/home/user@before  keep  Sun Jan 14 11:59:32 2018                   
rpool/export/home@before       keep  Sun Jan 14 11:57:45 2018

快照保留属性

快照保留信息通过两个属性标识:

  • 如果已使用“zfs destroy -d”命令将快照标记为延迟销毁,则 defer_destroy 属性处于打开状态。否则,该属性为 off 。
  • userrefs 属性设置为此快照的保留数,也称为用户引用计数。

我们可以使用 zfs get -r 命令后跟以逗号分隔的属性名称和文件系统名称来查看这些属性。

# zfs get -r defer_destroy,userrefs rpool/export/home
NAME                          PROPERTY       VALUE  SOURCE
rpool/export/home             defer_destroy  -      
rpool/export/home             userrefs       -      
rpool/export/home@before      defer_destroy  off    
rpool/export/home@before      userrefs       1      
rpool/export/home@after       defer_destroy  off    
rpool/export/home@after       userrefs       0      
rpool/export/home/geek        defer_destroy  -      
rpool/export/home/geek        userrefs       -      
rpool/export/home/geek@today  defer_destroy  off    
rpool/export/home/geek@today  userrefs       1

在幻灯片的示例中,显示了 rpool/export/home 的 defer_destroy 和 userrefs 属性。
从输出中可以看出,每个@before 快照都将 defer_destroy 属性设置为 off,这是默认值,并且 userrefs 属性的值为 1,这表示这些快照中的每一个都有一个保留。

日期:2020-09-17 00:15:02 来源:oir作者:oir