本节介绍如何使用 zfs send –I 和 –R 选项来发送和接收更复杂的快照流。
发送和接收复杂的 ZFS 快照流时,请牢记以下要点:
使用 zfs send –I 选项可将所有增量流从一个快照发送到某个累积快照。或者,使用此选项可从源快照发送增量流,以创建一个克隆。原始快照必须已存在于接收方之上才能接受增量流。
使用 zfs send –R 选项可发送所有后代文件系统的复制流。接收复制流时,所有属性、快照、后代文件系统和克隆都将被保留。
在没有 –c 选项的情况下使用 zfs send –r 选项时以及使用 zfs send –R 选项时,流数据包在某些情况下将忽略克隆的源。有关更多信息,请参见识别 ZFS 快照流。
使用这两个选项发送增量复制流。
对属性所做的更改得到保留,就像快照和文件系统的 rename 和 destroy 操作得到保留一样。
如果在接收复制流时未指定 zfs recv –F,则将忽略数据集 destroy 操作。本例中的 zfs recv –F 语法还将保留其“如有必要则回滚”的含义。
与其他(非 zfs send –R)–i 或 –I 情况一样,如果使用 –I,则将发送 snapA 与 snapD 之间的所有快照。如果使用 –i,则只发送 snapD(对于所有后代)。
要接收任何这些新类型的 zfs send 流,接收系统必须正在运行能够发送这些流的软件版本。流版本将递增。
但是,您可以使用较新的软件版本来访问较旧池版本中的流。例如,您可以将使用较新的选项创建的流发送到版本 3 池,并可从版本 3 池中接收这些流。但是,要接收使用较新的选项发送的流,必须运行最新软件。
可以使用 zfs send –I 选项将一组增量快照合并为一个快照。例如:
# zfs send -I pool/fs@snapA pool/fs@snapD > /snaps/fs@all-I
然后,您可以删除 snapB、snapC 和 snapD。
# zfs destroy pool/fs@snapB # zfs destroy pool/fs@snapC # zfs destroy pool/fs@snapD
要接收组合快照,可以使用以下命令。
# zfs receive -d -F pool/fs < /snaps/fs@all-I # zfs list NAME USED AVAIL REFER MOUNTPOINT pool 428K 16.5G 20K /pool pool/fs 71K 16.5G 21K /pool/fs pool/fs@snapA 16K - 18.5K - pool/fs@snapB 17K - 20K - pool/fs@snapC 17K - 20.5K - pool/fs@snapD 0 - 21K -
您还可以使用 zfs send –I 命令来合并快照和克隆快照,以创建一个合并数据集。例如:
# zfs create pool/fs # zfs snapshot pool/fs@snap1 # zfs clone pool/fs@snap1 pool/clone # zfs snapshot pool/clone@snapA # zfs send -I pool/fs@snap1 pool/clone@snapA > /snaps/fsclonesnap-I # zfs destroy pool/clone@snapA # zfs destroy pool/clone # zfs receive -F pool/clone < /snaps/fsclonesnap-I
可以使用 zfs send –R 命令将 ZFS 文件系统和所有后代文件系统复制到一个已命名的快照中。接收此流时,所有属性、快照、后代文件系统和克隆都将被保留。
在以下示例中,将创建用户文件系统的快照。为所有用户快照创建一个复制流。然后,原始文件系统和快照将被销毁并恢复。
# zfs snapshot -r users@today # zfs list NAME USED AVAIL REFER MOUNTPOINT users 187K 33.2G 22K /users users@today 0 - 22K - users/user1 18K 33.2G 18K /users/user1 users/user1@today 0 - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - # zfs send -R users@today > /snaps/users-R # zfs destroy -r users # zfs receive -F -d users < /snaps/users-R # zfs list NAME USED AVAIL REFER MOUNTPOINT users 196K 33.2G 22K /users users@today 0 - 22K - users/user1 18K 33.2G 18K /users/user1 users/user1@today 0 - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K -
以下示例使用 zfs send –R 命令来复制 users 文件系统及其后代,并将复制的流发送到另一个池 users2。
# zfs create users2 mirror c0t1d0 c1t1d0 # zfs receive -F -d users2 < /snaps/users-R # zfs list NAME USED AVAIL REFER MOUNTPOINT users 224K 33.2G 22K /users users@today 0 - 22K - users/user1 33K 33.2G 18K /users/user1 users/user1@today 15K - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - users2 188K 16.5G 22K /users2 users2@today 0 - 22K - users2/user1 18K 16.5G 18K /users2/user1 users2/user1@today 0 - 18K - users2/user2 18K 16.5G 18K /users2/user2 users2/user2@today 0 - 18K - users2/user3 18K 16.5G 18K /users2/user3 users2/user3@today 0 - 18K -