以编程方式检查 Linux RAID 阵列 (MD)

Dan*_*all 2 linux software-raid

我想以编程方式检查 Linux RAID 阵列是否损坏。

对于 RAID-1(镜像)阵列,我使用了这个简单的方法,该方法已经工作了几年,效果良好:

cat /proc/mdstat | grep "_" > /dev/null
EC=$?
Run Code Online (Sandbox Code Playgroud)

其背后的想法是/proc/mdstat显示[UU]两个硬盘是否正常,[U_]如果一个硬盘发生故障,[__]如果两个硬盘都发生故障等。通常, /proc/mdstat 的输出里面没有“_”,所以它是在职的。

现在我们还有一个 RAID-0(条带)阵列。在/proc/mdstat中,它看起来像这样:

md2 : active linear sde1[0] sdf1[1]
      3906699440 blocks super 1.2 0k rounding
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何检测这个 RAID 阵列是否损坏?mdstat 会是什么样子?(注意:我知道当其中一个磁盘发生故障时 /dev/md2 将被破坏,但我想以编程方式检查 RAID 阵列,而不是检查虚拟驱动器 md2 的功能)

操作系统是 Debian 9。

Dan*_*all 5

另一种解决方案是查询磁盘状态cat /sys/block/md*/md/dev-*/state。它更容易,并且不需要超级用户权限。

可能的值(可以用逗号分隔)如下所述:

https://www.kernel.org/doc/html/v4.15/admin-guide/md.html