Di recente ho dovuto trovare un modo per effettuare il mio solito backup attraverso Linux.

Fin’ora ho sempre usato questo comodo programma per Windows, ma la mia conversione a Linux ha reso il backup settimanale un’impresa lunga e noiosa. Ho così deciso di trovare una soluzione per Linux che facesse lo stesso lavoro (se non meglio :P).

L’idea è stata quella di fare un backup incrementale di una cartella locale su una cartella remota preservando gli attributi, la data di creazione e la data di modifica di ogni file e preservando la struttura ad albero della cartella. La risposta è stata rsync, un potentissimo programma disponibile tra i pacchetti di qualunque distribuzione che consente di sincronizzare due posizioni del filesystem locale oppure una cartella del sistema e una presente in un altro computer attraverso una connessione ssh.

Partendo da degli script bash trovati nel wiki di Arch ho realizzato un breve codice (non più disponibile) che consente di effettuare un backup di una cartella. Lo script include anche un automatismo che monta un’eventuale periferica esterna (o anche una cartella Samba) e la smonta a processo completato oppure alla ricezione di un segnale di interruzione (ad esempio CTRL+C).

Il codice è molto semplice ed intuitivo, vale la pena di soffermarsi solo sull’assegnazione delle variabili d’ambiente. Ad esempio la variabile MOUNT_OPT contiene l’insieme di tutti i parametri che devono essere passati a mount per poter montare una cartella prima di iniziare la sincronizzazione (se non c’è bisogno di montare niente allora la variabile MOUNT dovrebbe essere impostata a false). La variabile UMOUNT_OPT, invece contiene solo il percorso del filesystem da smontare. Quindi per esempio le due variabili saranno definite come segue:

MOUNT_OPT="-t ntfs-3g /dev/sdb1 /media/backup"
UMOUNT_OPT="/dev/sdb1"

Continuando la lista, SRC definisce la cartella di cui si vuole effettuare il backup, mentre DEST è la cartella di destinazione. Per entrambe è preferibile usare un percorso assoluto.

Le variabili PART e BACK possono anche essere lasciate come sono. La prima viene creata durante il sync e cancellata subito dopo, mentre la seconda definisce dove salvare i file che vengono cancellati. Infine OPTS è la variabile contenente tutte le opzioni che vanno in pasto a rsync; leggete il man page dell’eseguibile per avere un’idea di cosa fanno.

Al termine del sync la cartella sorgente sarà rimasta invariata, mentre nella cartella di destinazione sarà presente una sottocartella latest che conterrà il backup vero e proprio, un file rsync.log che registrerà la data e l’ora d’inizio e fine di ogni sincronizzazione, e, se verranno effettuate delle cancellazioni, un’ulteriore sottocartella rsync_backups che conterrà il backup dei file cancellati. Essi verranno messi in delle cartelle nominate come il giorno della settimana corrente (lunedì, martedì, …). Se la cartella del giorno esiste già allora lo script la elimina. Per questo è comodo impostare l’esecuzione dello script giornalmente in chron, in modo che si hanno le copie dei file eliminati di tutta la settimana precedente.

Lo script l’ho testato personalmente sincronizzando oltre 500Gb di dati da un hard disk esterno ad una cartella samba montata e smontata dal codice.