Soluzione 1:
Su ZFS Su Linux, a partire dalla versione 0.6.3 questo può essere gestito in modo abbastanza elegante utilizzando il ZFS Event Daemon (zed). Il demone degli eventi, in virtù del monitoraggio diretto degli eventi del kernel, può reagire quasi immediatamente a qualsiasi evento che si verifica e non dipende dal polling continuo e dall'analisi dell'output di qualche altro comando.
Crea uno script di shell con qualsiasi nome di file che inizi con /etc/zfs/zed.d/scrub.finish
(ad esempio, scrub.finish-custom.sh
). Quello script può intraprendere qualsiasi azione appropriata, come inviare un'e-mail, scrivere una voce di registro da qualche parte o far cantare e ballare il sistema (OK, forse non quello). Vengono forniti esempi che possono fornire un punto di partenza.
Se tutto ciò che desideri è ricevere un'e-mail al termine dello scrub, il scrub.finish-email.sh
fornito script lo farà bene. Semplicemente modifica /etc/zfs/zed.d/zed.rc per indicare dove deve essere inviata l'email e se deve essere inviata un'email anche se il pool non ha problemi, assicurati qualcosa chiamato scrub.finish
seguito da qualsiasi cosa in /etc/zfs/zed.d porti ad esso, e assicurati che zed sia avviato all'avvio.
Soluzione 2:
Uso questo semplice script per ripulire i rapporti sullo stato via e-mail.
- zpadmin
Se devi rilevare la transizione da scrub running
a scrub finished
Controllerei il state
campo di zpool status
produzione. Qualcosa del genere:
# 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
Soluzione 3:
Sebbene questa domanda sia specifica di Linux, è il primo risultato di Google quando si cerca "aspetta fino al termine dello scrub" , quindi vorrei aggiungere alcune informazioni utili per le persone che eseguono OpenSolaris (testato su OmniOS, ma SmartOS, illumos ecc. dovrebbero essere simili) invece di Linux (anche il normale Solaris dovrebbe funzionare, ma non l'ho testato lì).
Puoi usare syseventadm
per registrare gli eventi del kernel. L'elenco completo può essere trovato in /usr/include/sys/sysevent/eventdefs.h
(basta cercare "ZFS" in questo file). Dopo aver aggiunto gli eventi, il servizio deve essere riavviato, ad esempio:
syseventadm add -c EC_zfs -s ESC_ZFS_scrub_finish /path/to/script.sh \$pool_name
syseventadm restart
In questo modo, lo script verrà avviato al termine dello scrubbing di qualsiasi pool:devi controllare all'interno dello script se $1
corrisponde al nome del pool desiderato. Tuttavia, è molto meno sovraccarico rispetto al polling.
Soluzione 4:
Ho avuto molto successo con zfswatcher