mdadm RAID5 RAID6 如何检查运行阵列的一致性

sch*_*eik 3 raid mdadm

在 mdadm softraid 6(大约 12 个磁盘,60TB)上,大文件(>100GB)中出现了意外的误写。检查了所有系统 - RAM、NIC、LSI RAID 卡。最怀疑的是LSI,因为它的电池BBU没电,写回/直写设置不正确。理论上,每个数据块都使用 XOR 冗余备份,RAID5 1x,RAID 6 2x。但这仅在某些活动磁盘出现故障时才会起作用。

在 mdadm 中是否有一个命令可以在考虑 XOR 备份的情况下启动完整的数据一致性检查?这意味着我可以识别误写的块吗?

在我丢弃 BBU 后,我想知道哪些文件是好的,哪些文件已损坏,必须更换。如果没有办法解决它,我应该从头开始创建阵列并从他们的备份中获取所有文件。

Nik*_*nov 6

运行(替换md125为您的实际数组):

echo "check" > /sys/block/md125/md/sync_action 
Run Code Online (Sandbox Code Playgroud)

它将读取所有驱动器,计算奇偶校验条并检查它们是否正确。对于 RAID6,它还将通过使用所有其余驱动器来纠正单个不匹配错误(当只有一个驱动器不同步时),这要归功于双奇偶校验,它可以检测双错误并纠正单个错误,包括可能发生的错误由于磁盘误码率。这对于现代非常大的磁盘很重要。

它将向内核日志报告任何重要消息,可通过dmesg. 您可以通过/proc/mdstat文件或mdadm --detail /dev/md125.

定期运行检查非常有用,因为它不仅可以纠正误写,还可以及早检测和踢出阵列死亡设备,因此最好设置此检查以通过系统调度程序(cron 或 systemd 计时器)调用。某些 Linux 发行版(例如 Debian)默认执行此操作。

虽然第一个奇偶校验综合症实际上只是 XOR,但第二个却不是。第二种综合症是使用非常复杂的数学计算得出的,称为伽罗瓦域。Linux 软件 RAID 使用一个字段,该字段可在不超过 257 个活动设备(不包括热备件)的情况下启用 RAID6。这个计算对于 CPU 来说是相当密集的,所以最好在你的系统没有太多负载时运行这个检查。您还可以通过设置/sys/block/md125/md/sync_speed_max一些任意值(200000,这意味着 200 MB/秒是默认值)来限制检查率来限制其负载。Linux 还会在启动时测试并报告系统 RAID 冗余综合症计算的最佳算法,因此您可以通过读取启动日志来检查它将使用哪一种以及它的执行速度。

您还可以通过发送来中断运行检查idle

echo "idle" > /sys/block/md125/md/sync_action
Run Code Online (Sandbox Code Playgroud)