Zpool透明迁移

Zpool透明迁移

我想将活动池的数据移动到新池,淘汰旧池并让新池代替旧池运行,而无需停机。我想象它会像这样:

  1. 创建新池
  2. 上线期间临时将新池与旧池进行镜像
  3. 从镜像中删除旧池,留下新池

这有标准的工作流程吗?

系统操作系统:Linux,CentOS

“旧池”:5x 1 TB 驱动器(条带化、零冗余、5 TB 可用)

“新池”:4x 2 TB 驱动器(raid 5、冗余、6 TB 可用)

为了清楚起见:

“旧池”包含数据。

“Old Pool” 正在文件服务器中实时运行。

“New Pool” 尚未上线。

目标1:用“新池”替换“旧池”。

目标 1a:使新池活跃起来。

目标 1b:“新池”包含最初在“旧池”上的数据。

目标2:退役“旧池”。

要求:零停机时间。

答案1

(更新。)

你想要的是不可能的,因为无法从包含 RAIDZ vdev 的池中删除 vdev。如果你忘记了 RAIDZ,无论如何,这是一个更好的选择。

来自 ZFS 手册页:

zpool 删除 [-np] 池设备...

从池中移除指定设备。此命令支持移除热备用、缓存、日志以及镜像和非冗余主顶层 vdev,包括重复数据删除和特殊 vdev。当主池存储包含顶层 raidz vdev 时,只能移除热备用、缓存和日志设备。

因此,如果您确实想要 RAIDZ,那么您无法实现零停机时间的想法。您需要创建一个新池,使用zfs sendzfs receive复制数据,然后切换池。

如果您不使用 RAIDZ,则您可以将新设备(无论是否镜像)添加到现有池中,然后删除旧设备,这样就不会导致停机。

但请注意,您一次只能删除一个设备/vdev。如果池正在使用中,则删除设备可能会非常慢。删除设备时使用池也可能会非常慢。

相关内容