Per coloro i quali hanno, anche in ambiente Linux, un notebook o netbook da sincronizzare con il desktop, si sente la necessità di avere degli strumenti per poter portare i dati aggiornati da un computer all’altro. In questo articolo vedremo due semplici programmi che assolvono bene questo compito, vedremo come funzionano ed al termine faremo un semplice esempio pratico del loro utilizzo.
rdist è un semplice strumento che permette di creare in maniera quasi automatica un mirror dei propri dati, mantenere copie identiche di file su diversi host, creare directory, lasciare invariati i permessi dei file e consentire perfino di aggiornare i programmi in esecuzione. rdist legge i comandi da un file che si chiama nell’ordine: distfile o Distfile, oppure dal file segnalato dall’opzione -f. Anche i file da aggiornare saranno presi dal distfile, altrimenti occorre inserirli nella linea di comando. Vediamo un semplice esempio di distfile:
HOST=(myhost@mydominio.it) FILES = (~/) EVITA=(~/.firefox ~/bozze) ${FILES} -> ${HOST} install -o remove,chknfs,younger; except ${EVITA}; special /usr/bin/vi "hello.c"
Il comando install copia o cancella file o directory contenute in FILES sul computer HOST. L’opzione -o abilita la lista delle opzioni separate da virgole e sono:
- remove – rimuove possibili file esistenti nella macchina di destinazione solo se non esistono nella macchina sorgente, utile per il backup dei dati.
- chknfs – non segue i link NFS e quindi non aggiorna i file che risiedono su tale filesystem.
- younger -se ci fossero dei file più recenti sulla destinazione non verrebbero aggiornati.
- except – consente di escludere determinati file.
- special – consente di eseguire un comando della shell dopo l’aggiornamento sulla macchina destinazione.
Se l’host sorgente e remoto sono diversi rdist richiamerà ssh e farà la copia. Per maggiori informazioni su questo programma vi invito a leggere la documentazione a corredo con lo stesso.
rsync è un programma simile a rdist, ma risulta più completo sia dal punto di vista della sicurezza che dal punto di vista delle opzioni disponibili. Le alte prestazioni ottenute con questo strumento sono dovute all’algoritmo di rsync che si limita a trasferire sul link solo le differenze tra due insiemi di file in forma compressa.
- Viene divisa la copia destinazione di ogni file in una serie di blocchi di una certa dimensione.
- Per ogni blocco viene calcolato un checksum debole a 32 bit ed uno forte a 128 bit.
- Vengono inviati i checksum alla macchina sorgente.
- La macchina sorgente cerca dei blocchi delle stesse dimensioni in cui i due checksum coincidono con quelli calcolati nella macchina destinazione.
- La macchina sorgente invia le istruzioni per la ricostruzione dei file di destinazione.
Questo strumento è quindi molto performante e molte distribuzioni lo utilizzano per tenere aggiornati i propri pacchetti. Per far funzionare rsync si ha bisogno di due macchine, una sorgente ed una destinazione. Il programma mette a disposizione molte opzioni, vediamone alcune partendo da un esempio pratico:
rsync -aRnvz –existing -e ssh –timeout=5 –progress –include pippo.dat –exclude *.dat /home/giampy/sorgente /home/matteo/destinazione
- -a equivale a -rlptgoD
- -r copia ricorsivamente le directory
- -l ricrea i link simbolici sul sistema di destinazione
- -p copia i permessi dei file sorgente sulla destinazione
- -t trasferisce anche l’ora di modifica di un file
- -g copia il gruppo
- -o copia il proprietario
- -D trasferisce dispositivi a caratteri ed a blocchi
- -R usa i path relativi
- -n compie le operazioni senza eseguirle
- -v output più dettagliato sulle operazioni in corso
- -z comprime i dati da trasferire
- –existing si limita ad aggiornare i file che già esistono sulla destinazione
- -e specifica l’uso di un programma di shell remoto diverso da rsh, utilizzato di default
- –timeout dopo tale periodo per il trasferimento dati, il programma termina
- –progress mostra lo stato di avanzamento della sincronizzazione
- –include permette di scegliere i file da includere nella sincronizzazione
- –exclude permette di scegliere i file da escludere dalla sincronizzazione
Le opzioni di questo programma sono davvero tante e per maggiori dettagli vi invito a leggere la documentazione. Da ricordare che per ogni file sorgente il programma controlla tutte le opzioni di inclusione ed esclusione in ordine di inserimento, quindi nel nostro esempio vengono esclusi tutti i file con estensione .dat tranne pippo.dat, che sarebbe rimasto fuori se l’inclusione seguiva l’esclusione.
In questo articolo ho voluto parlare di due strumenti molto utilizzati, chi utilizza Gentoo ed aggiorna il repository sicuramente troverà questa guida inutile, ma per altri che non conoscono le potenzialità di questi due strumenti è un ottimo inizio per scoprire l’uso di rdist ed rsync.