很久以前,我们购买了 Adaptec 31605,当时的印象是:a) 它可以实现真正的 JBOD,b) 它在 OpenSolaris 上得到了很好的支持。结果发现,这两个都是错误的。我试图将我的 zpool 放到 NexentaStor Enterprise OS 上,但要做到这一点,他们希望我们将控制器换成 LSI SAS 9201-16i。
我正在尝试找出以低成本迁移池的最佳方法。当前 zpool 在 14 个 SAS 驱动器上使用约 1TB 空间。我能想到的最好办法是:
- 离线系统
- 在板载 SATA 端口上设置 3 个 1TB 消费级 SATA 硬盘作为临时 zpool
- zfs 将所有数据发送到临时池
- 交换控制器并在 LSI 适配器上构建新的 zpool
- zfs 从临时池发送到新的 zpool
- 在线系统
我在这里遗漏了什么或想到了更好的方法吗?
如果我选择这种方式,整个过程需要多长时间?根据我的初步计算,以 100MBps 的速度传输 1TB 大约需要 3 小时。我可以在消费级驱动器上使用 zfs send/recv 获得这种吞吐量吗?
答案1
您的计划看起来不错,我想您不会遇到任何麻烦。您提到临时池需要三个 1TB 磁盘。我假设您计划使用单奇偶校验 raidz(可用 2TB),但我建议您考虑使用镜像的 1.5 或 2TB 磁盘对。这样,当迁移完成时,每个磁盘都会有您的池的完整备份。非常适合在发生灾难性故障时放入保险箱。至于速度,我在两个 2TB SATA 磁盘的镜像池上获得 90-130MB/秒,因此您的 3 小时/TB 数字(~100MB/秒)听起来很合理。如果您像我一样偏执,您可能还需要在重新格式化 SAS 磁盘之前清理临时池。
一旦切换到让 ZFS 处理整个磁盘而无需控制器抽象层,情况就会真正好转。您可以比较多个控制器对同一磁盘的性能,甚至可以在硬件发生故障时将磁盘连接到新系统。我甚至使用原始设备映射将 zfs 池临时导入到 VMWare ESXi 下的 VM 中,这真的没问题,它就是有效。
答案2
我认为在某些情况下这是可能的(不确定不同的控制器如何处理相同的磁盘):
- 使系统离线
- zpool 导出
- 交换控制器
- zpool 导入
- 在线系统
无论如何,您的提议都更安全,因为在迁移结束之前您始终拥有两份数据副本。
不确定这是否可以帮助您,但也考虑增量 zfs 发送。
- 离线系统
- 在板载 SATA 端口上设置 3 个 1TB 消费级 SATA 硬盘作为临时 zpool
- 在线系统
- zfs 将所有数据发送到临时池
- 离线系统
- zfs send -I 将所有差异发送到临时池
- 交换控制器并在 LSI 适配器上构建新的 zpool
- zfs 从临时池发送到新的 zpool
- 在线系统
通过这种方法,您可以分割服务停机时间,并在系统在线时执行第一次大而慢的 zfs 发送(SAS -> SATA)。
答案3
您的解决方案听起来不错。如果您更喜欢 Nexenta 的自动同步部分,而不是手动 ZFS 发送,则可以使用它。