Usare Rsync per convertire il charset dei files

Rsync (versioni recenti) supporta il magico comando --iconv per convertire il charset dei files da un formato ad un altro. Questa funzione` e` molto utile quando si copiano dati da una macchina vecchia a una nuova che ragiona in utf-8, o anche da un mac in utf-8 a un Linux in utf-8, perche` ovviamente il mac ha un formato utf-8 che non e` standard.

Se non e` chiaro quale sia il charset di partenza, occorrera` fare delle prove fino a scoprirlo. Ricordatevi che ogni prova che fate creera` dei files che poi andranno ad accumularsi e fare quasi sicuramente casino. Fate le prove in un ambiente pulito che poi cancellate e riprovate fino a che non ci siete riusciti.

La sintassi del comando --iconv e` nel manuale di rsync, e vi consiglio di verificare se non e` cambiata fra una versione e l'altra. Attualmente prende due parametri: charset di partenza e charset di arrivo, in questo ordine. Dunque, per convertire da cp850 a utf-8, diremo --iconv=cp850,utf8.

Posso applicare il comando --iconv a una copia di files oppure anche fare una cosa abbastanza ardita, cioe` modificare i files in loco e cancellare i vecchi (TERRORE!).

Per questa ultima opzione suicida, facciamo un esempio. Alterare il charset dei files (e delle directory) dalla directory corrente in giu`, da cp850 a utf-8, cancellando i files con il vecchio nome dopo averli convertiti. Prima lo facciamo in modo prova, senza cioe` eseguire davvero il comando:

rsync  --iconv=cp850,utf8 -anv  --stats --times --progress --delete-after  . .

Notare i due "punto" in fondo alla command line, che vogliono dire "dalla directory corrente alla directory corrente". Il parametro "n" significa "non fare niente, fai solo finta".

Se lo volete fare davvero, togliete "n" dalla command line (-anv diventa -av). Nel farvi notare che se lo eseguite (per davvero, non in test) due volte di fila, farete un casino allucinante perche` ri-convertirete in modo errato i files gia` convertiti, vi auguro buon danno.

Usare Rsync per fare backup remoti via ssh

Questo documento descrive come usare rsync (attraverso ssh) per fare i backup remoti di una directory da una macchina ad un'altra. E` consigliata comunque una lettura dei manuali di Rsync perche` ha un milione di opzioni alcune delle quali potenzialmente pericolose.

Il sistema qui descritto esegue di fatto un mirror della directory, quindi ha alcuni limiti da prendere bene in considerazione:

Principio di funzionamento

Si installa rsync su tutte e due le macchine, e da una delle due lo si lancia facendo in modo che esso stesso lanci, attraverso ssh, la sua "controparte" sull'altra macchina. Alla fine della sincronizzazione rsync termina su tutte due le macchine, e non resta in ascolto in alcun modo. Per usare questo sistema occorre ovviamente avere un account (dedicato, oppure il tuo utente, oppure root se devi sincronizzare roba che puo` essere letta solo da root) sulla macchina remota. Non e` necessario che l'account usato localmente sia lo stesso usato in remoto. Se si vuole usare questo sistema da cron, occorre per forza usare l'autenticazione a chiavi asimmetriche in ssh, per non dover usare delle password. Se lo si usa a mano, si puo` anche usare una normale autenticazione a password.

Creazione chiavi asimmetriche

Questa parte e` necessaria solo se si vuole lanciare rsync in modo automatico senza dover dare una password per la connessione.

Parametri di rsync

Qui di seguito il lancio di rsync usando chiavi asimmetriche per autenticare, per fare un backup da una macchina remota (10.1.1.1) usando l'utente remoto rsync (creato all'uopo, ma va bene qualsiasi utente) dal path remoto "/home/" al path locale "/backup/home". La sintassi dei path di partenza e destinazione e` praticamente identica a quella di scp. Non e` affatto necessario che la copia vada dalla macchina remota a quella locale, puo` anche andare al contrario. E` consigliabile leggere comuque il manuale, specie relativamente all'opzione "--delete". Per testare le cose senza fare danni, si puo` usare il parametro "n" e togliere il parametro "q".

# q = quiet, z=comprimi
# il file chiave_dsa_rsync contiene la chiave privata 
# exclude funziona come in tar
# gli ultimi due parametri sono username@host:path sorgente e path destinazione. 
rsync -qaz --stats --delete -e "ssh -i chiave_dsa_rsync" --exclude ".ssh" --exclude ".bash_history" --exclude ".viminfo"   rsync@10.1.1.1:/home/ /backup/home/

Operazioni manuali semplici

Supponendo di voler lanciare qualcosa a mano una tantum, senza uso delle chiavi ma con le semplici password, ecco alcuni esempi utili.

Usare Rsync per fare backup locali

Semplice copia con rsync fra due dischi locali, con cancellazione dalla destinazione dei files che non ci sono nella sorgente:

rsync -a --del --stats /source /destination
rsync -a --del --stats /home  /mnt