Guide · Sauvegardes
Surveiller BorgBackup avec un dead man's switch
borg create peut échouer bruyamment sans que vous le voyiez jamais, parce que le cron qui le lance s'est arrêté il y a des semaines. Un check-in à la fin de chaque exécution comble ce trou : pas de check-in, vous êtes alerté.
1. Créez un check
Créez un check dans Mortemain qui correspond au planning de votre sauvegarde (par exemple tous les jours à 02h00) avec une grâce assez large pour couvrir une exécution lente. Copiez son URL de ping :
https://ping.mortemain.com/votre-uuid-de-check
2. Enveloppez borg create dans un script
Borg sort avec le code 0 en cas de succès, 1 pour un avertissement (des fichiers ont changé pendant la lecture, généralement sans gravité) et 2 pour une vraie erreur. Traitez 0 et 1 comme un succès et faites le check-in dans ce cas, sinon appelez /fail :
#!/usr/bin/env bash set -uo pipefail PING_URL="https://ping.mortemain.com/votre-uuid-de-check" REPO="user@backup-host:/path/to/repo" export BORG_PASSPHRASE="votre-phrase-secrete" borg create --stats --compression lz4 \ "$REPO"::'{hostname}-{now:%Y-%m-%d_%H:%M}' \ /etc /home /var/www EXIT=$? borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6 "$REPO" PRUNE_EXIT=$? # on prend aussi en compte le code de prune, l'un ou l'autre peut signaler un souci if [ $EXIT -le 1 ] && [ $PRUNE_EXIT -le 1 ]; then curl -fsS -m 10 --retry 3 "$PING_URL" > /dev/null else curl -fsS -m 10 --retry 3 "$PING_URL/fail" > /dev/null fi
Planifiez-le avec cron, en pointant vers le wrapper plutôt que vers borg directement :
# tous les jours à 02h00
0 2 * * * /usr/local/bin/borg-backup.sh
3. Mesurez la durée d'exécution (facultatif)
Pinguez /start juste avant que borg create ne démarre. Mortemain suit alors la durée réelle de chaque exécution, utile pour repérer un dépôt qui grossit lentement au point de dépasser sa fenêtre de sauvegarde :
curl -fsS -m 10 "$PING_URL/start" > /dev/null borg create --stats --compression lz4 \ "$REPO"::'{hostname}-{now:%Y-%m-%d_%H:%M}' \ /etc /home /var/www
Vous utilisez borgmatic plutôt que les commandes borg brutes ? Il a des hooks natifs de type healthchecks : pointez son ping_url vers les trois URL Mortemain (de base, /start, /fail) dans borgmatic.yaml et passez-vous entièrement du script wrapper.
Testez
Lancez le script une fois à la main, le check passe actif. Puis commentez la ligne cron pendant une journée et vérifiez que l'alerte de panne arrive après la grâce : exactement l'échec de cron silencieux qu'un simple journal de sauvegarde ne vous révèle pas.