如何列出每个 RAID 阵列的一部分驱动器?

fat*_*ror 8 raid mdadm software-raid

我有一个使用 md 的 linux 软件 RAID。我想列出我所有的 RAID 阵列和连接到它们的每个硬盘驱动器。有没有简单的方法来做到这一点?

slm*_*slm 12

方法#1 - 使用 mdadm 的详细信息

您可以使用mdadm命令 verbose switch, -v,从开关输出中获取设备列表,--detail --scan该列表的形式很容易解析为逗号分隔的形式。

$ mdadm -v --detail --scan /dev/md/raid1 | awk -F= '/^[ ]+devices/ {print $2}'
/dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sde1
Run Code Online (Sandbox Code Playgroud)

这可以进一步细化为每行 1 个。

$ mdadm -v --detail --scan /dev/md/raid1 | awk -F= '/^[ ]+devices/ {print $2}' | tr , '\n'
/dev/sda1
/dev/sdb1
/dev/sdc1
/dev/sde1
Run Code Online (Sandbox Code Playgroud)

当然,可以通过短切换来缩短时间mdadm

$ mdadm -vDs /dev/md/raid1 | awk -F= '/^[ ]+devices/ {print $2}' | tr , '\n'
/dev/sda1
/dev/sdb1
/dev/sdc1
/dev/sde1
Run Code Online (Sandbox Code Playgroud)

方法#2 - 使用 mdadm 的查询

您可以使用查询 ( -Q) 和详细信息 ( -D) 以及动词 ( -v) 来执行类似的操作:

$ mdadm -vQD /dev/md/raid1 | grep -o '/dev/s.*'
/dev/sdb1
/dev/sda1
/dev/sdc1
/dev/sde1
Run Code Online (Sandbox Code Playgroud)

方法 #3 - 使用 /proc/mdstat

您还可以从输出中解析 HDD 成员列表,/proc/mdstat如下所示:

$ grep 'md' /proc/mdstat | tr ' ' '\n' | sed -n 's/\[.*//p'
sde1
sdc1
sdb1
sda1
Run Code Online (Sandbox Code Playgroud)

这些将缺少该/dev部分,但您可以轻松地手动添加该部分,如下所示:

$ grep 'md' /proc/mdstat | tr ' ' '\n' | sed -n 's|^|/dev/|;s/\[.*//p'
/dev/sde1
/dev/sdc1
/dev/sdb1
/dev/sda1
Run Code Online (Sandbox Code Playgroud)

  • 对于 awk 和 sed 来说+1,它们比我的答案或 sysconfig 的答案更进一步。 (2认同)

小智 7

cat /proc/mdstat 会给你你需要的输出,相对容易解析,因为映射的设备与其成员在同一行,例如:

$ cat /proc/mdstat 

Personalities : [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [linear] [multipath] 
md0 : active raid1 sdf2[1] sde2[0]
      81854336 blocks super 1.2 [2/2] [UU]

md127 : active raid0 sdf3[1] sde3[0]
      286718976 blocks super 1.2 512k chunks

unused devices: <none>
Run Code Online (Sandbox Code Playgroud)


fat*_*ror 4

如果您的系统连接了三个软件 RAID 阵列(md0、md1、md2),以下简单的一行代码将显示连接到每个阵列的驱动器(将 ..2 更改为阵列总数):

sudo mdadm --query --detail /dev/md{0..2} | sudo mdadm --query --detail /dev/md{0..2} | grep 开发

/dev/md0:
    0    8    18     0    active sync   /dev/sdb2
/dev/md1:
    0    8    19     0    active sync   /dev/sdb3
/dev/md2:
    0    8    20     0    active sync   /dev/sdb4
    1    8    36     1    active sync   /dev/sdc4
Run Code Online (Sandbox Code Playgroud)

请注意,不需要 UUID 来跟踪哪些驱动器位于哪些阵列中,因为 RAID 超级块将处理该问题。