将 FreeBSD ZFS 两盘未镜像池转换为镜像池

her*_*off 7 raid freebsd zfs

我有一个存储池storage,里面有两个磁盘。最初,我想将第二个磁盘添加为镜像,但 ZFS 新手错误地使用zpool add storage <device>zpool attach storage <device>.

每次尝试removedetach池中的第二个设备都失败,因为 ZFS 抱怨没有冗余驱动器。读完之后,我明白了这个问题以及为什么会这样。但是,我无法找到如何移除驱动器以重新连接它或简单地将整个池转换为镜像而不是条带化的解决方案。我也有点困惑,因为似乎没有直接的方法可以做到这一点。

有没有办法在不破坏和重新创建游泳池的情况下实现这一目标?我宁愿不需要购买另一个 4TB 驱动器并复制所有数据。

use*_*ser 3

不幸的是,此时您基本上有两个不错的选择:

  • 使用预期配置销毁并重新创建池,然后从恢复副本恢复数据
  • 再获取两个驱动器(最小大小与您已有的每个驱动器相同)并将池扩展到两个镜像对,而不是两个单个磁盘

后者可以就地执行,并且具有为您提供额外存储空间的好处,但需要您购买更多硬件(您在问题中说过您不想这样做)。前者不能就地完成,但为您提供了一个测试恢复策略的好机会(我想您确实恢复策略?)。

正如您所发现的,无法删除 ZFS 池中的 JBOD 组件。通过add使用而不是attach使用新驱动器,您创建了具有多个磁盘的 JBOD 情况。

如果您确实要扩展池,我强烈建议您考虑扩展到 raidz2,而不是两个镜像对。您可以获得(本质上)相同的可用存储容量,但能够在任意两个驱动器发生故障时继续存在,而不是每对只有一个驱动器。您可以创建一个包含两个稀疏文件的 raidz2 vdev,然后删除这些文件,然后将它们替换为要从中迁移数据的驱动器,从而从当前的 2 磁盘 JBOD 迁移到 4 磁盘 RAIDZ2,只需再添加两个磁盘。