几个月前,我设置了一个新的 NAS 服务器,并将其设置为 RaidZ。我正在重新考虑这个决定,并想获取一个额外的驱动器并移动到 RaidZ2。在每个人都回复说这在 ZFS 中是不可能的之前,我想指出,我知道这不可能直接实现。我已经搜索文档好几天了,但似乎没有关于如何手动执行此操作的一组说明。我相信我需要:
- 将整个池移至足够大的驱动器上以容纳已用空间
- 拆除现有的游泳池。
- 使用 raidz2 中的额外驱动器创建新池
- 将数据移回池中。
看起来不太难,但我对 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 保存到其中的文件中。您无法挂载它来验证,但我认为这样稍微安全一点。
只需祈祷你的备用驱动器不会在此过程中损坏。