Me gustaría usar cron para programar revisiones periódicas de mi grupo ZFS, y en un tiempo razonablemente corto después de que finalice la limpieza , enviarme un informe de estado por correo electrónico. El propósito de esto es detectar cualquier problema sin tener que buscarlo manualmente (empujar en lugar de tirar).
La primera parte es fácil: simplemente configure un trabajo cron para que se ejecute zpool scrub $POOL
como root en cualquier intervalo que sea razonable en mi situación particular.
La segunda parte, no estoy tan seguro de cómo hacerlo. zpool scrub
vuelve inmediatamente y luego el sistema ejecuta el scrub en segundo plano (lo que sin duda es un comportamiento deseable si el scrub lo inicia un administrador desde un terminal). zpool status
me da un informe de estado y sale (con el código de salida 0 mientras se ejecuta el scrub; aún no ha terminado, así que no sé si el estado de salida cambia una vez que está hecho, pero lo dudo). El único parámetro documentado para la limpieza de zpool es -s
para "detener la limpieza".
El principal problema es detectar el cambio de estado de lavado a lavado terminado . Dado eso, el resto debe caer en su lugar.
Idealmente, me gustaría decirle zpool scrub
que no regrese hasta que termine el exfoliante, pero no veo ninguna forma de hacerlo. (Sería casi demasiado fácil simplemente cron zpool scrub --wait-until-done $POOL; zpool status $POOL
.)
De lo contrario, me gustaría preguntarle al sistema si un fregado está actualmente en progreso, preferiblemente de una manera que no corra demasiado riesgo de romper con una actualización o cambio de configuración, para que pueda decidir si se está ejecutando o no scrub ha finalizado (al ejecutar un estado de zpool cuando el estado de scrub pasa de scrubbing a no scrubbing).
Esta configuración particular es para un sistema de estación de trabajo, por lo que si bien una herramienta de monitoreo como Nagios probablemente tiene complementos que resolverían el problema, se siente demasiado exagerado instalar dicha herramienta solo para esta tarea. ¿Alguien puede sugerir una solución de baja tecnología para el problema?
fuente
Aunque esta pregunta es específica de Linux, es el primer resultado de Google cuando se busca "esperar hasta que termine el fregado" , 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ía ser similar) en lugar de Linux (Solaris normal también debería funcionar, pero no lo probé allí).
Puede usar
syseventadm
para registrar eventos del kernel. La lista completa se puede encontrar en/usr/include/sys/sysevent/eventdefs.h
(solo busque "ZFS" en este archivo). Después de agregar eventos, el servicio debe reiniciarse, por ejemplo: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 al nombre de grupo deseado. Aún así, es mucho menos sobrecarga que las encuestas.fuente
Utilizo este sencillo script para eliminar informes de estado por correo electrónico.
Si necesita detectar la transición de
scrub running
ascrub finished
, verificaría elstate
campo dezpool status
salida. Algo como esto:fuente
while ... done
comprobación de bucle para esta misma condición.grep -q
debería funcionar también en ese fragmento de script de shell tuyo, negando la necesidad de redirigir a / dev / null. :)He tenido mucho éxito con zfswatcher
fuente