在 mdadm softraid 6(约 12 个磁盘,60TB)上,大型文件(>100GB)中出现了意外的误写。检查了所有系统 - RAM、NIC、LSI RAID 卡。最可疑的是 LSI,因为它的电池 BBU 没电了,并且回写/写透设置不正确。理论上,每个数据块都使用 XOR 冗余备份,RAID5 1x,RAID 6 2x。但这仅在部分活动磁盘发生故障时才会起作用。
在 mdadm 中是否有命令可以启动完整的数据一致性检查,同时考虑 XOR 备份?这意味着我可以识别写错的块吗?
丢弃 BBU 后,我想知道哪些文件是好的,哪些文件已损坏且必须更换。如果没有办法解决,我应该从头开始创建阵列并从备份中获取所有文件。
答案1
运行(替换md125
为你的实际数组):
echo "check" > /sys/block/md125/md/sync_action
它将读取所有驱动器,计算奇偶校验条带并检查它们是否正确。对于 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