venerdì 28 maggio 2010

Backup dei file con rsync

Rsync è una utility molto efficace di backup sviluppata per gli ambienti Unix/Linux. Questo è il link per il download dei sorgenti:
http://rsync.samba.org/
è comunque possibile installarla nella maggior parte delle distribuzioni linux con l'uso del gestore dei pacchetti.
Il problema che mi sono posto è stato quello di creare sul mio hard disk esterno una copia di sicurezza dei dati presenti nella mia partizione "home". Dopo aver visto diversi software specializzati per la creazione di copie di backup mi sono imbattuto in rsync il quale soddisfa tutte le mie richieste. Il mio obiettivo è quello di creare una copia esatta dei miei file su un disco esterno, con la possibilità di aggiornare rapidamente le modifiche come la cancellazione o l'aggiunta di nuovi file. Inoltre voglio che sia possibile specificare dei file o directory da non includere nel backup (ad esempio non voglio copiare la directory video visto che occupa molto spazio e non contiene file di estrema importanza). Rsync è in grado di fare tutto questo e molto altro!
Anche se esistono diverse GUI per questo tool ho preferito usare la linea di comando vista la semplicità della sua sintassi.
La directory di cui intendo fare il backup si trova nel seguente path:
/home/roberto/
mentre il path relativo al disco esterno è il seguente:
/media/roberto_losanno/Backup_notebook/
il comando utilizzato è il seguente:
rsync -azv --delete --exclude='/video' /home/roberto/ /media/roberto_losanno/Backup_notebook/
Alla prima esecuzione del comando sarà avviata la copia di tutti i file sul disco esterno (Full backup). Le esecuzioni successive del comando si limiteranno soltanto ad apportare le modifiche che sono state fatte sulla partizione d'origine /home/roberto/ (Incremental backup). Studiamo la parte di sintassi che credo sia meno chiara:
  • -azv l'opzione 'a' serve per la copia ricorsiva delle sottocartelle; l'opzione 'z' effettua una compressione dei file; l'opzione 'v' imposta il funzionamento su verbose che stampa a video le operazioni effettuate.
  • --delete cancella dal percorso destinazione (disco esterno) i file che sono stati cancellati dal disco fisso del pc (cioè dalla directory origine /home/roberto/). Questa opzione interviene nel caso di "incremental backup" e non nel primo backup (full backup) visto che la directory destinazione è vuota.
  • --exclude='/video' esclude dal backup la directory "video". Da notare lo slash prima della parola "video", che indica ad rsync di escludere la directory "video" che si trova nel percorso radice della directory origine (/home/roberto/). Nel caso in cui si omettesse lo slash (--exclude='video') allora sarebbero esclusi dal backup tutti i file e le directory di nome "video" presenti nella directory d'origine (/home/roberto/) e nelle sue sottodirectory.
Nel caso in cui il numero di files o directory da escludere è elevato, è possibile salvare in un file i nomi, e utilizzare l'opzione --exclude-from.
Dopo aver creato il file che io ho chiamato "to_exclude", aprirlo ed inserire l'elenco di file e directory da escludere, ad esempio:
/video
/Downloads
/Documents/Temporal
imagecd1.iso
Da notare che la directory "Documents" non sarà esclusa dal backup, verrà invece esclusa la directory "Temporal" contenuta al suo interno.
Verranno inoltre esclusi tutti i file o le directory con il nome "imagecd1.iso" che si trovano nella directory origine o in una sua sottodirectory. Nell'opzione --exclude-from inserire il percorso al file appena creato.
Il comando da eseguire è il seguente:
rsync -azv --delete --exclude-from=/home/roberto/to_exclude /home/roberto/prova/ /media/roberto_losanno/Backup_notebook/
L'ultima opzione da includere è --delete-excluded che ritorna molto utile nei backup successivi al primo, nel caso in cui si modifica l'elenco dei file e delle directory da escludere. In questo caso infatti i nuovi file esclusi, ma già copiati precedentemente nella destinazione di backup, non sarebbero eliminati.
Quindi il comando finale con le opzioni che abbiamo utilizzato è il seguente:
rsync -azv --delete --delete-excluded --exclude-from=/home/roberto/to_exclude /home/roberto/prova/ /media/roberto_losanno/Backup_notebook/
Per approfondire l'uso di questo tool, è possibile utilizzare l'help in linea "man rsync", o collegarsi alla pagina: