部分奇偶校验日志

部分奇偶校验日志 (PPL) 是 RAID5 阵列可用的一个特性。PPL 解决的问题是,在不干净的关机后,特定条带的奇偶校验可能与成员磁盘上的数据不一致。如果阵列也处于降级状态,则无法重新计算奇偶校验,因为其中一个磁盘丢失了。这可能会导致在重建阵列或将其用作降级状态时出现静默数据损坏——从奇偶校验计算出的阵列块数据,在不干净的关机期间未被写入请求触及,可能是错误的。这种情况被称为 RAID5 写漏洞。因此,md 默认不允许启动不干净的降级阵列。

写入操作的部分奇偶校验是不受此写入操作修改的条带数据块的异或。它只是从写入漏洞中恢复所需的数据。将部分奇偶校验与修改后的数据块进行异或运算,将生成与写入操作之前状态一致的条带奇偶校验,而不管哪些块写入已完成。如果此条带的一个未修改数据磁盘丢失,则可以使用此更新的奇偶校验来恢复其内容。在不干净的关机后启动阵列且所有磁盘都可用时,也会执行 PPL 恢复,从而无需重新同步阵列。因此,不支持同时使用写入意图位图和 PPL。

在处理写入请求时,PPL 会在新数据和奇偶校验被发送到磁盘之前写入部分奇偶校验。PPL 是一个分布式日志 - 它存储在阵列成员驱动器的元数据区域中,位于特定条带的奇偶校验驱动器上。它不需要专用的日志驱动器。写入性能最多降低 30%-40%,但它会随着阵列中驱动器的数量而扩展,并且日志驱动器不会成为瓶颈或单点故障。

与 raid5-cache(md 中用于关闭写入漏洞的另一种解决方案)不同,PPL 不是真正的日志。它不能防止丢失正在进行的写入数据,只能防止静默数据损坏。如果条带的不干净磁盘丢失,则不会为此条带执行 PPL 恢复(奇偶校验不会更新)。因此,如果该磁盘丢失,则条带写入部分的数据可能是任意数据。在这种情况下,行为与普通的 raid5 相同。

PPL 可用于 md 版本-1 元数据和外部(特别是 IMSM)元数据阵列。可以使用 mdadm 选项 --consistency-policy=ppl 启用它。

PPL 对阵列中的最大磁盘数有限制,最多 64 个磁盘。它允许保持数据结构和实现的简单性。具有如此多磁盘的 RAID5 阵列不太可能出现,因为多个磁盘发生故障的风险很高。这种限制不应是实际的限制。