为什么无法通过添加一个或多个磁盘将现有的条带/raidz zfs 池转换为具有更高奇偶校验的池?

为什么无法通过添加一个或多个磁盘将现有的条带/raidz zfs 池转换为具有更高奇偶校验的池?

需要明确的是,我所说的是在分别添加一两个新设备并计算现有池中的额外奇偶校验后,采用现有的条带化(即 RAID0)zfs 池并将其转换为 raidz1 (RAID5) 或 raidz2 (RAID6)。或者更一般地说,在向阵列添加 N 个磁盘后将 raidzP 转换为 raidz(P+N)。

据我所知,这应该是相对简单的(粗略地说,因为我确信细节决定成败),并且是比最近添加的“raidz 扩展”更有用的功能,它可以扩展现有的容量raidzP 池通过附加额外的设备而不改变阵列中的冗余级别,这会随着新设备的数量线性增加新阵列中的故障概率。

我可以想到 RAID 级别转换的大量用例(在任何一个设备开始显示即将发生故障的迹象之前将新磁盘添加到旧阵列,提前防止令人神经紧张的情况),而 raidz 扩展似乎只在少数情况下有用边缘情况,考虑到 raidz1/2/3 对于某些特定数量的磁盘 (2^n + P) 表现最佳。

换句话说,有一种方法应该不会太难,例如销毁 raidz1 池、在降级的 raidz3 配置中使用旧设备创建新池、添加两个新设备并重新同步。然而,理想情况下,文件系统在创建额外奇偶校验磁盘和重新排列数据块的整个过程中保持在线状态。

我确信这个缺失的功能是有技术原因的,而不仅仅是缺乏用户兴趣/需求,但我不知道到底是什么阻碍了这一点。

PS:我知道这个问题中有轻微的语言滥用,这是故意的,只是为了清楚起见。我知道 raidz1/2/3 与 RAID5/6/7 相似但不完全相同?但问题仍然存在。比如说,用 C = A xor B 填充一个新的磁盘 C,然后跨设备重新排列一些块,与像在“raidz”中那样在所有磁盘上重新分配数据相比,似乎是一个简单而安全的操作,具有简单的实现方式扩张'。

相关内容