sabato 1 marzo 2014

Sysadmin Panics: script di backup (ma non di recovery!)

Ogni tanto inciampo ancora in qualche script ben fatto per il backup automatico dei sistemi *nix, e spesso mi torna alla mente quanti script orrendi ho dovuto correggere a tal proposito in passato.
Due erano gli errori piu' ricorrenti che mi causavano diversi grattacapi:
1) test sbagliati o fallimentari sull'esistenza di backup precedenti;
2) mount errato o multiplo di locazioni di backup remote.

Per quanto riguarda il primo, test sbagliati sull'esistenza di backup precedenti, l'errore era spesso tanto semplice quanto subdolo: lo script presentava uno "slurping" test che non eseguiva il backup in caso di assenza di una copia precedente. In altre parole qualcosa del tipo:

if [ -f backup.zip ]
then
  mv backup.zip old_backup.zip
  # fai nuovo backup
fi

Ora in cosa e' fallimentare questo test? Se viene rimosso l'entry che segnala la presenza di un backup l'intero script non esegue. Ok, ma perche' dovrebbe essere rimosso da storage il backup precedente? Perche' ad esempio si e' aggiunto un disco nuovo (vuoto) o perche', in una fase di panico, si e' cancellato tutto il backup pregresso per fare un punto zero. E lo script di cui sopra puo' fallire silenziosamente facendo trovare il sysadmin di turno in una situazione in cui il backup di fatto non c'e'!
La soluzione e' ovvia e semplice:

if [ -f backup.zip ]
then
  mv backup.zip old_backup.zip
fi

# fai nuovo backup

Il secondo tipo di problema e' un po' piu' complesso: se il backup deve essere fatto su uno storage esterno e' bene che questo sia montato e smontato quando serve, per evitare contaminazioni dei dati. Il problema e' che spesso questo storage esterno viene condiviso via SMB o NFS, e il primo in particolare consente lo stacking mount ricorsivo, causando qualche problema nello smontaggio. La soluzione anche qui e' semplice ma un po' laboriosa: occorre montare e smontare i volumi testando il valore di ritorno delle chiamate di sistema. Altrimenti si rischia di non smontare un volume o, peggio, di fare il backup su una directory invece che su una share (e magari riempendo tutto il filesystem)!

E in generale l'insegnamento spesso dimenticato e' che non si puo' dire che una procedura di backup funzioni fino a quando non si e' fatto almeno un recovery positivamente.

Nessun commento: