RAID5 中 Btrfs 的弹性

RAID5 中 Btrfs 的弹性

Btrfs 目前缺少 fsck,如果发生电源故障,则存在损坏的风险。在 RAID5 阵列中创建 btrfs 文件系统是否可以缓解这种情况?

答案1

据我所知这没什么区别。

RAID 是物理磁盘的抽象层,它使多个磁盘/分区在文件系统中看起来像一个“块设备”。某些 RAID 级别(包括 RAID1 和 RAID5)可以透明地处理物理磁盘故障:移除磁盘,对于文件系统来说,它看起来没有任何变化。

但文件系统是在“块设备”抽象层之上工作的。使用 RAID5 作为块设备有助于处理物理磁盘故障,但它对文件系统本身没有任何作用,因此文件系统损坏的风险仍然存在。

RAID 块(mdadm“chunks”,默认大小为 64kB)与文件系统块(ext4 默认大小为 4kB)不同,旨在检测不同类型的损坏。

RAID5 的工作原理是从文件系统中拆分数据,然后将一个块写入 N-1 个磁盘中的每一个,并将校验和写入第 N 个磁盘。RAID5 旨在检测坏扇区意义上的“损坏数据”,在这种情况下,可以通过校验和以及剩余的 N-2 个好块恢复原始数据。

但是,如果 FS 更新元数据并在有时间写入文件之前死机,文件系统可能会损坏而 RAID 却无法察觉:写入磁盘的内容与从磁盘读回的内容相同,这可以通过校验和匹配来证明。从更高级别的应用程序的角度来看,RAID 无法知道重要部分是否丢失。

本文 (pdf)RAID 无法检测到损坏的示例。在文件系统损坏的背景下,我猜“写入中断”(实际上只有部分应该写入的数据被写入)尤其相关。

答案2

Linux 软件 RAID5 实际上会使电源故障情况变得更糟 -很多更糟的是,原因已经提到。即使在 ext3/4 上,断电后重放日志也会不是修复 RAID5 不一致问题,该问题必然是由于软件 RAID 没有自己的非易失性“日志”来回放而引起的。如果在写入操作期间发生电源故障,则不仅用户数据会损坏,而且文件系统数据也会损坏。带有电池备份缓存的专用硬件 RAID 控制器不会受到此问题的影响,但这仍然无法弥补无法在 btrfs 上运行 fsck 的不足。

如果您关心数据完整性,那么请不要在没有 fsck 工具的情况下运行 btrfs,也不要在没有非易失性缓存或 UPS 的情况下运行 RAID5(或任何奇偶校验 RAID 级别)。

答案3

当 RAID5/6 的磁盘发生故障时,整个 I/O 子系统会暂时卡住,因为内核会尝试控制故障驱动器,从而重置 SATA 总线或驱动器。延迟可能需要数十秒,这会以某种方式导致 BTRFS 损坏,无法恢复。

MDRAID 磁盘故障导致 BTRFS 损坏内核错误。

相关内容