Introduzione
Rsync sta per "sincronizzazione remota", è uno strumento di sincronizzazione di file e cartelle in locale e remoto.
Utilizza un algoritmo che riduce al minimo la quantità di dati copiati spostando solo le parti dei file che sono stati modificati.
In questa guida, tratteremo l'utilizzo di base di questa potente utility.
Verrà utilizzato un VPS con Ubuntu 18.04 LTS negli esempi, ma è possibile utilizzare qualsiasi distribuzione Linux moderna.
Rsync è uno strumento di sincronizzazione abilitato alla rete molto flessibile.
A causa della sua ubiquità su sistemi Linux e Unix e della sua popolarità come strumento per script di sistema, è incluso nella maggior parte delle distribuzioni Linux per impostazione predefinita.
Se il vostro intento è utilizzare il Rsync su di un server in remoto continuate a leggere, altrimenti saltate il primo paragrafo "Connessione al Server" e leggere il successivo.
Connessione al Server
Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno della password per l'autenticazione.
Per connettersi al server come utente root digitare questo comando:
ssh root@IP_DEL_SERVER
Successivamente vi verrà chiesto di inserire la password dell'utente root.
Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare il primo parametro:
ssh VOSTRO_UTENTE@IP_DEL_SERVER
Successivamente vi verrà chiesto di inserire la password del vostro utente.
Siete ora connessi al vostro server.
Come usare Rsync
La sintassi di base di rsync è molto semplice e funziona in modo simile a ssh, scp e cp. Creeremo due directory di test e alcuni file di test con i seguenti comandi,
Spostiamoci nella home:
cd ~
Creare una cartella chiamata dir1:
mkdir dir1
Creare un altra cartella chiamata dir2:
mkdir dir2
Creare 100 file nella cartella dir1;
touch dir1/file{1..100}
Per visualizzare tutti i file creati:
ls dir1
Per sincronizzare il contenuto di dir1 in dir2 sullo stesso sistema, digitare:
rsync -r dir1/ dir2
L'opzione -r significa ricorsiva, che è necessaria per la sincronizzazione delle directory.
Potremmo anche usare il flag -a, invece:
rsync -a dir1/ dir2
L'opzione -a è un flag che rappresenta "archivio" e si sincronizza in modo ricorsivo e conserva collegamenti simbolici, file speciali e del dispositivo, tempi di modifica, gruppo, proprietario e autorizzazioni. È più comunemente usato di -r.
Potresti aver notato che c'è una barra finale (/) alla fine del primo argomento nei comandi precedenti: rsync -a dir1**/** dir2 Questo è necessario per significare "il contenuto di dir1".
L'alternativa, senza la barra finale, posizionerebbe dir1, inclusa la directory, all'interno di dir2.
Controlla sempre i flag prima di eseguire un comando rsync. Rsync fornisce un metodo per effettuare dei test passando le opzioni -n o --dry-run. Anche il flag -v (per verbose) è utile per visualizzare l'output del comando.
Come utilizzare Rsync per la sincronizzazione con un sistema remoto
La sincronizzazione con un sistema remoto è semplice se si dispone dell'accesso SSH alla macchina remota e rsync installato su entrambi i server.
Per trasferire un file o cartella da computer locale a server remoto, utilizzare la seguente sintassi:
rsync -avzh /path/computer/locale/esempio.txt nome_utente@indirizzo_remoto:/path/server/remoto/
Questa operazione si chiama operazione "push" perché spinge una directory dal sistema locale a un sistema remoto.
L'operazione opposta è "pull". Viene utilizzato per sincronizzare una directory remota con il sistema locale:
rsync -avzh nome_utente@indirizzo_remoto:/path/server/remoto/ /path/computer/locale
Se il server remoto utilizza una porta per l'ssh non standard, aggiungere il seguente parametro: ssh -p PORTA e il flag -e. Quindi per effettuare un backup da un server remoto a quello locale, con una porta non standard:
rsync -avzhe "ssh -p PORTA" nome_utente@indirizzo_remoto:/path/server/remoto/ /path/computer/locale
(NON consigliato per motivi di sicurezza)
Per inserire la password per l'accesso ssh sullo stesso comando, senza doverla scrivere successivamente, installare il seguente software:
sudo apt-get install sshpass
Quindi:
sshpass -p "PASSWORD" rsync -avzhe "ssh -p PORTA" nome_utente@indirizzo_remoto:/path/server/remoto/ /path/computer/locale
Opzioni utili per Rsync
Rsync offre molte opzioni per modificare il comportamento predefinito dell'utility.
Se si trasferiscono file che non sono già stati compressi, come i file di testo, è possibile aggiungere la compressione con l'opzione -z:
rsync -az sorgente destinazione
Il flag -P è molto utile. Combina i flag --progress e --partial. Il primo di questi fornisce una barra di avanzamento per i trasferimenti e la seconda consente di riprendere i trasferimenti interrotti:
rsync -azP sorgente destinazione
Possiamo aggiornare l'ora di modifica su alcuni file e vedere che rsync ricopia in modo intelligente solo i file modificati:
rsync -azP sorgente destinazione
Per mantenere veramente sincronizzate due directory, è necessario eliminare i file dalla directory di destinazione se vengono rimossi dalla sorgente. Per impostazione predefinita, rsync non cancella nulla dalla directory di destinazione. Possiamo modificare questo comportamento con l'opzione --delete. Prima di utilizzare questa opzione, utilizzare l'opzione --dry-run e fare il test per prevenire la perdita di dati:
rsync -a --delete sorgente destinazione
Se si desidera escludere determinati file o directory situati all'interno di una directory che si sta sincronizzando, è possibile farlo specificandoli in un elenco separato da virgole seguendo l'opzione --exclude=:
rsync -a --exclude=file_da_escludere sorgente destinazione
Se abbiamo specificato un pattern da escludere, possiamo sovrascrivere quell'esclusione per i file che corrispondono a un pattern differente usando l'opzione --include=.
rsync -a --exclude=file_da_escludere --include=file_da_includere sorgente destinazione
Infine, l'opzione --backup di rsync può essere utilizzata per archiviare backup di file importanti. Viene utilizzato insieme all'opzione --backup-dir, che specifica la directory in cui devono essere archiviati i file di backup.
rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destinazione
Alcuni flag utili:
- -a è per l'archivio, che conserva proprietà, permessi, ecc.
- -e è necessario quando si specifica un protocollo da utilizzare, per esempio ssh.
- -v è per verbose, quindi posso vedere cosa sta succedendo. (opzionale)
- -h è leggibile dall'uomo, quindi la velocità di trasferimento e le dimensioni dei file sono più facili da leggere. (opzionale)
- -W è per copiare solo file interi, senza algoritmo delta-xfer che dovrebbe ridurre il carico della CPU.
- --progress in modo da poter vedere lo stato di avanzamento di file di grandi dimensioni. (opzionale)
Conclusione
Rsync può semplificare il trasferimento di file tramite connessioni di rete e aggiungere robustezza alla sincronizzazione delle directory locali. La flessibilità di rsync lo rende una buona opzione per molte diverse operazioni a livello di file. Una padronanza di rsync consente di progettare operazioni di backup complesse e ottenere un controllo preciso su ciò che viene trasferito e in che modo.
In questo tutorial abbiamo visto come utilizzare Rsync.