Назад | Перейти на главную страницу

Как мне указать, какие диски являются частью каждого RAID-массива?

У меня есть программный RAID Linux с использованием md. Я хочу перечислить все мои RAID-массивы и каждый жесткий диск, подключенный к ним. Есть простой способ сделать это?

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>

Метод # 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

Если у вас есть три программных 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 будет обрабатывать это.