Oracle Solaris ZFS 管理指南

通过分割镜像 ZFS 存储池创建新池

使用 zpool split 命令可以很快将镜像 ZFS 存储池克隆为备用池。

目前无法使用此功能来分割镜像根池。

可以使用 zpool split 命令从镜像 ZFS 存储池分离磁盘,以利用其中一个分离的磁盘创建新池。新池的内容与原镜像 ZFS 存储池完全相同。

缺省情况下,对镜像池执行 zpool split 操作将分离最后一个磁盘以用于新创建的池。分割操作之后,导入新池。例如:


# zpool status tank
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0

errors: No known data errors
# zpool split tank tank2
# zpool import tank2
# zpool status tank tank2
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          c1t0d0    ONLINE       0     0     0

errors: No known data errors

  pool: tank2
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank2       ONLINE       0     0     0
          c1t2d0    ONLINE       0     0     0

errors: No known data errors

通过在 zpool split 命令中指定,您可以标识哪个磁盘应用于新创建的池。例如:


# zpool split tank tank2 c1t0d0

发生实际的分割操作之前,内存中的数据被刷新到镜像磁盘。数据刷新后,将磁盘从池中分离,并将其指定给一个新池 GUID。新池 GUID 即产生,以便能在分割该池的系统上导入该池。

如果要分割的该池具有非缺省的数据集挂载点,并且在同一系统上创建了新池,则需要使用 zpool split -R 选项标识新池的备用根目录,使得现有挂载点不会发生冲突。例如:


# zpool split -R /tank2 tank tank2

如果不使用 zpool split -R 选项,您可能会看到,当您尝试使用 -R 选项导入新池时,挂载点发生冲突。如果在不同的系统上创建新池,则不需要指定备用根目录,除非发生挂载点冲突。

使用 zpool split 功能之前,请检查以下几点:


示例 4–7 分割镜像 ZFS 存储池 (zpool split)

以下示例分割一个称为 trinity 的镜像存储池,它具有三个磁盘:c1t0d0c1t2d0 c1t3d0。结果产生两个池:镜像池 trinity 包括磁盘 c1t0d0c1t2d0,新池 neo 包括磁盘 c1t3d0。每个池的内容完全相同。


# zpool status trinity
  pool: trinity
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        trinity     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
            c1t3d0  ONLINE       0     0     0

errors: No known data errors
# zpool split trinity neo
# zpool import neo
# zpool status trinity neo
  pool: neo
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        neo         ONLINE       0     0     0
          c1t3d0    ONLINE       0     0     0

errors: No known data errors

  pool: trinity
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        trinity     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0

errors: No known data errors