在不降低性能的情况下扩大 ZFS RAID-Z[123] 吗?

在不降低性能的情况下扩大 ZFS RAID-Z[123] 吗?

我知道在 ZFS 上,扩展 RAID-Z(或 RAID-Z2 或 RAID-Z3)vdev 的唯一方法是用更大的磁盘替换磁盘;无法更改几何结构。但是,是否有可能在不降低阵列性能的情况下做到这一点?

例如,假设我有一个包含 4 个磁盘的 RAID-Z 阵列:1 个 2TB 和 3 个 1TB 组成了 3 TB 可用空间。在所有驱动器正常工作的情况下,我又购买了 3 个 2TB 以扩大阵列(可用空间达到 6 TB)。如果我一次移除一个 1 TB 并将其替换为 2 TB,以强制重新镀银,那么我就会不必要地反复降低阵列的性能,并增加在此过程中发生故障的风险。

我希望可以在更换每个磁盘之前对其进行镜像。即,将第一个 2 TB 添加到备用托架,将第一个 1 TB 磁盘镜像到其中,然后移除 1 TB,并将 2 TB 放入移除的驱动器插槽中;然后对第二个和第三个 1 TB 磁盘重复此操作。这甚至可能消除重新镀银的需要 - 或者无论如何重新计算奇偶校验。

这种事可能吗?

答案1

您提出的解决方案是可行的,但存在一些实质性的缺点:

  • zpool import -o readonly=on ${YOUR_ZFS_POOL}在磁盘克隆过程中,您无法向池中写入任何内容 ( )。
  • 您必须zpool export ${YOUR_ZFS_POOL}为切换出的每个磁盘导出池()。

克隆 vdev 磁盘后,您必须:

  1. 导出池(zpool export ${YOUR_ZFS_POOL})。
  2. 销毁(zpool labelclear ${OLD_DISK_DEVICE})或物理移除旧磁盘。
    警告:如果您删除磁盘,则无法撤消。
  3. 如果有必要,在新磁盘上扩大 vdev 分区。
  4. 导入池(zpool import ${YOUR_ZFS_POOL})。
    警告:此后无法撤消。旧磁盘无法再在同一池中联机。
  5. 扩展磁盘(zpool online -e ${NEW_DISK_VDEV})。

对每个要更换的磁盘重复这些步骤后,新的容量就会生效。


ZFS 的内置替换功能旨在避免上一节中描述的所有额外复杂性。如果您担心在重新同步期间损坏 RAID-Z zpool,也许您应该:

  • 已创建具有更多冗余的池(RAID-Z2、RAID-Z3),或者
  • 在扩大阵列的同时,将池备份到其他地方。

此外,如果磁盘确实出现故障,您还会对 RAID-Z 感到满意吗?

如果您的预算紧张,并且真的买不起备份数据集的地方,那么执行您的计划确实更安全,因为克隆将是事务性的全有或全无操作,但请记住您的池将在一段时间内处于只读或离线状态,并且您还面临在克隆后步骤中犯错误的风险。

使用zpool replace会:

  • 速度更快*,因为只有使用的存储会被复制,而不是整个块设备
    *如果你有顺序清理/重新镀银功能
  • 没有停机时间,因为在重新同步过程中池将完全正常运行
  • 消除人为错误,因为你将使用 ZFS 预期的更换磁盘工作流程

相关内容