使用 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 功能之前,请检查以下几点:
对于 RAIDZ 配置或者由多个磁盘组成的非冗余池,此功能不可用。
尝试 zpool split 操作之前,数据和应用程序操作应停顿。
必须拥有认可而不是忽略磁盘刷新写高速缓存命令的磁盘。
如果重新同步正在进行中,则无法分割池。
分割由两到三个磁盘组成的镜像池最佳,其中原池中的最后一个磁盘用于新创建的池。然后,可以使用 zpool attach 命令重新创建原镜像存储池,或者将新创建的池转换为镜像存储池。目前无法从现有镜像池创建新镜像池。
如果现有池是一个三向池,则在分割操作之后,新池将包含一个磁盘。如果现有池是一个由两个磁盘组成的双向池,则结果是由两个磁盘组成的两个非冗余池。您需要附加两个磁盘,以将非冗余池转换为镜像池。
在分割操作期间,保持数据冗余性的良好方法是分割由三个磁盘组成的镜像存储池,这样在分割操作之后,原池由两个镜像磁盘组成。
以下示例分割一个称为 trinity 的镜像存储池,它具有三个磁盘:c1t0d0、c1t2d0 和 c1t3d0。结果产生两个池:镜像池 trinity 包括磁盘 c1t0d0 和 c1t2d0,新池 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 |