Wie überprüfe ich 'mdadm' RAIDs während des Betriebs?


41

Ich fange an, eine Sammlung von Computern zu Hause zu bekommen und um sie zu unterstützen, habe ich meine "Server" -Linux-Box, auf der ein RAID-Array ausgeführt wird.

Es ist momentan so mdadm RAID-1, RAID-5sobald ich mehr Laufwerke habe (und dann RAID-6hoffe ich es). Ich habe jedoch verschiedene Geschichten über Daten gehört, die auf einem Laufwerk beschädigt wurden, und Sie haben es nie bemerkt, weil das andere Laufwerk verwendet wurde, bis das erste Laufwerk ausfällt und Ihr zweites Laufwerk ebenfalls verschraubt ist (und 3., 4.) , 5. Fahrt).

Offensichtlich sind Backups wichtig, und ich kümmere mich auch darum, aber ich weiß, dass ich zuvor Skripte gesehen habe, die behaupten, gegen dieses Problem zu helfen und es Ihnen ermöglichen, Ihr RAID zu überprüfen, während es ausgeführt wird. Auf der Suche nach diesen Skripten fällt es mir jedoch schwer, irgendetwas zu finden, das dem, was ich zuvor ausgeführt habe, ähnelt, und ich fühle mich veraltet und verstehe nicht, was sich geändert hat.

Wie würden Sie ein laufendes RAID überprüfen, um sicherzustellen, dass alle Festplatten weiterhin ordnungsgemäß funktionieren?

Ich überwache SMART auf allen Laufwerken und mdadmmöchte mich bei einem Ausfall per E-Mail benachrichtigen. Ich möchte jedoch wissen, dass sich meine Laufwerke gelegentlich auch selbst überprüfen.


Klingt so, als wären Sie bereits auf dem richtigen Weg. Sie müssen lediglich einen Cron einrichten, um die Ergebnisse von smartctl für Ihre Laufwerke zu erhalten.
Laebshade

Antworten:


56

Der Sinn von RAID mit Redundanz ist, dass es so lange wie möglich weiterarbeitet, aber offensichtlich Fehler erkennt, die es in einen herabgesetzten Modus versetzen, z. B. eine fehlerhafte Festplatte. Sie können den aktuellen Status eines Arrays anzeigen mit mdadm -D:

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7

Außerdem ist der Rückgabestatus von mdadm -Dungleich Null, wenn ein Problem vorliegt, z. B. eine ausgefallene Komponente (1 zeigt einen Fehler an, den der RAID-Modus kompensiert, und 2 zeigt einen vollständigen Fehler an).

Sie können auch eine kurze Übersicht über den Status aller RAID-Geräte anzeigen /proc/mdstat. Sie können auch Informationen zu einem RAID-Gerät abrufen /sys/class/block/md*/md/*. Siehe Documentation/md.txtin der Kernel-Dokumentation. Einige /sysEinträge sind auch beschreibbar. Sie können zum Beispiel eine vollständige Überprüfung md0mit auslösen echo check >/sys/class/block/md0/md/sync_action.

Zusätzlich zu diesen Stichproben kann mdadm Sie benachrichtigen, sobald etwas Schlimmes passiert. Stellen Sie sicher, dass Sie MAILADDR rootin /etc/mdadm.conf(einige Distributionen (zB Debian) dies automatisch eingerichtet haben). Sie erhalten dann eine E-Mail-Benachrichtigung, sobald ein Fehler (ein herabgesetztes Array) auftritt .

Stellen Sie sicher, dass Sie E-Mails empfangen, die auf dem lokalen Computer an root gesendet werden (einige moderne Distributionen lassen dies aus, da sie der Ansicht sind, dass alle E-Mails über externe Anbieter gesendet werden - der Empfang lokaler E-Mails ist jedoch für jeden seriösen Systemadministrator erforderlich). Testen Sie dies durch root eine Mail zu senden: echo hello | mail -s test root@localhost. Normalerweise erfordert eine ordnungsgemäße E-Mail-Einrichtung zwei Dinge:

  • Führen Sie einen MTA auf Ihrem lokalen Computer aus. Der MTA muss mindestens so eingerichtet sein, dass die Zustellung lokaler E-Mails möglich ist. Alle Distributionen werden mit geeigneten MTAs geliefert. Wählen Sie eine beliebige Option aus (jedoch nicht nullmailer, wenn die E-Mail lokal zugestellt werden soll).
  • Leiten Sie E-Mails an Systemkonten (mindestens root) an eine Adresse weiter, die Sie regelmäßig lesen. Dies kann Ihr Konto auf dem lokalen Computer oder eine externe E-Mail-Adresse sein. Bei den meisten MTAs kann die Adresse in konfiguriert werden /etc/aliases. du solltest eine Zeile haben wie

    root: djsmiley2k
    

    für die Lieferung vor Ort oder

    root: djsmiley2k@mail-provider.example.com
    

    für die Fernzustellung. Wenn Sie sich für die Remotezustellung entscheiden, stellen Sie sicher, dass Ihr MTA dafür konfiguriert ist. Abhängig von Ihrem MTA müssen Sie den newaliasesBefehl möglicherweise nach der Bearbeitung ausführen /etc/aliases.


Können Sie erklären, warum Nullmailer nicht verwendet werden sollte? Liegt es an den in unix.stackexchange.com/questions/1449/… genannten Gründen ? Welchen MTA würden Sie empfehlen?
Cameron Martin

@CameronMartin Nullmailer leitet E-Mails nur an einen Remotecomputer weiter. Die lokale Zustellung wird nicht durchgeführt. Sie können es verwenden, wenn Sie irgendwo einen SMTP-Server haben, der E-Mails von Ihrem Computer akzeptiert, aber nicht, wenn Sie die E-Mails lokal zustellen. Ich habe meine Antwort zur Klarstellung bearbeitet.
Gilles 'SO- hör auf böse zu sein'

19

Sie können eine Überprüfung des gesamten Arrays erzwingen, während es online ist. Um beispielsweise das Array zu überprüfen /dev/md0, führen Sie Folgendes als root aus:

echo check > /sys/block/md0/md/sync_action

Ich habe auch einen Cron-Job, der den folgenden Befehl einmal im Monat ausführt:

tar c /dir/of/raid/filesystem > /dev/null

Es ist keine gründliche Überprüfung des Laufwerks selbst, aber es zwingt das System, regelmäßig zu überprüfen, ob (fast) jede Datei erfolgreich von der Festplatte gelesen werden kann. Ja, einige Dateien werden aus dem Speichercache anstatt von der Festplatte gelesen. Wenn sich die Datei jedoch im Arbeitsspeicher befindet, wurde sie kürzlich erfolgreich von der Festplatte gelesen oder wird in Kürze auf die Festplatte geschrieben. In beiden Fällen werden auch Laufwerksfehler aufgedeckt. Auf jeden Fall testet die Ausführung dieses Jobs das wichtigste Kriterium eines RAID-Arrays ("Kann ich meine Daten erfolgreich lesen?"), Und in den drei Jahren, in denen ich mein Array ausgeführt habe, war es das eine Mal, als eine Festplatte kaputt ging dieser Befehl, der es entdeckt hat.

Eine kleine Warnung ist, dass dieser Befehl lange dauern wird, wenn Ihr Dateisystem groß ist. Mein System benötigt ca. 6 Stunden / TiB. Ich ioniceführe es mit aus, damit der Rest des Systems während der Laufwerksprüfung nicht zum Stillstand kommt:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null

Beachten Sie, dass dies ionicenur funktioniert, wenn Sie den (Standard-) CFQ-E / A-Scheduler verwenden.
Totor

Für die meisten mag dies offensichtlich sein, für mich jedoch nicht. Wie benachrichtigt Sie die Ausführung eines Skripts, dessen Ausgabe an devnull umgeleitet wird, tatsächlich über etwas? Ist es der Fall, dass "tar" auf Fehler stößt, die an den mdadm-Daemon weitergegeben werden, der Ihnen (vermutlich) eine E-Mail sendet?
ljwobker

Meine Frage an Sie ist stharward, wie Sie die Teer-Fehler aufgreifen, wenn es von einem Cron-Job ausgeführt wird? Woher kommt diese Ausgabe? Ich hätte gedacht, Sie würden eine Umleitung für stderr zu einer Datei hinzufügen, die regelmäßig überwacht werden könnte oder deren Ende auf die Konsole zum Öffnen eines Terminalfensters gedruckt wird :)
Madivad

1
@ljwobker Entschuldigung, dass Sie einen alten Thread wiederbelebt haben. Ich denke, die Absicht des tar-Befehls hier ist es, zu versuchen, den gesamten Inhalt des Volumes zu lesen. Dies würde überprüfen, ob das gesamte Volume noch lesbar ist, und md die Möglichkeit geben, eine fehlerhafte Festplatte zu erkennen.
mikepj

1
Wenn es von einem Cronjob kommt, sendet Cron normalerweise die gesamte Ausgabe direkt an mailto = location, wenn einer gesetzt ist, andernfalls an root. Allerdings ... Ich frage mich, ob DD besser wäre als Teer, um den Overhead zu senken.
djsmiley2k - CoW

11

Das Debian- und Ubuntu-Paket 'mdadm' enthält die Datei

/etc/cron.d/mdadm

Der Befehl wird abwechselnd am ersten Sonntag eines jeden Monats ausgeführt

/usr/share/mdadm/checkarray --cron --all --idle --quiet

Dadurch werden alle Arrays auf Konsistenz überprüft (es sei denn, Sie setzen AUTOCHECK in / etc / default / mdadm auf false ). Ein Bericht wird an den Benutzer "root" gesendet (stellen Sie sicher, dass Sie solche E-Mails erhalten).


8

Mit dieser einfachen Funktion überprüfe ich /proc/mdstat:

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }

ordentlich! Ich mag den Stil :) .. das ist genau das, wonach ich gesucht habe, um es in MOTD zu setzen :) Danke!
Jirislav
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.