通过临时驱动器将 raidz1 转换为 raidz2

通过临时驱动器将 raidz1 转换为 raidz2

几个月前,我设置了一个新的 NAS 服务器,并将其设置为 RaidZ。我正在重新考虑这个决定,并想获取一个额外的驱动器并移动到 RaidZ2。在每个人都回复说这在 ZFS 中是不可能的之前,我想指出,我知道这不可能直接实现。我已经搜索文档好几天了,但似乎没有关于如何手动执行此操作的一组说明。我相信我需要:

  1. 将整个池移至足够大的驱动器上以容纳已用空间
  2. 拆除现有的游泳池。
  3. 使用 raidz2 中的额外驱动器创建新池
  4. 将数据移回池中。

看起来不太难,但我对 ZFS 或 FreeBSD 不够熟悉,因此无法相信我成功完成了第 1 步。我也不完全确定第 4 步,但可以重试,而搞砸第一步就不好玩了。我的阅读表明 rsync 是有效克隆驱动器的方法,但我想确保我复制的内容是确切地与源相同,包括系统/隐藏文件、符号链接、jail 等。操作系统运行在镜像闪存驱动器上,不会发生变化,理想情况下,它们甚至不会注意到下次启动时发生了任何变化(例如,所有 jail 都像以前一样启动)。复制/克隆池/驱动器也会移动分区信息吗?FreeNAS 会重新创建这些内容吗?还是我需要手动操作它们。

我正在运行 FreeNAS 9.3,在单个 raidz 池中有 3x3TB 硬盘。我希望在 raidz2 中最终有 4x3TB。当前池使用 1.3TB 空间,我有一个外部 2TB 驱动器用于临时存储。即使数据丢失,也并不重要。

更新

实际问题是:如何将池复制到临时驱动器,同时确保它是足够完整的副本,可以推回到重新创建的 zpool。此外,如果它不是原始副本的简单反转,我该如何将其推回。

答案1

以下是我使用 FreeNAS GUI 的方法:

  • 为根数据集(例如卷 x)的递归快照设置定期快照任务
  • 使用临时驱动器创建一个简单的 1 磁盘条带卷,例如卷 y。
  • 建立到该驱动器的复制,x 到 y。
  • 等待复制完成。
  • 为 y 的递归快照设置定期快照任务。
  • 销毁并重新创建 x。
  • 设置从 y 到 x 的复制。
  • 等待复制完成。
  • 毀壞 y。

免责声明:我尚未测试以确保所有 jail 仍能正常工作,因此您可能需要从其他地方获得确认,或者只是准备重新创建 jail(或在第一次复制完成后仔细检查 y)。这对于包含所有历史快照信息的常规数据集来说运行顺利。

答案2

您可以使用zfs send...这样您就可以轻松“保存”文件系统中的所有内容。包括但不限于隐藏文件、文件属性、扩展属性、zvol、快照等。

实际上,您可以在备用驱动器上创建“副本”文件系统,安装它,甚至启动它,以查看它是否完整、可行且可启动,然后继续销毁旧池。

但我更愿意在备用驱动器上创建 UFS,并将 ZFS 保存到其中的文件中。您无法挂载它来验证,但我认为这样稍微安全一点。

只需祈祷你的备用驱动器不会在此过程中损坏。

相关内容