如何在断电/随机重启后检查 mdadm RAID5 完整性

如何在断电/随机重启后检查 mdadm RAID5 完整性

因此,我目前正在构建一个附加到我的家庭服务器的 mdadm RAID5 阵列。硬件是 Odroid N2 SBC,附有 Mediasonic Probox 4 托架外壳。该阵列目前正在重建,已经进行了数天,但进展稳定。我正在将 armbianstretch 与旧版 4.9.180 内核一起使用。

昨晚,我正在使用系统(但不是驱动器)并对另一个 USB 驱动器上的文件运行校验和。目前,N2 的 USB 驱动程序中存在一个未解决的错误,该错误会因高 I/O 活动而加剧。 N2随后于昨晚11点40分左右死亡。

N2 几乎立刻就回来了,直到早上我才注意到。但是,mdadm 阵列重建在 75% 时暂停。我恢复了重建,进展顺利,但我想确保我没有对新阵列造成持久损害。

是否有任何 mdadm 实用程序可以用来确认奇偶校验数据中没有错误?阵列上没有文件系统,因此我认为在这种情况下不能使用 fsck

答案1

(当前重建完成后,)您可以运行检查:

mdadm --wait /dev/mdX # wait for rebuild to finish
mdadm --action=check /dev/mdX
# or if mdadm is too old:
echo check > /sys/block/mdX/md/sync_action

然后观看mismatch_cnt

watch cat /sys/block/mdX/md/mismatch_cnt

只要保持为0,奇偶校验就可以。

也可以看看man mdSCRUBBING AND MISMATCHES

   A  count  of  mismatches is recorded in the sysfs file md/mismatch_cnt.
   This is set to zero when a scrub starts and is incremented  whenever  a
   sector  is  found  that is a mismatch.  md normally works in units much
   larger than a single sector and when it finds a mismatch, it  does  not
   determine exactly how many actual sectors were affected but simply adds
   the number of sectors in the IO unit that was used.  So a value of  128
   could  simply  mean  that  a  single  64KB  check found an error (128 x
   512bytes = 64KB).

这个过程将花费与重建本身一样长的时间……因为它基本上与重建做同样的事情。有关进展,请参阅/proc/mdstat

也可以仅测试特定区域 - 如果您只想检查 75% 标记附近 - 但它更复杂,因为(我认为)没有命令选项mdadm。您可以设置md/sync_min,md/sync_max来确定一个范围(默认范围0-max覆盖整个设备)。

如果您希望固定奇偶校验,check请使用repair修复奇偶校验,而不是纯粹提供信息。但是您必须确保数据正确且奇偶校验不正确。否则,如果您可以识别出单个磁盘包含不正确的数据(无论是数据还是奇偶校验),则必须删除该磁盘并将其添加为新磁盘并再次重建。

不幸的是,确定不匹配处理的正确行动方案可能相当复杂......

相关内容