创建和销毁 ZFS 快照
快照是使用 zfs snapshot 或 zfs snap 命令创建的,该命令采用要创建的快照的名称作为其唯一参数。快照名称按如下方式指定:
filesystem@snapname
volume@snapname
快照名称必须满足ZFS 组件命名要求中所述的命名要求。
在以下示例中,创建了一个 tank/home/cindy 的快照,名为 friday。
# zfs snapshot tank/home/cindy@friday
通过使用 –r 选项可为所有后代文件系统创建快照。例如:
# zfs snapshot -r tank/home@snap1
# zfs list -t snapshot -r tank/home
NAME USED AVAIL REFER MOUNTPOINT
tank/home@snap1 0 - 2.11G -
tank/home/cindy@snap1 0 - 115M -
tank/home/lori@snap1 0 - 2.00G -
tank/home/mark@snap1 0 - 2.00G -
tank/home/tim@snap1 0 - 57.3M -
快照没有可修改的属性。也不能将数据集属性应用于快照。例如:
# zfs set compression=on tank/home/cindy@friday
cannot set property for 'tank/home/cindy@friday':
this property can not be modified for snapshots
使用 zfs destroy 命令可以销毁快照。例如:
# zfs destroy tank/home/cindy@friday
如果数据集存在快照,则不能销毁该数据集。例如:
# zfs destroy tank/home/cindy
cannot destroy 'tank/home/cindy': filesystem has children
use '-r' to destroy the following datasets:
tank/home/cindy@tuesday
tank/home/cindy@wednesday
tank/home/cindy@thursday
此外,如果已从快照创建克隆,则必须先销毁克隆,才能销毁快照。
有关 destroy 子命令的更多信息,请参见销毁 ZFS 文件系统。
保持 ZFS 快照
不同的自动快照或数据保留策略可能意味着会无意中破坏之前的快照。如果删除的快照是正在进行的 zfs 发送和接收操作的一部分,则该操作可能会失败。要避免这种情况,请考虑为快照设置保持。
保持快照可以防止它被销毁。此外,该功能支持在删除一个带有克隆的快照时暂挂最后一个克隆的删除操作(使用 zfs destroy – d 命令)。每个快照都有一个关联的用户引用计数,其初始值为 0。在一个快照上设置一个保持标志时,此计数递增 1;释放一个保持标志时,此计数递减 1。
在先前的 Oracle Solaris 发行版中,只有在快照无克隆时,才能使用 zfs destroy 命令销毁快照。在此 Oracle Solaris 发行版中,快照的用户引用计数也必须为零。
可以保持一个快照或一组快照。例如,以下语法在 tank/home/cindy/snap@1 上设置一个保持标志 keep。
# zfs hold keep tank/home/cindy@snap1
可以使用 –r 选项递归保持所有后代文件系统的快照。例如:
# zfs snapshot -r tank/home@now
# zfs hold -r keep tank/home@now
此语法向给定的快照或快照集添加一个引用 keep。每个快照都有其自己的标志名称空间,保持标志在该空间内必须是唯一的。如果一个快照上存在一个保持,尝试使用 zfs destroy 命令销毁受保持的快照将失败。例如:
# zfs destroy tank/home/cindy@snap1
cannot destroy 'tank/home/cindy@snap1': dataset is busy
要销毁保持的快照,须使用 –d 选项。例如:
# zfs destroy -d tank/home/cindy@snap1
使用 zfs holds 命令显示受保持的快照列表。例如:
# zfs holds tank/home@now
NAME TAG TIMESTAMP
tank/home@now keep Fri Aug 3 15:15:53 2012
# zfs holds -r tank/home@now
NAME TAG TIMESTAMP
tank/home/cindy@now keep Fri Aug 3 15:15:53 2012
tank/home/lori@now keep Fri Aug 3 15:15:53 2012
tank/home/mark@now keep Fri Aug 3 15:15:53 2012
tank/home/tim@now keep Fri Aug 3 15:15:53 2012
tank/home@now keep Fri Aug 3 15:15:53 2012
可以使用 zfs release 命令释放对一个快照或一组快照的保持。例如:
# zfs release -r keep tank/home@now
释放快照后,可以使用 zfs destroy 命令销毁快照。例如:
# zfs destroy -r tank/home@now
有两个新属性用来表示快照保持信息:
defer_destroy 属性在下述情况下为 on:已使用 zfs destroy –d 命令将快照标记为延期销毁。否则,此属性为 off。
userrefs 属性设置为此快照上的保持数,也称为用户引用计数。
重命名 ZFS 快照
可以重命名快照,但是必须在从中创建它们的池和数据集中对它们进行重命名。例如:
# zfs rename tank/home/cindy@snap1 tank/home/cindy@today
此外,以下快捷方式语法等效于以上的语法:
# zfs rename tank/home/cindy@snap1 today
不支持以下快照 rename 操作,因为目标池和文件系统名称与从中创建快照的池和文件系统不同:
# zfs rename tank/home/cindy@today pool/home/cindy@saturday
cannot rename to 'pool/home/cindy@today': snapshots must be part of same
dataset
可以使用 zfs rename –r 命令以递归方式重命名快照。例如:
# zfs list -t snapshot -r users/home
NAME USED AVAIL REFER MOUNTPOINT
users/home@now 23.5K - 35.5K -
users/home@yesterday 0 - 38K -
users/home/lori@yesterday 0 - 2.00G -
users/home/mark@yesterday 0 - 1.00G -
users/home/neil@yesterday 0 - 2.00G -
# zfs rename -r users/home@yesterday @2daysago
# zfs list -t snapshot -r users/home
NAME USED AVAIL REFER MOUNTPOINT
users/home@now 23.5K - 35.5K -
users/home@2daysago 0 - 38K -
users/home/lori@2daysago 0 - 2.00G -
users/home/mark@2daysago 0 - 1.00G -
users/home/neil@2daysago 0 - 2.00G -