如何使Linux软件RAID1检测到光盘损坏?

这是一个噩梦般的日子:运行在Linux SW-RAID1上的虚拟化服务器运行一个虚拟机,在看似随机的代码块中出现随机的段错误。

在debugging过程中,我发现一个文件在每次运行时都会给出不同的md5sum。 深入挖掘,我发现:构成RAID1镜像的原始磁盘分区包含2位差异和ca. 9个扇区在一张光盘上完全空白,并在另一张光盘上填充数据。

显然,Linux从一个未被选定的镜像光盘中给出了一个扇区。 所以有时候同样的部门会返回OK,有时候损坏的部分会被退回。

文档说:

RAID不能也不应该防止媒体上的数据损坏。 因此,故意破坏磁盘上的数据(例如使用dd)以查看RAID系统如何处理该数据也没有任何意义。 这是最有可能的(除非你损坏RAID超级块),RAID层永远不会发现损坏,但是你的RAID设备上的文件系统将被破坏。

谢谢。 这将帮助我睡觉。 : – /

有没有办法让Linux至less通过使用部门校验或类似的东西来检测这种腐败? 这是否会在RAID5设置中检测到? 这是我希望使用ZFS或btrfs(一旦没有超级pipe理function就可以使用)的时刻?

编辑: 我并不孤单 。

你可以强制检查(例如)md0

echo "check" > /sys/block/md0/md/sync_action 

你可以用来检查testing的状态

 cat /sys/block/md0/md/sync_action 

当它返回check检查正在运行,一旦它返回idle你可以做一个

 cat /sys/block/$dev/md/mismatch_cnt 

以查看不匹配计数是否为零。 正如大多数工业硬件RAID不断在后台运行(通常称之为“RAID scrubbing”),而arrays空闲时,许多发行版自动执行此检查,例如每周运行一次。 请注意,根据fedora的自动检查文件中的注释,在内核中的RAID1写入是无缓冲的,因此即使对于安装了arrays的健康arrays,失配计数也可能不为零。

因此,如果可能的话,通过在虚拟机closures时进行这种检查来静止arrays,这可能是一个好主意。

我想补充一点,我同意他们这样说的文档

RAID不能也不应该防止媒体上的数据损坏

RAID应该防止设备完全失效; 防止存储设备元素中的增量随机故障是错误检查和块重新映射的工作,这在控制器本身中可能是最好的。 我很高兴文档告诫人们RAID的局限性,特别是如果它是在片状设备上实现的。 我发现我的驱动器频繁的smartctl运行状况检查帮助我停留在驱动器上,这些驱动器开始显示导致不同步镜像的错误。