在 Oracle® Solaris 11.2 中管理 ZFS 文件系统

退出打印视图

更新时间: 2014 年 12 月
 
 

发送和接收复杂的 ZFS 快照流

本节介绍如何使用 zfs send –I–R 选项来发送和接收更复杂的快照流。

    发送和接收复杂的 ZFS 快照流时,请牢记以下要点:

  • 使用 zfs send –I 选项可将所有增量流从一个快照发送到某个累积快照。或者,使用此选项可从源快照发送增量流,以创建一个克隆。原始快照必须已存在于接收方之上才能接受增量流。

  • 使用 zfs send –R 选项可发送所有后代文件系统的复制流。接收复制流时,所有属性、快照、后代文件系统和克隆都将被保留。

  • 在没有 –c 选项的情况下使用 zfs send –r 选项时以及使用 zfs send –R 选项时,流数据包在某些情况下将忽略克隆的。有关更多信息,请参见识别 ZFS 快照流

  • 使用这两个选项发送增量复制流。

    • 对属性所做的更改得到保留,就像快照和文件系统的 renamedestroy 操作得到保留一样。

    • 如果在接收复制流时未指定 zfs recv –F,则将忽略数据集 destroy 操作。本例中的 zfs recv –F 语法还将保留其“如有必要则回滚”的含义。

    • 与其他(非 zfs send –R–i–I 情况一样,如果使用 –I,则将发送 snapAsnapD 之间的所有快照。如果使用 –i,则只发送 snapD(对于所有后代)。

  • 要接收任何这些新类型的 zfs send 流,接收系统必须正在运行能够发送这些流的软件版本。流版本将递增。

    但是,您可以使用较新的软件版本来访问较旧池版本中的流。例如,您可以将使用较新的选项创建的流发送到版本 3 池,并可从版本 3 池中接收这些流。但是,要接收使用较新的选项发送的流,必须运行最新软件。

示例 6-1  发送和接收复杂的 ZFS 快照流

可以使用 zfs send –I 选项将一组增量快照合并为一个快照。例如:

# zfs send -I pool/fs@snapA pool/fs@snapD > /snaps/fs@all-I

然后,您可以删除 snapBsnapCsnapD

# 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  -