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

退出打印视图

更新时间: 2014 年 12 月
 
 

识别 ZFS 快照流

通过使用 zfs send 命令,可以将 ZFS 文件系统或卷的快照转换为快照流。然后,可以使用快照流重新创建 ZFS 文件系统或卷(通过 zfs receive 命令)。

根据用于创建快照流的 zfs send 选项,将生成不同类型的流格式。

  • 完整流-包含从创建数据集时开始到指定的快照为止的所有数据集内容。

    zfs send 命令生成的缺省流是完整流。它包含一个文件系统或卷,直到并包括指定的快照。流不会包含在命令行上指定的快照之外的快照。

  • 增量流-包含一个快照与另一个快照之间的差异。

流数据包是包含一个或多个完整流或增量流的流类型。存在以下三种类型的流数据包:

  • 复制流数据包-包含指定的数据集及其后代。它包括所有的中间快照。如果克隆数据集的源不是在命令行上指定的快照的后代,则该源数据集将不包括在流数据包中。要接收流,源数据集必须存在于目标存储池中。

    请考虑以下列表中的数据集及其源。假定它们是按如下所示顺序创建的。

    NAME                    ORIGIN
    pool/a                  -
    pool/a/1                -
    pool/a/1@clone          -
    pool/b                  -
    pool/b/1                pool/a/1@clone
    pool/b/1@clone2         -
    pool/b/2                pool/b/1@clone2
    pool/b@pre-send         -
    pool/b/1@pre-send       -
    pool/b/2@pre-send       -
    pool/b@send             -
    pool/b/1@send           -
    pool/b/2@send           -

    使用以下语法创建的复制流数据包:

    # zfs send -R pool/b@send ....

    包含以下完整流和增量流:

    TYPE    SNAPSHOT                INCREMENTAL FROM
    full    pool/b@pre-send         -
    incr    pool/b@send             pool/b@pre-send
    incr    pool/b/1@clone2         pool/a/1@clone
    incr    pool/b/1@pre-send       pool/b/1@clone2
    incr    pool/b/1@send           pool/b/1@send
    incr    pool/b/2@pre-send       pool/b/1@clone2
    incr    pool/b/2@send           pool/b/2@pre-send

    在上面的输出中,pool/a/1@clone 快照未包括在复制流数据包中。因此,只能在已具有 pool/a/1@clone 快照的池中接收此复制流数据包。

  • 递归流数据包-包含指定的数据集及其后代。与复制流数据包不同,除非中间快照是流中包括的克隆数据集的源,否则将不包括它们。缺省情况下,如果数据集的源不是在命令行上指定的快照的后代,则行为类似于复制流。但是,下面所述的自包含递归流在创建过程中不存在外部依赖项。

    使用以下语法创建的递归流数据包:

    # zfs send -r pool/b@send ... 

    包含以下完整流和增量流:

    TYPE    SNAPSHOT                INCREMENTAL FROM
    full    pool/b@send             -
    incr    pool/b/1@clone2         pool/a/1@clone
    incr    pool/b/1@send           pool/b/1@clone2
    incr    pool/b/2@send           pool/b/1@clone2

    在上面的输出中,pool/a/1@clone 快照未包括在递归流数据包中。因此,只能在已具有 pool/a/1@clone 快照的池中接收此递归流数据包。此行为与上面所述的复制流数据包情况类似。

  • 自包含递归流数据包-不依赖于流数据包中未包括的任何数据集。此递归流数据包是使用以下语法创建的:

    # zfs send -rc pool/b@send ...

    包含以下完整流和增量流:

    TYPE    SNAPSHOT                INCREMENTAL FROM
    full    pool/b@send             -
    full    pool/b/1@clone2
    incr    pool/b/1@send           pool/b/1@clone2
    incr    pool/b/2@send           pool/b/1@clone2

    可以看到,该自包含递归流具有 pool/b/1@clone2 快照的完整流,这使得接收没有外部相关项的 pool/b/1 快照成为可能。