#!/bin/bash # GENERE par Set-OPS (role serveur_backup). Ne pas editer a la main. # # SONDE « depot » — le depot accepte-t-il encore qu'on y depose ? # # Contrat : docs/supervision-conception.md (API des greffons Nagios) — une ligne, 0/1/2. # Mise en defaut PAR PARAMETRE : `serveur_backup_sonde_racine` (chemin non inscriptible). # # CE QU'ELLE NE MESURE PAS, ET C'EST LA DOCTRINE LA PLUS STRICTE DE CE DEPOT. # # Elle ne juge RIEN du contenu. Les instantanes sont chiffres cote client : ce serveur # heberge des octets qu'il ne peut pas ouvrir, donc qu'il ne peut pas juger. « Cet # instantane est-il recent, complet, restaurable ? » se demande a qui detient la cle, et # `client_backup` le fait deja depuis chaque noeud. LA VERIFICATION SUIT LA CLE. # # CE QU'ELLE MESURE, ET QUE PERSONNE D'AUTRE NE VOIT A TEMPS : que l'endroit accepte une # ECRITURE. Un systeme de fichiers remonte en lecture seule apres une erreur disque, un # volume plein, des droits qui ont derive — dans les trois cas le depot refuse tout, et # les clients ne l'apprennent qu'a leur prochaine execution, chacun de son cote. # # NEUF ROUGES EPARS NE DESIGNENT PAS UNE CAUSE COMMUNE. C'est la seule raison d'etre de # cette sonde : dire UNE fois, ici, ce que neuf machines diront plus tard sans savoir # qu'elles disent la meme chose. # # ON ECRIT VRAIMENT, ET SOUS L'IDENTITE QUI DEPOSE. Un `test -w` ment sur un montage en # lecture seule et sur un quota atteint. Seule une ecriture reelle, faite par le compte # que les clients empruntent, prouve que le depot prend encore. set -uo pipefail RACINE={{ serveur_backup_sonde_racine }} UTIL={{ serveur_backup_utilisateur }} [[ -d "${RACINE}" ]] || { echo "Le depot ${RACINE} n'existe pas."; exit 2; } temoin="${RACINE}/.setops-temoin-sonde" if ! sudo -u "${UTIL}" install -m 0600 /dev/null "${temoin}" 2>/dev/null; then echo "Le depot ${RACINE} refuse l'ecriture pour ${UTIL} — plein, en lecture seule, ou droits derives." exit 2 fi sudo -u "${UTIL}" rm -f "${temoin}" 2>/dev/null # CE CHIFFRE EST UN CONSTAT, PAS UN SEUIL. L'occupation appartient a Prometheus ; on la # publie ici en donnee de performance pour que le graphe existe, sans jamais en faire un # verdict. Icinga repond a une seule question — est-ce casse ? lisible=$(df -h --output=avail "${RACINE}" 2>/dev/null | tail -1 | tr -d ' ') octets=$(df -B1 --output=avail "${RACINE}" 2>/dev/null | tail -1 | tr -d ' ') depots=$(sudo -u "${UTIL}" find "${RACINE}" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | wc -l) echo "Le depot accepte l'ecriture — ${depots} depot(s) heberge(s), ${lisible} libres.|libre=${octets:-0}B depots=${depots}" exit 0