我有两个 RAID 10 卷,其中 /dev/sda 上只有一个分区被踢出其中一个卷。这是 /dev/mdstat(在恢复过程中):
md1:活动 raid10 sda3[4] sdd3[3] sdc3[2] sdb3[1] 11719732224 块超级 1.2 512K 块 2 近副本[4/3] [_UUU] [===================>.] 恢复率 = 97.7% (5725121408/5859866112) 完成=100.5 分钟速度=22334K/秒
md0 : 活动 raid10 sda2[4] sdd2[3] sdc2[2] sdb2[1] 1043456 个块 超级 1.2 512K 块 2 个近副本 [4/4] [UUUU]
根据以下内核消息,我看到 sda3 分区在仅出现 21 个读取错误后就从 md1 中删除:
4 月 17 日 14:25:05 某些服务器内核:md/raid10:md1:sda3:Raid 设备超出 read_error 阈值 [cur 21:max 20]
4 月 17 日 14:25:05 某些服务器内核:md/raid10:md1:sda3:故障 raid 设备
嗯,根据我的研究,这些错误实际上可能是在很短的时间内发生的,并不是“所有时间”内的所有错误。
看到 smartctl 报告物理 6TB 驱动器上的重新分配扇区为零,我认为不需要扔掉该驱动器,而且我拥有该服务器存储的数据的多个副本。
既然如此,我继续将分区重新添加到 md1 阵列,修复 3 天后,修复几乎完成(修复的同时系统正在镜像另一个系统,因此服务器非常繁忙,这会减慢修复速度)。我担心,一旦此驱动器或阵列中的其他 3 个 6TB 驱动器之一遇到坏扇区,它就会很快从阵列中弹出,需要再次修复。
有没有办法将 read_error 阈值提高到 20 以上,以便它在设备出现故障之前更加努力?
答案1
我来得太晚了,但如果没有帮助,这几乎是不可能找到的,所以我会发布解决方案。
通过 sysfs 设置
阈值可以从这里配置:
/sys/block/md*/md/max_read_errors
因此您可以在 md1 设备上将其设置为 50,例如:
# echo 50 > /sys/block/md1/md/max_read_errors
来源
我从 libera.chat 上的 #linux 频道用户 frostschutz 那里得到了答案。
它还列在https://access.redhat.com/solutions/5249861
但是我还没有找到 MD RAID 或内核的官方文档提及这些内容。