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