将 FreeBSD ZFS 双磁盘非镜像池转换为镜像池

将 FreeBSD ZFS 双磁盘非镜像池转换为镜像池

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

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

除了销毁并重建池之外,还有其他方法可以实现此目的吗?我宁愿不需要再购买 4TB 驱动器并复制所有数据。

答案1

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

  • 销毁并使用预期配置重新创建池,然后从修复副本
  • 再购买两个驱动器(至少与已有驱动器大小相同),并将池扩展为两个镜像对,而不是两个单个磁盘

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

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

如果你扩展池时,我强烈建议考虑扩展为 raidz2,而不是两个镜像对。您获得(基本上)相同的可用存储容量,但能够承受任何两个驱动器,而不是每对只有一个。您可以创建一个带有两个稀疏文件的 raidz2 vdev,然后删除这些文件,再用要从中迁移数据的驱动器替换它们,这样就可以从当前的 2 磁盘 JBOD 情况迁移到 4 磁盘 RAIDZ2,只需添加两个磁盘即可。

答案2

不幸的是,毁掉并重建游泳池是你唯一的选择。

如果您只想提取此特定的单个驱动器(出于其他原因,例如,如果它的性能低于所有其他驱动器),您可以将镜像驱动器连接到 vdev,然后将旧驱动器从 vdev 中分离,从而“提取”驱动器,同时保持池完好无损(当然要减去重新镀银时间)。但对于您来说,这并没有多大帮助。

因此,我建议购买一个更大的驱动器,以保存您的完整池数据,否则您就没有备份。ZFS 可能是最安全的文件系统,但它并非没有错误。控制器坏了、两个驱动器同时坏了、电源故障、管理员错误、恶意攻击者或 ZFS 或主机系统中的简单错误都可能导致部分或全部数据丢失,而无需备份。RAID 不是备份,ZFS 也不是。

请注意,您可以使用 ZFS send/recv 传输所有数据,因此除了投入的金钱和传输时间之外,它非常简单。

相关内容