Mi è sempre piaciuta l’idea di avere copie “intelligenti”, ossia
- una copia al giorno per una settimana
- una copia alla settimana per un mese
- una copia al mese per un anno
- una copia all’anno per la parte vecchia.
E mi son sempre arrovellato su come implementarlo nel mio umile scriptino bash con cui facevo alcune copie di sicurezza. 1(che poi nemmeno era uno scriptino, ma addirittura una riga di cron! mount $QNAP; if cd $QNAP/Calcestruzzo/;then mv qualita.tar.bz2 qualita.old.tar.bz2; tar -acf qualita.tar.bz2 $QUALITA/*; else echo Errore;fi
)
E la pigrizia vinceva e mi tenevo solo gli ultimi due. Poi, complice una quasi perdita di dati 2(una pirlata da pivello totale da cui mi son salvato solo perché prima della serrata ho fatto su un disco esterno delle copie manuali del tutto) durante la serrata per l’emergenza sanitaria mi sono accorto che esistono arnesi (strumenti, o “tool”) come rdiff-backup che offrono contemporaneamente una copia intera dell’ultima versione dei dati e retrodifferenze che permettono di ricostruire la storia dei backup.
E non so più cosa usare, tipo asino di buridano. Perché l’idea di rdiff-backup è davvero valida, ma non ti permette di mantere uno storico “selettivo” come piacerebbe a me. Tanto più che c’è un modo facilissimo per ottenere quelle copie intelligenti (vedi How to keep: daily backups for a week, weekly for a month, monthly for a year, and yearly after that ): basta tenere separata in una cartella diversa ogni categoria (quotidiana, settimanale, mensile, annuale). Così:
- Every day:
- make a backup, put into
daily
directory - remove everything but the last 7
daily
backups
- make a backup, put into
- Every week:
- make a backup, put into
weekly
directory - remove everything but the last 5
weekly
backups
- make a backup, put into
- Every month:
- make a backup, put into
monthly
directory - remove everything but the last 12
monthly
backups
- make a backup, put into
- Every year:
- make a backup, put into
yearly
directory
- make a backup, put into
Cavolo, è l’uovo di Colombo! Roba che si implementa con un cronjob da 4 righe ed uno script bash che si fa prima a leggerlo che a spiegarlo!
@daily /home/paolo/bin/copie-qualita.sh quotidiane
@weekly /home/paolo/bin/copie-qualita.sh settimanali
@monthly /home/paolo/bin/copie-qualita.sh mensili
@yearly /home/paolo/bin/copie-qualita.sh annuali
#!/bin/bash
QUALITA=/home/qualita
QNAP=/mnt/qnap/Public
QUOTIDIANE=$QNAP/Calcestruzzo/qualita/quotidiane
SETTIMANALI=$QNAP/Calcestruzzo/qualita/settimanali
MENSILI=$QNAP/Calcestruzzo/qualita/mensili
ANNUALI=$QNAP/Calcestruzzo/qualita/annuali
case $FREQUENZA in
quotidiane)
DESTINAZIONE=$QUOTIDIANE/qualita-$( date +%F ).tar.bz2
DELENDA=$QUOTIDIANE
MANTENENDA=7
;;
settimanali)
DESTINAZIONE=$SETTIMANALI/qualita-$(date +%F).tar.bz2
DELENDA=$SETTIMANALI
MANTENENDA=4
;;
mensili)
DESTINAZIONE=$MENSILI/qualita-$(date +%F).tar.bz2
DELENDA=$MENSILI
MANTENENDA=12
;;
annuali)
DESTINAZIONE=$ANNUALI/qualita-$(date +%F).tar.bz2
;;
*)
echo "Usage: $0 (quotidiane|settimanali|mensili|annuali)"
exit 5
esac
echo Copie $FREQUENZA da $QUALITA a $DESTINAZIONE
mount $QNAP &&
tar --auto-compress --create --file $DESTINAZIONE $QUALITA/* &&
if [[ $FREQUENZA != "annuali" ]]
then
echo In $DELENDA conservo gli ultimi $MANTENENDA file
rm --verbose --force $( ls $DELENDA | head --lines=-$MANTENENDA )
fi
Poi Va bene, va bene, i percorsi sono codificati nello script e non in un file di configurazione. Ma accipuffa, in prima battuta l’avevo scritta in una riga!
mount $QNAP && tar --auto-compress --create --file $DESTINAZIONE $QUALITA/* && rm --verbose --force $( ls $DELENDA | head --lines=-$MANTENENDA )
Credo che per un po’ lo affiancherò a rdiff-backup