您可以使用以下命令启动 mdadm 阵列的清理echo 'check' > /sys/block/mdX/md/sync_action
,如果发现坏扇区,它会自动重写(来自镜像或来自 RAID5/6 的奇偶校验信息)。
然而如果所有块读取成功但发现不一致,则视为不匹配。在这种情况下,修复会很复杂,因为 mdadm 无法判断哪个镜像包含正确的数据 (RAID1/10),或者数据或奇偶校验是否已损坏 (RAID5)。
理论上,如果我对 RAID6 的理解正确的话,RAID6 不会出现这种情况。由于存在双重奇偶校验,因此应该可以精确定位单个损坏的位置,无论是数据还是奇偶校验。
- 我的理解是否正确,理论上这应该可行吗?
- 如果正确,mdadm 是否能够修复这些不一致的数据而无需猜测哪个块已损坏?
答案1
理论上是可能的:数据+奇偶校验给你关于数据应该是什么的三种意见;如果其中两个一致,则可以假设第三个是错误的,并根据前两个重写。
Linux RAID6 不这样做。相反,只要出现不匹配,两个奇偶校验值就被假定为不正确,并根据数据值重新计算。曾有人提议改为“多数票”制度,但尚未实施。
该mdadm
套件包括raid6check 实用程序它试图在奇偶校验不匹配的情况下找出哪个磁盘是坏的,但它有一些粗糙的边缘,默认情况下不安装,并且不能修复它发现的错误。
答案2
该raid6check
实用程序mdadm
包含repair
自版本 3.3(于 2013 年 9 月 3 日发布)以来的模式(更准确地说自此提交以来):https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/commit/?id=8a63c73123b9d022107c82bd684e17bf87bc081e)