Marvin Pascale

[B.Log]

18 Dicembre 2022

Restic

Abbiamo parlato da poco di restic e ci eravamo lasciati con gli script di automazione eseguiti da crontab.

Siamo sicuri che i backup stiano funzionando?

Una delle cose peggiori che possiamo fare è quella di pensare che ora “è tutto a posto”. Il backup non è un essere senziente e, soprattutto, non è infallibile. Bisogna costantemente verificare, con cadenza settimanale oppure mensile per le situazioni non critiche, che i backup vengano eseguiti e che lo storage sia consistente. Se poi siamo proprio bravi, possiamo anche eseguire un test di ripristino di tanto in tanto. Non dimentichiamoci che bisogna impostare anche una rotazione dei backup altrimenti rischiamo di saturare il supporto oppure spendere cifre folli per gli storage in cloud (drive, S3, ecc).

Ovviamente restic ha dei tool/comandi per eseguire i check e possiamo analizzare gli output (più precisamente l’exit code) dei job di backup. Come prima cosa possiamo creare uno script di backup che verifichi l’exit code e “reagisca” di conseguenza. Quello che vogliamo ottenere è una notifica in caso di problemi.

In realtà, visto che sono paranoico, la notifica la faccio mandare in ogni caso.

Diamo uno sguardo ad un possibile script di backup /usr/bin/resticBackup

#!/bin/bash
echo "Inizio backup"
restic cache --cleanup
BACKUP_EXEC=`restic backup --verbose --exclude-caches --exclude=".cache" --exclude "*.log" --tag docker /opt/docker`
if [ $? == 0 ]; then
	/usr/bin/notify_by_slack "CHECK BACKUP" "$HOSTNAME" "RESTIC" "OK" "${BACKUP_EXEC}" "$data" > /dev/null 2>&1 &
else
	/usr/bin/notify_by_slack "CHECK BACKUP" "$HOSTNAME" "RESTIC" "KO" "${BACKUP_EXEC}" "$data" > /dev/null 2>&1 &
fi
echo "Rotazione backup"
restic forget --keep-daily 360 --prune

Nel mio caso invio una notifica su slack ma è possibile sostituirla con il sistema di notifiche/email che preferite. Cercando su Google troverete tantissime idee o script già pronti.

Arrivati a questo punto, possiamo modificare il crontab per far eseguire il nuovo script

#Restic
05 00 * * * . /root/.bashrc && /usr/bin/resticBackup

In un solo colpo: lanciamo il backup, verifichiamo che vada a buon fine e facciamo la rotazione (impostata a 360 giorni).

Basta così?

No!

Se volessimo essere ancora più ligi e dormire sonni più tranquilli, possiamo impostare una verifica su tutto il repository. Se vi ricordate bene restic non salva i file in chiaro e utilizza anche la deduplica.

Creiamo un altro script /usr/bin/check_restic

#!/bin/bash
RESTIC_RESULT=`restic check`
if [ $? == 0 ]; then
	/usr/bin/notify_by_slack "CHECK BACKUP" "$HOSTNAME" "RESTIC" "OK" "${RESTIC_RESULT}" "$data" > /dev/null 2>&1 &
else
	/usr/bin/notify_by_slack "CHECK BACKUP" "$HOSTNAME" "RESTIC" "KO" "${RESTIC_RESULT}" "$data" > /dev/null 2>&1 &
fi

e aggiorniamo il crontab

#Restic
05 00 * * * . /root/.bashrc && /usr/bin/resticBackup
00 09 * * 0 . /root/.bashrc && /usr/bin/check_restic

Anche in questo caso verrà inviata una notifica in ogni caso: OK e KO.

Il mio script notify_by_slack analizza il 4° parametro (OK o KO) e colora il messaggio di conseguenza. Tutto questo per avere a colpo d’occhio le informazioni importanti.

Fortinet bug

Questi sono semplici passi che non vogliono essere esaustivi sul tema del backup che resta molto delicato e articolato. Spero di avervi fornito qualche idea e avervi messo qualche pulce nell’orecchio.


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: