Solución 1:
En ZFS En Linux, a partir de versión 0.6.3 esto se puede manejar de manera bastante elegante usando el demonio de eventos ZFS (zed). El demonio de eventos, en virtud de monitorear los eventos del núcleo directamente, puede reaccionar casi inmediatamente a cualquier evento que ocurra y no depende del sondeo y análisis continuos de la salida de algún otro comando.
Cree un script de shell con cualquier nombre de archivo que comience con /etc/zfs/zed.d/scrub.finish
(por ejemplo, scrub.finish-custom.sh
). Ese script puede tomar cualquier acción apropiada, como enviar un correo electrónico, escribir una entrada de registro en algún lugar o hacer que el sistema cante y baile (bueno, tal vez no sea eso). Se proporcionan ejemplos que pueden proporcionar un punto de partida.
Si todo lo que desea es recibir un correo electrónico cuando se complete la limpieza, el scrub.finish-email.sh
proporcionado script hará eso muy bien. Simplemente edite /etc/zfs/zed.d/zed.rc para indicar a dónde se debe enviar el correo electrónico y si se debe enviar un correo electrónico también si el grupo no experimenta ningún problema, asegúrese de que algo se llame scrub.finish
seguido de cualquier cosa en /etc/zfs/zed.d conduce a él, y asegúrese de que zed se inicie en el arranque.
Solución 2:
Utilizo este sencillo script para borrar los informes de estado por correo electrónico.
- zpadmin
Si necesita detectar la transición desde scrub running
a scrub finished
Verificaría el state
campo de zpool status
producción. Algo como esto:
# 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
Solución 3:
Aunque esta pregunta es específica de Linux, es el primer resultado de Google al buscar "esperar hasta que finalice la limpieza" , por lo tanto, me gustaría agregar información útil para las personas que ejecutan OpenSolaris (lo probé en OmniOS, pero SmartOS, illumos, etc. deberían ser similares) en lugar de Linux (Solaris normal también debería funcionar, pero no lo probé allí).
Puedes usar syseventadm
para registrar eventos del núcleo. La lista completa se puede encontrar en /usr/include/sys/sysevent/eventdefs.h
(simplemente busque "ZFS" en este archivo). Después de agregar eventos, el servicio debe reiniciarse, por ejemplo:
syseventadm add -c EC_zfs -s ESC_ZFS_scrub_finish /path/to/script.sh \$pool_name
syseventadm restart
De esta manera, la secuencia de comandos se iniciará cuando finalice la limpieza de cualquier grupo; debe verificar dentro de la secuencia de comandos si $1
es igual a su nombre de grupo deseado. Aún así, es mucho menos sobrecarga que el sondeo.
Solución 4:
He tenido mucho éxito con zfswatcher