Oracle Solaris ZFS 管理指南

保持 ZFS 快照

如果存在不同的原子快照策略,导致旧的快照由于不再存在于发送侧而被 zfs receive 不小心销毁,则可能需要考虑使用本 Solaris 发行版中的快照保持功能。

保持快照可以防止它被销毁。此外,当一个带有克隆的快照等待删除最后一个克隆时,该功能允许使用 zfs destroy - d 命令删除该快照。每个快照都有一个关联的用户引用计数,其初始值为 0。对一个快照设置一个保持时,此计数递增 1;释放一个保持时,此计数递减 1。

在先前的 Solaris 发行版中,只有在快照无克隆时,才能使用 zfs destroy 命令销毁快照。在本 Solaris 发行版中,快照同样必须有一个用户引用计数。

可以保持一个快照或一组快照。例如,以下语法对 tank/home/cindys/snap@1 设置一个保持标志 keep


# zfs hold keep tank/home/cindys@snap1

可以使用 -r 选项递归保持所有后代文件系统的快照。例如:


# zfs snapshot -r tank/home@now
# zfs hold -r keep tank/home@now

此语法向给定的快照或快照集添加一个引用 keep。每个快照都有其自己的标志名称空间,保持标志在该空间内必须是唯一的。如果一个快照上存在一个保持,尝试使用 zfs destroy 命令销毁受保持的快照将失败。例如:


# zfs destroy tank/home/cindys@snap1
cannot destroy 'tank/home/cindys@snap1': dataset is busy

要销毁受保持的快照,须使用 -d 选项。例如:


# zfs destroy -d tank/home/cindys@snap1

使用 zfs holds 命令显示受保持的快照列表。例如:


# zfs holds tank/home@now
NAME           TAG   TIMESTAMP                 
tank/home@now  keep  Thu Jul 15 11:25:39 2010  

# zfs holds -r tank/home@now
NAME                  TAG   TIMESTAMP                 
tank/home/cindys@now  keep  Thu Jul 15 11:25:39 2010  
tank/home/mark@now    keep  Thu Jul 15 11:25:39 2010  
tank/home@now         keep  Thu Jul 15 11:25:39 2010  

可以使用 zfs release 命令释放对一个快照或一组快照的保持。例如:


# zfs release -r keep tank/home@now

释放快照后,可以使用 zfs destroy 命令销毁快照。例如:


# zfs destroy -r tank/home@now

有两个新属性用来表示快照保持信息: