mywiki/linux/rsync.md

5.9 KiB

Rsync

Rsync può essere utilizzato per il mirroring dei dati (in locale o remoto), i backup incrementali, la copia di file tra i sistemi e come un sostituto per i comandi scp, sftpe cp.

Installare Rsync

Rsync è preinstallato nelle maggiori distribuzioni GNU/Linux, ma si può sempre verificare che sia presente nel sistema col seguente comando:

rsync --version

Se non fosse installato, si può installare facilmente usando il gestore pacchetti della distribuzione.

Per esempio su Debian e derivati:

sudo apt install rsync

Sintassi

Local to Local: rsync [OPTION]... [SRC]... DEST

Local to Remote: rsync [OPTION]... [SRC]... HOST:DEST

Remote to Local: rsync [OPTION]... HOST:SRC... [DEST]

dove:

SRC - Directory sorgente o di origine;

DEST - Directory di destinazione;

HOST - Hostname remoto o indirizzo IP.

Rsync fornisce una serie di opzioni che controllano ogni aspetto del suo comportamento. Le opzioni più utilizzate sono:

-n, avvia come simulazione, ovvero mostra solo quello che farebbe senza modificare realmente alcunché. Quest'opzione è FONDAMENTALE, in quanto permette di identificare eventuali comportamenti e/o risultati anomali e quindi di correggere il comando. Si ricordi che un errore nella definizione del comando può comportare la perdita dei dati nella cartella di destinazione o anche in quella sorgente se per esempio si invertono accidentalmente le due. Chiaramente una volta verificato il risultato della sincronizzazione quest'opzione andrà eliminata in modo da far effettivamente sincronizzare le directory;

-r, sincronizza anche le sottodirectory e tutti i relativi file;

-t, aggiorna anche la data di "Ultima modifica" dei file copiati nella cartella di destinazione;

-p, imposta per i file nella cartella di destinazione lo stesso schema di permessi di quelli sorgenti;

-o, imposta per i file nella cartella di destinazione lo stesso proprietario di quelli sorgenti, ove possibile;

-g, imposta per i file nella cartella di destinazione lo stesso gruppo di quelli sorgenti, ove possibile;

-a, (modalità archivio) è equivalente a impostare tutte le opzioni precedenti (-rtpog), e inoltre mantiene link simbolici, file speciali e (solo se eseguito come root) file dispositivo. Si possono invece trasformare tutti i link simbolici nei file a cui puntano con l'opzione i -L;

-v, aumenta il numero di informazioni stampate a video (verbose);

-P o --progress, mostra un indicatore percentuale del progresso delle operazioni. Implica l'opzione -v, pertanto se si specifica --progress è ridondante specificare anche -v;

--delete, elimina nella directory di destinazione tutti i file che non sono presenti nella directory sorgente;

--exclude-from, specifica il percorso di un file contenente un elenco di file e cartelle da non includere nelle operazioni di sincronizzazione. Maggiori informazioni nell'apposita sezione.

-z, --compress. Questa opzione forzerà Rsync a comprimere i dati;

Utilizzo di base di Rsync

Per copiare un singolo file localmente è necessario eseguire il comando seguente:

rsync -az /opt/filename.zip /tmp/newfilename.zip

Se la directory di destinazione non esiste verrà creata.

Vale la pena ricordare che, aggiungendo / alla directory di origine, verrà copiato solo il contenuto della directory nella directory di destinazione. Se omessa, Rsync copierà la directory di origine all'interno della directory di destinazione.

Utilizzare Rsync per sincronizzare i dati da e verso una macchina remota

Quando si utilizza Rsync per il trasferimento remoto, deve essere installato sia sul computer di origine che su quello di destinazione. Le nuove versioni di Rsync sono configurate per utilizzare SSH come shell remota predefinita.

Nel seguente esempio, vine trasferita una directory da un computer locale a un computer remoto:

rsync -a /opt/media/ host_or_ip:/opt/media/

Se non è impostato un accesso SSH senza password al computer remoto, verrà chiesto di inserire la password dell'utente.

Se si desidera trasferire i dati da un server remoto a un computer locale, è necessario utilizzare la posizione remota come sorgente:

Se SSH sull'host remoto è in ascolto su una porta diversa dalla 22, è possibile specificare la porta utilizzando l'opzione -e:

rsync -a -e "ssh -p 2322" /opt/media/ host_or_ip:/opt/media/

Quando si trasferiscono grandi quantità di dati, si consiglia di eseguire il comando Rsync all'interno di screen o di utilizzare l'opzione -P.

Escludere file e directory

Esistono due opzioni per escludere file e directory. La prima opzione è utilizzare l'argomento --exclude e specificare i file e le directory.

Nel seguente esempio, vengono escluse le directory node_modules e tmp che si trovano all'interno di src_directory:

rsync -a --exclude=node_modules --exclude=tmp /src_directory/ /dst_directory/

La seconda opzione è usare l'argomento --exclude-from e specificare i file e le directory che si desidera escludere in un file.

nano exclude-file.txt

node_modules
tmp

Quindi:

rsync -a --exclude-from='/exclude-file.txt' /src_directory/ /dst_directory/

Backup locale

Ecco un esempio di come utilizzare Rsync per un backup locale:

rsync -aPz --delete --exclude-from='~/exlude.txt' ~/.config ~/bk_config

Collegamenti