通过使用 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 功能之前,请检查以下几点:
对于 RAID-Z 配置或者由多个磁盘组成的非冗余池,此功能不可用。
尝试 zpool split 操作之前,数据和应用程序操作应停顿。
如果重新同步正在进行中,则无法拆分池。
拆分由两到三个磁盘组成的镜像池是最佳的,其中原池中的最后一个磁盘将用于新创建的池。然后,可以使用 zpool attach 命令重新创建原镜像存储池,或者将新创建的池转换为镜像存储池。目前无法通过一个 zpool split 操作从现有镜像池创建新镜像池,因为新(拆分的)池是非冗余的。
如果现有池是一个三向池,则在拆分操作之后,新池将包含一个磁盘。如果现有池是一个由两个磁盘组成的双向池,则结果是由两个磁盘组成的两个非冗余池。您必须再附加两个磁盘,以将非冗余池转换为镜像池。
在拆分操作期间,保持数据冗余性的一个好方法是拆分由三个磁盘组成的镜像存储池,这样在拆分操作之后,原池由两个镜像磁盘组成。
在拆分镜像池之前,请确认硬件配置正确无误。有关确认硬件高速缓存刷新设置的相关信息,请参见一般系统做法。
在以下示例中,对名为 mothership 的镜像存储池(包含三个磁盘)进行拆分。分割产生了两个池,即,镜像池 mothership(包含两个磁盘)和新池 luna(包含一个磁盘)。每个池的内容完全相同。
可以将池 luna 导入另一个系统中以进行备份。备份完成后,可以将池 luna 销毁,并将其磁盘重新附加到 mothership。然后,可以重复执行这一过程。
# zpool status mothership pool: mothership state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM mothership ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t5000C500335F95E3d0 ONLINE 0 0 0 c0t5000C500335BD117d0 ONLINE 0 0 0 c0t5000C500335F907Fd0 ONLINE 0 0 0 errors: No known data errors # zpool split mothership luna # zpool import luna # zpool status mothership luna pool: luna state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM luna ONLINE 0 0 0 c0t5000C500335F907Fd0 ONLINE 0 0 0 errors: No known data errors pool: mothership state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM mothership ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t5000C500335F95E3d0 ONLINE 0 0 0 c0t5000C500335BD117d0 ONLINE 0 0 0 errors: No known data errors