Oracle Solaris ZFS 管理指南

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

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

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


示例 7–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  -

远程复制 ZFS 数据

可以使用 zfs sendzfs recv 命令,将快照流表示从一个系统远程复制到另一个系统。例如:


# zfs send tank/cindy@today | ssh newsys zfs recv sandbox/restfs@today

此命令发送 tank/cindy@today 快照数据,并在 sandbox/restfs 文件系统中予以接收。该命令还会在 newsys 系统上创建 restfs@today 快照。在此示例中,已将用户配置为在远程系统上使用 ssh