我有一个使用 md 的 Linux 软件 RAID。我想列出我的所有 RAID 阵列以及连接到它们的每个硬盘。有没有简单的方法可以做到这一点?
答案1
方法 #1 - 使用 mdadm 的详细信息
您可以使用mdadm
命令详细开关-v
,从交换机输出中获取设备列表--detail --scan
,这种列表的形式很容易解析为逗号分隔的形式。
$ mdadm -v --detail --scan /dev/md/raid1 | awk -F= '/^[ ]+devices/ {print $2}'
/dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sde1
这可以进一步细化为每行 1 个。
$ mdadm -v --detail --scan /dev/md/raid1 | awk -F= '/^[ ]+devices/ {print $2}' | tr , '\n'
/dev/sda1
/dev/sdb1
/dev/sdc1
/dev/sde1
当然,使用简短的开关可以将事情缩短mdadm
。
$ mdadm -vDs /dev/md/raid1 | awk -F= '/^[ ]+devices/ {print $2}' | tr , '\n'
/dev/sda1
/dev/sdb1
/dev/sdc1
/dev/sde1
方法 #2 - 使用 mdadm 的查询
您可以使用查询(-Q
)和详细信息(-D
)以及详细内容(-v
)来执行类似操作:
$ mdadm -vQD /dev/md/raid1 | grep -o '/dev/s.*'
/dev/sdb1
/dev/sda1
/dev/sdc1
/dev/sde1
方法 #3 - 使用 /proc/mdstat
您还可以从输出中解析 HDD 成员列表,/proc/mdstat
如下所示:
$ grep 'md' /proc/mdstat | tr ' ' '\n' | sed -n 's/\[.*//p'
sde1
sdc1
sdb1
sda1
这些将缺少/dev
部分,但您可以轻松地手动添加,如下所示:
$ grep 'md' /proc/mdstat | tr ' ' '\n' | sed -n 's|^|/dev/|;s/\[.*//p'
/dev/sde1
/dev/sdc1
/dev/sdb1
/dev/sda1
答案2
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>
答案3
如果系统中连接了三个软件 RAID 阵列 (md0、md1、md2),则以下简单的单行命令将显示连接到每个阵列的驱动器(将 ..2 更改为您的阵列总数):
sudo mdadm --query --detail /dev/md{0..2} | grep dev
/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
请注意,不需要 UUID 来跟踪哪些驱动器位于哪些阵列中,因为 RAID 超级块将处理该问题。
答案4
除了所有其他答案之外,值得一提的是,您还可以使用此命令查找您的设备配置:
lsblk