Ich möchte cron verwenden, um regelmäßige Scrubs meines ZFS-Pools zu planen, und zu einem relativ kurzen Zeitpunkt nach Abschluss des Scrubs einen Statusbericht per E-Mail an mich selbst senden. Dies dient dazu, Probleme zu erkennen, ohne sie manuell suchen zu müssen (drücken statt ziehen).
Der erste Teil ist einfach: Richten Sie einfach einen Cron-Job ein, der zpool scrub $POOL
in jedem Intervall, das in meiner speziellen Situation angemessen ist, als Root ausgeführt wird.
Im zweiten Teil bin ich mir nicht ganz so sicher, wie ich es machen soll. zpool scrub
kehrt sofort zurück und dann wird das Scrub vom System im Hintergrund ausgeführt (was sicherlich wünschenswert ist, wenn das Scrub von einem Administrator von einem Terminal aus initiiert wird). zpool status
gibt mir einen Statusbericht und beendet das Programm (mit dem Beendigungscode 0, während das Scrub ausgeführt wird; es ist noch nicht abgeschlossen, sodass ich nicht weiß, ob sich der Beendigungsstatus ändert, wenn er abgeschlossen ist, aber ich bezweifle es). Der einzige für zpool scrub dokumentierte Parameter ist -s
"stop scrubbing ".
Das Hauptproblem besteht darin, die Statusänderung vom Schrubben zum fertigen Schrubben zu erkennen . Angesichts dessen sollte der Rest an seinen Platz fallen.
Im Idealfall möchte ich sagen zpool scrub
, dass ich nicht zurückkehren soll, bis das Peeling beendet ist, aber ich sehe keine Möglichkeit, dies zu erreichen. (Es würde es fast zu einfach machen, einfach zu cronen zpool scrub --wait-until-done $POOL; zpool status $POOL
.)
Andernfalls möchte ich das System fragen, ob gerade ein Scrub ausgeführt wird, vorzugsweise auf eine Weise, die nicht zu riskant ist, mit einem Upgrade oder einer Konfigurationsänderung zu brechen, damit ich darauf reagieren kann, ob ein zuvor ausgeführt wird oder nicht Das Scrubben ist beendet (durch Ausführen eines Zpool-Status, wenn der Scrub-Status vom Scrubben zum Nicht-Scrubben wechselt).
Dieses spezielle Setup ist für ein Workstation-System vorgesehen. Während ein Überwachungstool wie Nagios wahrscheinlich Add-Ins enthält, die das Problem lösen würden, ist es ziemlich übertrieben, ein solches Tool nur für diese eine Aufgabe zu installieren. Kann jemand eine Low-Tech-Lösung für das Problem vorschlagen?
quelle
Obwohl diese Frage spezifisch für Linux ist, ist sie das erste Google-Ergebnis bei der Suche nach "Warten, bis das Scrub abgeschlossen ist" . Daher möchte ich einige nützliche Informationen für Benutzer von OpenSolaris hinzufügen (getestet unter OmniOS, aber SmartOS, illumos usw.) sollte ähnlich sein) anstelle von Linux (normales Solaris sollte auch funktionieren, aber ich habe es dort nicht getestet).
Sie können
syseventadm
damit Kernel-Ereignisse registrieren. Die vollständige Liste finden Sie in/usr/include/sys/sysevent/eventdefs.h
(suchen Sie einfach in dieser Datei nach "ZFS"). Nach dem Hinzufügen von Ereignissen muss der Dienst neu gestartet werden, zum Beispiel:Auf diese Weise wird das Skript gestartet, wenn das Scrubben eines Pools abgeschlossen ist. Sie müssen im Skript überprüfen, ob es
$1
Ihrem gewünschten Poolnamen entspricht. Trotzdem ist der Aufwand viel geringer als beim Abrufen.quelle
Ich verwende dieses einfache Skript zum Bereinigen von Statusberichten per E-Mail.
Wenn Sie Übergang zu erkennen , müssen von
scrub running
zuscrub finished
würde ich das überprüftstate
Feldzpool status
ausgegeben. Etwas wie das:quelle
while ... done
Schleife genau auf diesen Zustand überprüft.grep -q
auch in Ihrem Shell-Skript-Snippet funktionieren, sodass Sie nicht nach / dev / null umleiten müssen. :)Ich habe viel Erfolg mit zfswatcher gehabt
quelle