我目前正在 Linux 上使用基于 HDD 和 SSD 构建的软件 RAID-1 阵列。我强烈感觉到 SSD 正在发生故障。
我想检查一下 SSD 的表现有多糟糕。我用echo check > /sys/block/md1/md/sync_action
和检查了阵列,完成后,我查看了的内容/sys/block/md1/md/mismatch_cnt
。我连续运行了 3 次,得到了 3 个不同的结果:256、128 和 384。令我困惑的是,第二次运行的结果比第一次低。不匹配问题解决了吗?
有没有办法让我获得有关检测到的不匹配的更多详细信息?检查不匹配的块是否发生变化或是否始终相同可能会很有趣。我还想看看不匹配块的内容,看看我是否能分辨出哪一个是正确的。(例如,如果 SSD 将某些块归零,则无法重新读取。)
此外,我看到 MD 阵列有一个选项repair
。但我有点怀疑:内核如何猜测哪个不匹配的块是正确的?
答案1
process_checks
好吧...阅读来自 linux 4.9.88 的文件中该函数的源代码drivers/md/raid1.c
,如果我没有看错的话:
- 没有办法使检查或修复操作详细地显示发现不匹配的位置。
- 如果在检查或修复操作期间遇到读取失败,则将重写失败的块。
- 如果在修复操作期间遇到不匹配的情况,则通过将块从“主”块(第一个非故障块)复制到其他块来修复。
因此,无法猜测哪个不匹配的块是正确的;它只是将第一个视为正确的。(据我所知,即使有 3 个组件,并且第 2 个和第 3 个组件具有相同的内容。)