在 mdadm softraid 6(大约 12 个磁盘,60TB)上,大文件(>100GB)中出现了意外的错误写入。检查了所有系统 - RAM、NIC、LSI RAID 卡。最怀疑的是 LSI,因为它的电池 BBU 是扁平的,并且没有正确设置回写/直写。理论上,每个数据块都使用 XOR 冗余备份,RAID5 1x,RAID 6 2x。但这仅在某些活动磁盘发生故障时才起作用。
在 mdadm 中是否有一个命令可以在考虑 XOR 备份的情况下启动完整的数据一致性检查?这意味着我可以识别错写的块吗?
在我丢弃BBU之后我想知道,哪些文件是好的,哪些文件已损坏,必须更换。如果没有办法解决它,我应该从头开始创建数组并从他们的备份中获取所有文件。
运行(替换
md125
为您的实际数组):它将读取所有驱动器,计算奇偶校验条并检查它们是否正确。对于 RAID6,它还将通过使用所有其余驱动器来纠正单个不匹配错误(当只有一个驱动器不同步时),这要归功于双奇偶校验,它可以检测双重错误并纠正单个错误,包括可能发生的错误由于磁盘误码率。这对于现代非常大的磁盘很重要。
它将向内核日志报告任何重要消息,可通过
dmesg
. 您可以通过/proc/mdstat
文件或mdadm --detail /dev/md125
.定期运行检查非常有用,因为它不仅可以纠正错误写入,还可以及早检测并退出阵列死亡设备,因此最好将此检查设置为通过系统调度程序(cron 或 systemd 计时器)调用。一些 Linux 发行版(例如 Debian)默认执行此操作。
虽然第一个奇偶校验综合征实际上只是 XOR,但第二个不是。第二个综合症是使用称为伽罗瓦域的非常复杂的数学计算的。Linux 软件 RAID 使用启用 RAID6 的字段,活动设备不超过 257 个(不包括热备件)。这个计算对 CPU 来说是相当密集的,所以最好在系统没有太多负载时运行这个检查。您还可以通过设置
/sys/block/md125/md/sync_speed_max
一些任意值来限制检查速率(200000
,这意味着默认值为 200 MB/秒)来限制其负载。Linux 还会在启动时为您的系统测试并报告 RAID 冗余综合症计算的最佳算法,因此您可以通过读取启动日志来检查它将使用哪个算法以及它将执行多快。您还可以通过发送中断运行检查
idle
: