web-dev-qa-db-ja.com

どのRAIDアレイの一部であるドライブをリストするのですか?

Mdを使用してLinuxソフトウェアRAIDを持っています。すべてのRAIDアレイとそれらに接続されている各ハードドライブを一覧表示したいと思います。それを行う簡単な方法はありますか?

7
Jamieson Becker

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>
5
sysconfig

方法#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を使用する

次のように、/proc/mdstat出力からHDDメンバーのリストを解析することもできます。

$ 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
slm

システムに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

RAIDスーパーブロックが処理するため、どのドライブがどのアレイにあるかを追跡するためにUUIDは必要ありません。

1
Jamieson Becker