![为什么企业 RAID 控制器不支持从 RAID 5 迁移到 RAID 10?](https://linux22.com/image/627666/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BC%81%E4%B8%9A%20RAID%20%E6%8E%A7%E5%88%B6%E5%99%A8%E4%B8%8D%E6%94%AF%E6%8C%81%E4%BB%8E%20RAID%205%20%E8%BF%81%E7%A7%BB%E5%88%B0%20RAID%2010%EF%BC%9F.png)
我一直在研究从 RAID 5 到 RAID 10 的实时迁移可能性,并且我很好奇为什么大多数 RAID 控制器(特别是戴尔的 PERC 控制器)似乎不支持从 RAID 5 到 RAID 10 的实时迁移概念。
我制作了一个快速电子表格,它显示这不仅是一个相对简单的过程,而且可以以在迁移的任何部分都不会丢失容错性的方式完成。由于存储效率的损失,唯一的要求是至少需要 1 个额外的驱动器... 3 驱动器 RAID 5 变成 4 驱动器 RAID 10,4 驱动器 RAID 5 变成 6 驱动器 RAID 10,依此类推。
可以通过 4 次操作以容错方式将 3 驱动器 RAID 5(由磁盘 A、B 和 C 组成)迁移到 4 驱动器 RAID 10(添加磁盘 D)。(这个过程可能可以更有效地完成,但可能会损失一些容错能力,但我的目标只是证明这是可以做到的)
从如下所示的虚拟数据块开始:
A B C D
- - - -
1 2 p
3 p 4
p 5 6
(p=parity; repeats every 6 blocks)
第一步就是将 D 当作 RAID 0 中的第二个驱动器来填充:
A B C D
- - - -
1 2 p 2
3 p 4 4
p 5 6 6
此时,如果 AC 发生故障,与普通 RAID 5 故障没有区别。如果 D 发生故障,唯一的损失就是您需要重新开始迁移。
然后对 C 执行相同操作,就好像它是 RAID 0 组中的第一个驱动器一样:
A B C D
- - - -
1 2 1 2
3 p 3 4
p 5 5 6
驱动器 AB 现在是“降级”的 RAID 5 集。驱动器 CD 现在是“健康”的 RAID 0 集。任何单个驱动器故障仍然可以恢复 - 可以从“降级”的 A&B 重建 C&D,并且可以根据 C&D 的状态重新计算 A&B 的状态
然后对 B 重复该过程:
A B C D
- - - -
1 2 1 2
3 4 3 4
p 6 5 6
B 现在是 D 的镜像,因此任一驱动器都可以弥补另一个驱动器的故障。如果 C 发生故障,A 要么已经拥有它的副本,要么拥有奇偶校验数据来重建它。
最后,更新 A 的奇偶校验位以匹配 C:
A B C D
- - - -
1 2 1 2
3 4 3 4
5 6 5 6
生成一个 RAID10 阵列
我也针对 4 磁盘 RAID 5 到 6 磁盘 RAID 10 迁移的情况运行了此操作,并且该过程似乎运行良好(需要 5 次传递,因为扩展磁盘 E 和 F 可以在同一次传递中填充而不会损失容错能力。)
所以问题是……为什么市场上似乎没有任何 RAID 控制器支持这种类型的迁移?(有支持的吗?)随着“One Big RAID10”被提倡为数据存储的新标准,除了目前建议的“备份、重新创建阵列、恢复”之外,是否有更简单的迁移工具不是更有意义吗?
更有趣的是,至少就戴尔的 PERC 卡而言,甚至不可能从 RAID 0 迁移到 RAID 10,这似乎与从无 RAID 迁移到 RAID 1 没有什么不同。