Rsync

      Commenti disabilitati su Rsync
300*250

Sincornizzare file in locale e su dispositivi remoti
Lavorare con i file significa anche doverli spostare o copiare. Spostare dei file all’interno di uno stesso filesystem non è un problema: serve poco tempo perché in genere i dati non vengono davvero spostati, viene soltanto modificato il percorso nella tabella di allocazione o nella struttura di inode (a seconda del filesystem usato). Ma se si vogliono copiare dei dati da un filesystem a un altro può passare una certa quantità di tempo. E lavorando dal terminale può essere scomodo usare il classico comando cp, perché offre poche informazioni e poco controllo sulle operazioni di copia. Per fortuna esiste rsync, un programma per la sincronizzazione dei file che consente di eseguire copie specificando una serie di opzioni utili per ogni situazione in cui ci si trovi.

Il comando rsync è innanzitutto comodo per copiare file in locale, sul proprio computer. Il problema del classico comando cp di GNU/Linux è che non mostra l’avanzamento, per cui è difficile capire se la copia è in corso o bloccata e quanto tempo manchi al completamento. Usando invece il comando rsync -avr –progress /sorgente/ /destinazione è possibile copiare file e cartelle visualizzando l’avanzamento in tempo reale.

Siccome per GNU/Linux tutto è un file, copiare file da e verso dispositivi remoti si fa nello stesso modo: se abbiamo montato una cartella di rete al percorso /mnt/net, potremo eseguire la copia di un file semplicemente scrivendo rsync -avr –progress file.mp4 /mnt/net/fileremoto.mp4. Esistono vari metodi per montare la memoria di un dispositivo come un NAS sul proprio computer: usando SSHFS basta dare il comando sshfs utente@indirizzodelNAS:/ /mnt/net.

Ovviamente si può anche usare il proprio server FTP, montandolo con il comando:
curlftpfs -o allow_other utente:password@indirizzodelserverFTP /mnt/ftp
Se, invece, si vuole eseguire la copia tramite SSH senza dover specificare la propria password ogni volta si può creare una copia di chiavi (pubblica e privata) con il comando
ssh-keygen -t rsa
senza specificare una password, quando viene richiesto. Poi si può copiare la chiave pubblica sul proprio server:
ssh-copy-id -i ~/.ssh/id_rsa.pub utente@indirizzodelNAS
il quale d’ora in poi riconoscerà il computer senza bisogno di specificare ogni volta la password. Si può poi eseguire la copia con il comando
rsync -avr –progress -e ssh /sorgente/ utente@indirizzodelNAS:/backup/
comodo per automatizzare le copie, come i backup.

Si può ad esempio realizzare un semplice script bash che esegue il backup dei file:

#!/bin/bash
if pgrep “rsync” > /dev/null
then
echo “There is already rsync running”
exit 0
fi
dest=’/mnt/net/backup/’
if [ -d $dest ]; then
rsync -avr –progress –delete –no-perms –omit-dir-times –exclude=.cache/chromium –exclude=.thumbnails –exclude=.local/share/baloo –exclude=.xsession-errors –exclude=.cache/thumbnails –exclude=Downloads/ktorrent /home/luca/ $dest/home/luca/
fi

L’opzione delete si occupa di cancellare i file presenti nella destinazione che però non sono più presenti nell’origine (così si ottiene una copia perfetta). In genere, ha anche senso non mantenere i permessi o gli orari di modifica delle cartelle: sono operazioni che rallentano il backup e spesso non sono necessarie. Usando l’opzione exclude si possono anche escludere delle cartelle dalla sincronizzazione, e questa opzione può essere usata più volte.
Dando poi il comando crontab -e ed inserendo nel file la riga
0 4 * * * /usr/local/rsync_script
lo script viene eseguito automaticamente ogni giorno alle 4 di mattina, così si avrà un backup automatico sempre aggiornato alle ultime 24 ore.

Rsync ha anche una serie di altre opzioni utili in diverse situazioni:
–dry-run esegue solo una simulazione della sincronizzazione, così non si rischiano di cancellare file sul server;
–stop-at=y-m-dTh:m ferma la copia ad una certo orario, utile per avviare la copia di notte ma evitare che continui pure nella mattinata;
–bwlimit=100 imposta un limite in KB per la banda utilizzata;
–min-size=1 indica la dimensione minima di un file per essere copiato (utile per non copiare file vuoti)
–max-size=100K indica la dimensione massima di un file da copiare (utile per non copiare file troppo grandi).
Le ultime due opzioni si possono sfruttare anche per dividere la copia in due turni. Per esempio, si può eseguire una copia impostando max-size a 20M e poi ripeterla impostando min-size a 20M. Così nella prima operazione di copia vengono presi solo i file piccoli, mentre nella seconda solo i file grandi.