Tutorial > Come effettuare un backup periodico dei file con rsync su Ubuntu 18.04

Come effettuare un backup periodico dei file con rsync su Ubuntu 18.04

Pubblicato il: 12 novembre 2019

Backup Storage Ubuntu

Rsync (Remote sync) è uno strumento utilizzato per copiare e sincronizzare file e cartelle sullo stesso server o fra macchine diverse e rappresenta senza dubbio uno dei tool di backup più diffusi nei sistemi Linux.

Ciò che distingue rsync dal classico "copia e incolla" è che questo strumento riconosce automaticamente quali documenti differiscono tra due cartelle, così da velocizzare il processo di copia da una cartella sorgente a una destinazione.

Per prima cosa dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.

Installazione di rsync

I package di rsync sono già presenti nella repository ufficiale di Ubuntu, quindi per installarlo ti basta digitare:

$ sudo apt install rsync

Opzioni di rsync

La sintassi da utilizzare è la seguente:

rsync options /percorso/sorgente /percorso/destinazione/

Le opzioni a disposizione sono:

  • -v: verranno mostrate sulla shell i file e cartelle copiate

  • -r: permette di copiare le cartelle e i relativi contenuti

  • -h: invece di riportare la dimensione dei file copiati in byte, la riporterà nel formato più facile da leggere (invece di 14,167,396 bytes verrà indicato 14.17 Mb)

  • -z: effettua una compressione dei dati trasferiti

  • -a: riporta le informazioni originali del file come il timestamp, permessi, proprietario, etc...

  • -u: durante la copia i file che nella cartella di destinazione risultano più nuovi delle rispettive versioni nella cartella sorgente non verranno sostituiti

  • --delete: rsync cancellerà i file presenti nella cartella di destinazione che non sono presenti nella cartella sorgente

  • --exclude: verranno ignorati determinati file o cartelle durante la copia

  • --progress: mostra la percentuale di avanzamento della copia ed il tempo rimanente

  • --existing: verranno copiati solo i file già esistenti nella cartella di destinazione.

Sincronizzare due cartelle sullo stesso server

La copia da una cartella ad un’altra avviene richiamando il comando “rsync” seguito poi dalla cartella sorgente (dalla quale copiare gli elementi) e la cartella di destinazione (su cui incollarli).
Indipendentemente dal fatto che la cartella da copiare abbia delle cartelle al suo interno è comunque consigliato aggiungere l'opzione “-r”. In questo modo, qualora venissero create successivamente delle nuove cartelle all’interno della cartella sorgente, digitando nuovamente il comando anche queste ultime verrebbero copiate.

$ sudo rsync -r percorso/sorgente percorso/destinazione

Digitando il suddetto comando nella cartella “destinazione” viene copiata l’intera cartella “sorgente”:

Sincronizzazione di cartelle con rsync

Con il seguente comando nella cartella “destinazione” viene invece effettuata una copia del contenuto della cartella “sorgente”:

$ sudo rsync -r percorso/sorgente/ percorso/destinazione/

Sincronizzazione del contenuto di una cartella con rsync

Presta attenzione alla differenza tra i due comandi: scrivendo “/” dopo la cartella sorgente stai indicando al sistema di effettuare la copia dei file contenuti nella cartella.
Se non inserisci “/” stai selezionando l’intera cartella sorgente e quindi nella cartella destinazione troverai una copia della cartella sorgente.

Copiare file di un solo formato

Rsync ti permette inoltre di copiare solo alcuni tipi di file specificando il formato o il nome.
Ipotizzando che si tratti di file in formato “pdf”, potrai copiare solamente i file in questo formato digitando:

$ sudo rsync percorso/sorgente/*.pdf percorso/destinazione/

Sincronizzazione di alcuni tipi di file con rsync

Con “*.pdf” hai richiesto espressamente la copia di tutti i file .pdf.

Copiare file tramite protocollo SSH tra due server

Puoi utilizzare anche il protocollo SSH per copiare i tuoi file e le tue cartelle dal tuo server a un altro. Utilizzando questo protocollo sei anche sicuro che i file durante il trasferimento siano criptati in maniera tale che nessuno possa leggerli.
Il comando prevede che vi sia l’opzione “-e ssh” seguito poi dalla sorgente e la destinazione della copia.

$ sudo rsync -e ssh percorso/sorgente/ utente@IP_ricevente:/percorso/destinazione/

Verrà richiesta la password dell’utente con il quale si sta facendo accesso alla macchina di destinazione.

Sincronizzazione di cartelle con ssh e rsync

Copiare file in base alla dimensione

Rsync ti permette di filtrare i file da copiare anche in base alla dimensione che il file stesso occupa sul disco. Esistono infatti due parametri che possono essere specificati per limitare la copia dei soli file più piccoli (o più grandi) di una certa dimensione desiderata.

$ sudo rsync --max-size=15k percorso/sorgente/ percorso/destinazione/

Con il suddetto comando verranno copiati solo i file più piccoli di 15Kb. I file più grandi verranno ignorati.

Copia di file in base alla dimensione con rsync

$ sudo rsync --min-size=20k percorso/sorgente/ percorso/destinazione/

In questo caso verranno copiati solo i file più grandi di 20Kb. I file più piccoli verranno ignorati.

Copia di file in base alla dimensione con rsync

Escludere file dalla copia in base all’estensione

Se non vuoi copiare alcuni tipi di file, puoi utilizzare il tag “--exclude” per indicare quali formati non devono essere inclusi nel processo di copia.
Nell’esempio sottostante, i file in formato .pdf non verranno copiati dalla cartella “sorgente” nella cartella “destinazione”:

$ sudo rsync -r --exclude="*.pdf" percorso/sorgente/ percorso/destinazione/

Copia di file in base all'estensione con rsync

Rimuovere il contenuto dalla cartella sorgente una volta trasferito 

Simile al concetto di “taglia ed incolla”, rsync ti fornisce la possibilità di spostare i file da una cartella sorgente a una di destinazione. In tal caso, i file vengono copiati nella cartella destinazione e successivamente rimossi dalla cartella sorgente.

$ sudo rsync -r --remove-source-files percorso/sorgente/ percorso/destinazione/

Taglia e incolla con rsync

Impostare limite velocità di trasferimento

In caso di copia attraverso la rete potresti avere necessità di impostare un limite di velocità di upload dei tuoi file. In tal caso utilizza il tag “--bwlimit=KBPS”, sostituendo a “KBPS” il valore della velocità di trasferimento desiderato.

$ sudo rsync --bwlimit=KBPS -r -e ssh percorso/sorgente/ user@IP_receiver:/percorso_destinazione/

Impostare un limite di velocità di trasferimento con rsync

Effettuare copie di backup periodiche e automatizzate

Se stai utilizzando rsync per effettuare un backup ma non vuoi digitare ogni volta i comandi, esiste un tool che fa al caso tuo: Cron.
Si tratta di un servizio già presente all'interno di Ubuntu 18.04 e permette di definire alcune “regole” per la ripetizione periodica di alcuni comandi.

Per iniziare a creare le tue regole per impostare il processo di copia automatico devi digitare:

$ sudo crontab -e

Ti si aprirà un editor di testo nel quale indicherai quale comando far ripetere con cadenza regolare. Una volta descritte le regole, salva e chiudi.

Configurare un backup automatico con crontab

Come configurare un crontab

La scrittura del crontab deve seguire una sintassi ben precisa, specificando 6 parametri ordinati:

m h dom mon dow command
  • m: minuti (0-59)

  • h: ore (0-23)

  • dom: giorno del mese (1-31)

  • mon: mese (1-12)

  • dow: giorno della settimana (0:domenica - 6:sabato)

  • command: comando da eseguire

Esempi di configurazioni possibili:

30 * * * * rsync percorso/sorgente/*.pdf percorso/destinazione
Ogni mese, ogni giorno e ad ogni ora al minuto 30 verrà effettuata la copia di tutti i file ".pdf" presenti nella cartella “sorgente” nella cartella “destinazione”.
*/2 * * * * rsync percorso/sorgente/*.pdf percorso/destinazione
La copia di tutti i file .pdf presenti nella cartella “sorgente” nella cartella “destinazione” avverrà ogni giorno di ogni mese ogni 2 minuti.
50 8 * * 1,3 rsync percorso/sorgente/*.pdf percorso/destinazione
La copia dei file .pdf nella cartella “sorgente” nella cartella “destinazione” verrà eseguita dal lunedì al mercoledì alle 8:50.

Quindi modifica il crontab inserendoci il tuo comando:

Configurazione backup automatico con rsync e crontab

Una volta salvato e chiuso l'editor,  per vedere l’elenco dei tuoi crontab digita: 

$ sudo crontab -l