Je voudrais utiliser cron pour planifier des nettoyages périodiques de mon pool ZFS, et à un temps raisonnablement court après la fin du nettoyage , m'envoyer un rapport d'état par e-mail. Le but de ceci est d'attraper les problèmes sans avoir à les chercher manuellement (pousser plutôt que tirer).
La première partie est simple: il suffit de configurer un travail cron pour qu'il s'exécute en zpool scrub $POOL
tant que root à n'importe quel intervalle raisonnable dans ma situation particulière.
La deuxième partie, je ne sais pas trop comment faire. zpool scrub
renvoie immédiatement, puis le scrub est exécuté en arrière-plan par le système (ce qui est certainement un comportement souhaitable si le scrub est initié par un administrateur à partir d'un terminal). zpool status
me donne un rapport d'état et quitte (avec le code de sortie 0 pendant le scrub; il n'est pas encore terminé, donc je ne sais pas si l'état de sortie change une fois terminé, mais j'en doute). Le seul paramètre documenté pour zpool scrub est -s
pour "stop scrubbing".
Le problème principal est de détecter le changement d'état du nettoyage au nettoyage fini . Compte tenu de cela, le reste devrait se mettre en place.
Idéalement, je voudrais dire zpool scrub
de ne pas revenir avant la fin du gommage, mais je ne vois aucun moyen de le faire. (Il serait presque trop facile de simplement cron zpool scrub --wait-until-done $POOL; zpool status $POOL
.)
A défaut, je voudrais demander au système si un scrub est actuellement en cours, de préférence d'une manière qui ne risque pas trop de rompre avec une mise à niveau ou un changement de configuration, afin que je puisse agir sur l'exécution ou non d'un précédent le scrub est terminé (en exécutant un état zpool lorsque le statut du scrub passe du scrubbing au non scrubbing).
Cette configuration particulière est pour un système de poste de travail, donc même si un outil de surveillance tel que Nagios a probablement des compléments qui résoudraient le problème, il semble plutôt exagéré d'installer un tel outil pour cette seule tâche. Quelqu'un peut-il suggérer une solution moins technique au problème?