GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie führe ich einen Befehl aus, sobald ein ZFS-Scrub *abgeschlossen* ist?

Lösung 1:

Unter ZFS Unter Linux ab Version 0.6.3 Dies kann recht elegant mit dem ZFS Event Daemon (zed). gehandhabt werden Da der Ereignis-Daemon die Kernel-Ereignisse direkt überwacht, kann er fast sofort auf alle auftretenden Ereignisse reagieren und ist nicht auf das ständige Abfragen und Analysieren der Ausgabe eines anderen Befehls angewiesen.

Erstellen Sie ein Shell-Skript mit einem beliebigen Dateinamen, der mit /etc/zfs/zed.d/scrub.finish beginnt (Beispiel:scrub.finish-custom.sh ). Dieses Skript kann jede geeignete Aktion ausführen, z. B. eine E-Mail senden, irgendwo einen Protokolleintrag schreiben oder das System zum Singen und Tanzen bringen (OK, das vielleicht nicht). Es werden Beispiele bereitgestellt, die einen Ausgangspunkt bieten können.

Wenn Sie nach Abschluss des Scrub-Vorgangs nur eine E-Mail erhalten möchten, geben Sie scrub.finish-email.sh ein Skript wird das gut tun. Bearbeiten Sie einfach /etc/zfs/zed.d/zed.rc, um anzugeben, wohin die E-Mail gesendet werden soll und ob eine E-Mail gesendet werden soll, auch wenn der Pool keine Probleme hat, stellen Sie sicher, dass etwas namens scrub.finish gefolgt von irgendetwas in /etc/zfs/zed.d führt dorthin, und stellen Sie sicher, dass zed beim Booten gestartet wird.

Lösung 2:

Ich verwende dieses einfache Skript, um Statusberichte per E-Mail zu löschen.

  • zpadmin

Wenn Sie den Übergang von scrub running erkennen müssen bis scrub finished Ich würde den state überprüfen Feld von zpool status Ausgang. Etwa so:

# start scrubbing 
zpool scrub ZPOOL

# wait till scrub is finished
while zpool status ZPOOL | grep 'scan:  *scrub in progress' > /dev/null; do
   echo -n '.'
   sleep 10
done

# send a report
zpool status | mail -s "zpool status: ZPOOL" RECIPIENT

Lösung 3:

Obwohl diese Frage spezifisch für Linux ist, ist sie das erste Google-Ergebnis bei der Suche nach "warten, bis das Scrubben beendet ist" , daher möchte ich einige nützliche Informationen für Leute hinzufügen, die OpenSolaris (getestet auf OmniOS, aber SmartOS, illumos usw. sollten ähnlich sein) anstelle von Linux verwenden (normales Solaris sollte auch funktionieren, aber ich habe es dort nicht getestet).

Sie können syseventadm verwenden um Kernel-Ereignisse zu registrieren. Die vollständige Liste finden Sie in /usr/include/sys/sysevent/eventdefs.h (in dieser Datei einfach nach "ZFS" suchen). Nach dem Hinzufügen von Ereignissen muss der Dienst neu gestartet werden, zum Beispiel:

syseventadm add -c EC_zfs -s ESC_ZFS_scrub_finish /path/to/script.sh \$pool_name
syseventadm restart

Auf diese Weise wird das Skript gestartet, wenn das Scrubbing eines Pools beendet ist – Sie müssen im Skript überprüfen, ob $1 entspricht Ihrem gewünschten Poolnamen. Dennoch ist es viel weniger Overhead als Polling.

Lösung 4:

Ich hatte viel Erfolg mit zfswatcher


Linux
  1. Wie führen wir einen in einer Variablen gespeicherten Befehl aus?

  2. Wie führe ich einen Befehl als Systemadministrator (root) aus?

  3. So benennen Sie mehrere Dateien gleichzeitig in Linux um

  4. So richten Sie das ZFS-Dateisystem unter Linux mit zpool-Befehlsbeispielen ein

  5. Wie führe ich den Vim-Befehl von der Shell aus?

So führen Sie den Sudo-Befehl ohne Passwort aus

So führen Sie Linux-Befehle im Hintergrund aus

So führen Sie einen Befehl für eine bestimmte Zeit in Linux aus

So konfigurieren Sie ZFS unter Ubuntu 20.04

So führen Sie einen Befehl regelmäßig unter Linux mit Watch aus

So führen Sie mehrere Linux-Befehle gleichzeitig im Linux-Terminal aus