Programmgesteuertes Linux RAID-Array (MD) prüfen

327
Daniel Marschall

Ich möchte programmgesteuert prüfen, ob Linux-RAID-Arrays defekt sind.

Für ein RAID-1-Array (Spiegel) verwende ich diese einfache Methode, die seit mehreren Jahren mit guten Ergebnissen funktioniert:

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

Die Idee dahinter ist, dass / proc / mdstat zeigt, [UU]ob beide Festplatten in Ordnung sind und [U_]wenn eine fehlerhaft ist, [__]wenn beide fehlgeschlagen sind usw. In der Regel hat die Ausgabe von / proc / mdstat kein "_" im Inneren Arbeiten.

Jetzt haben wir zusätzlich ein RAID-0 (Stripe) Array. In / proc / mdstat sieht das so aus:

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

Meine Frage ist, wie kann ich feststellen, ob dieses RAID-Array defekt ist? Wie würde mdstat aussehen? (Hinweis: Ich weiß, dass / dev / md2 zerstört wird, wenn eine dieser Festplatten ausfällt, aber ich möchte das RAID-Array programmgesteuert prüfen, anstatt das virtuelle Laufwerk md2 auf Funktionalität zu prüfen.)

Betriebssystem ist Debian 9.

0
Das `mdadm`-Paket bietet eine fertige Lösung für Sie, einschließlich E-Mail-Benachrichtigungen. Eugen Rieck vor 5 Jahren 0
@EugenRieck Ja, ich kenne diese Funktionalität. Ich möchte jedoch den Status aller Arrays mit einem eigenen Skript abfragen, das über eine zusätzliche Logik verfügt (dh, interne Sicherungen automatisch angehalten werden, um die Lebensdauer der verbleibenden Festplatten zu sichern). Daniel Marschall vor 5 Jahren 0
`mdadm --detail / dev / md0 | grep -e '^ \ s * State:' | awk ' '' gibt für ein gutes Array "clean" oder "active" aus. Eugen Rieck vor 5 Jahren 1
Vielen Dank für diesen Hinweis. Kannst du es bitte als Antwort posten? Daniel Marschall vor 5 Jahren 0

2 Antworten auf die Frage

1
Eugen Rieck

Während das Parsen /proc/mdstatmöglich ist, wird es unübersichtlich, wenn Sie sich auf ein Array spezialisieren oder verschiedene RAID-Level und Fehlermodi abdecken möchten.

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

gibt für ein gutes Array "clean" oder "active" aus. Sie können auch einen Loop übergehen /dev/md/*, um alle Arrays zu erhalten.

0
Daniel Marschall

Eine andere Lösung besteht darin, die Festplattenzustände abzufragen cat /sys/block/md*/md/dev-*/state. Dies ist einfacher und erfordert keine Superuser-Rechte.

Die möglichen Werte (können durch Kommas getrennt werden) werden hier beschrieben:

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