Программно проверить RAID-массив Linux (MD)

230
Daniel Marschall

Я хотел бы программно проверить, не сломаны ли RAID-массивы Linux.

Для массива RAID-1 (зеркальный) я использую этот простой метод, который работал в течение нескольких лет с хорошими результатами:

cat /proc/mdstat | grep "_" > /dev/null EC=$? 

Идея заключается в том, что / proc / mdstat показывает, в порядке [UU]ли оба жестких диска, и [U_]если один из них вышел из строя, [__]если оба вышли из строя, и т. Д. Обычно вывод / proc / mdstat не имеет "_" внутри, поэтому за работой.

Теперь у нас есть дополнительно массив RAID-0 (чередование). В / proc / mdstat это выглядит так:

md2 : active linear sde1[0] sdf1[1] 3906699440 blocks super 1.2 0k rounding 

У меня вопрос, как я могу определить, не поврежден ли этот массив RAID? Как будет выглядеть mdstat? (Примечание: я знаю, что / dev / md2 будет уничтожен при выходе из строя одного из этих дисков, но я хотел бы программно проверить массив RAID вместо проверки работоспособности виртуального диска md2)

ОС Debian 9

0
Пакет `mdadm` предлагает вам готовое решение, включая уведомления по электронной почте. Eugen Rieck 5 лет назад 0
@EugenRieck Да, я знаю эту функцию. Но я бы хотел запросить состояние всех массивов с помощью своего собственного скрипта, который имеет некоторую дополнительную логику (то есть автоматическая остановка внутренних резервных копий, чтобы сохранить время жизни оставшихся дисков). Daniel Marschall 5 лет назад 0
`mdadm --detail / dev / md0 | grep -e '^ \ s * State:' | awk ' '`выведет" clean "или" active "для хорошего массива. Eugen Rieck 5 лет назад 1
Большое спасибо за этот совет. Можете ли вы опубликовать его как ответ? Daniel Marschall 5 лет назад 0

2 ответа на вопрос

1
Eugen Rieck

В то время как анализ /proc/mdstatвозможен, он становится беспорядочным, если вы хотите специализироваться на массиве или хотите охватить различные уровни RAID и режимы сбоев.

mdadm --detail /dev/md0 | grep -e '^\s*State : ' | awk '{ print $NF; }' 

выдаст «чистый» или «активный» для хорошего массива. Вы также можете зацикливаться, /dev/md/*чтобы получить все массивы.

0
Daniel Marschall

Другое решение - запросить состояние диска cat /sys/block/md*/md/dev-*/state. Это проще и не требует прав суперпользователя.

Возможные значения (могут быть разделены запятыми) описаны здесь:

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

Похожие вопросы