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?
la source
Bien que cette question soit spécifique à Linux, c'est le premier résultat google lors de la recherche de "attendre la fin du scrub" , donc je voudrais ajouter des informations utiles pour les personnes utilisant OpenSolaris (testé sur OmniOS, mais SmartOS, illumos, etc. . devrait être similaire) au lieu de Linux (Solaris normal devrait également fonctionner, mais je ne l'ai pas testé là-bas).
Vous pouvez utiliser
syseventadm
pour enregistrer les événements du noyau. La liste complète se trouve dans/usr/include/sys/sysevent/eventdefs.h
(recherchez simplement "ZFS" dans ce fichier). Après avoir ajouté des événements, le service doit être redémarré, par exemple:De cette façon, le script sera démarré lorsque tout nettoyage d'un pool se terminera - vous devez vérifier à l'intérieur du script s'il
$1
est égal au nom de votre pool souhaité. Pourtant, c'est beaucoup moins de frais généraux que les sondages.la source
J'utilise ce script simple pour nettoyer les rapports d'état par e-mail.
Si vous avez besoin de détecter la transition de
scrub running
à,scrub finished
je vérifierais lestate
champ dezpool status
sortie. Quelque chose comme ça:la source
while ... done
boucle vérifie cette condition.grep -q
devrait également fonctionner dans votre extrait de script shell, annulant la nécessité de rediriger vers / dev / null. :)J'ai eu beaucoup de succès avec zfswatcher
la source