Copiare e fare il backup di file e cartelle utilizzando l'utilità Rsync
Rsync è uno strumento veloce e versatile per copiare file e cartelle. L'utility può copiare dati sia localmente che su altri host, incluso Cloud Storage di INTROSERV. Le opzioni dell'utility consentono di controllare molti aspetti della copia e del mirroring dei dati. Una funzione utile è la possibilità di comprimere i dati durante il trasferimento, il che può ridurre il traffico di rete e migliorare la velocità di trasferimento quando la larghezza di banda della rete è il fattore limitante. Un altro vantaggio è che Rsync evita di trasferire i file che non necessitano di aggiornamento. Per impostazione predefinita, confronta le dimensioni del file e l'ora di modifica, trasferendo solo i file che sembrano essere cambiati, il che consente senza dubbio di risparmiare tempo nella sincronizzazione di directory di grandi dimensioni.
Perché usare il flag -a? L'opzione -a (archive) è la scelta più comune. Abilita la copia ricorsiva e conserva gli attributi comuni dei file: permessi, proprietario, gruppo, orari di modifica e collegamenti simbolici. Poiché -a include già la ricorsione, non è necessario aggiungere -r separatamente.
Opzioni dell'utility
Vediamo alcuni esempi dell'utilizzo di Rsync per copiare file e directory sul Cloud Storage remoto di INTROSERV tramite il protocollo SSH.
Questi comandi sono universali. Basta sostituire l'indirizzo di destinazione e il percorso per sincronizzare i file con qualsiasi server remoto tramite SSH.
Diamo un'occhiata ad alcune delle principali opzioni dell'utility che verranno utilizzate più spesso. Un elenco più dettagliato delle opzioni disponibili è disponibile nella documentazione man (comando man rsync):
-v – mostra informazioni dettagliate sul processo
-c – verifica i checksum dei file
-q – informazioni minime
-a – modalità di archiviazione
-R – percorsi relativi
-y – non sovrascrivere i file più recenti
-b – crea una copia di backup
-l – copia i collegamenti simbolici
-L – copia il contenuto dei collegamenti
-H – copia i collegamenti fisici
-g – salva il gruppo
-p – mantiene i permessi dei file
-t – salva l'ora di modifica
-x – opera solo in questo file system
-e – utilizza un altro protocollo di trasporto (ad esempio, ssh)
-z – comprime i file prima del trasferimento
--delete – elimina i file che non sono nell'origine
--exclude – esclude i file
--recursive – elenca le directory in modo ricorsivo
--no-recursive – disabilita la ricorsione
--progress – mostra l'avanzamento del trasferimento dei file
--stat – mostra le statistiche di trasferimento
--max-size – dimensione massima del file per il trasferimento
--bwlimit – limite di velocità per i trasferimenti di file
Breve spiegazione della sintassi
La regola della barra finale (/). È qui che la maggior parte degli utenti commette errori: /cartella (senza barra) copia la cartella stessa. /cartella/ (con barra) copia solo il contenuto della cartella.
rsync -az --progress /home/user/test.file boxxxx@storage_ip:/remote_folder/
-a – modalità archivio: una copia ricorsiva che conserva gli attributi dei file
-z – comprime i dati durante il trasferimento
--progress – mostra l'avanzamento del trasferimento
/home/user/test.file – questo è il percorso del file e il file effettivo che deve essere trasferito
boxxxx@storage_ip: – questa è la risorsa di destinazione (nel nostro esempio si tratta di cloud storage, ma può anche essere un server remoto). boxxxx è il nome utente, dopo il segno @ si trova il nome della risorsa o l'indirizzo IP del server remoto
/remote_folder/ – questa è una cartella su una risorsa remota. Nel nostro esempio, in INTROSERV Cloud Storage.
Copiare un file in una cartella su uno storage remoto
rsync -az --progress /home/user/Desktop/test.file boxxxx@storage_ip:/remote_folder/
Vi verrà richiesta una password per connettervi allo storage. Inserite la password e continuate; vedrete l'avanzamento e la velocità di trasferimento del file.
Copiare una cartella nella cartella su uno storage remoto
Prestate attenzione alle barre nelle righe della cartella di origine e della cartella di destinazione. L'assenza di una barra nella cartella di origine indica che vogliamo trasferire la cartella locale Desktop stessa, con tutto il suo contenuto, nella cartella remote_folder.
rsync -az --progress /home/user/Desktop boxxxx@storage_ip:/remote_folder/
Vedrete la directory e tutti i file al suo interno mentre vengono trasferiti.
Copiare il contenuto di una cartella locale in una cartella su uno storage remoto
Prestate attenzione alla barra alla fine della cartella di origine. La sua presenza indica che l'utility deve copiare il contenuto della cartella locale in una cartella sullo storage remoto.
rsync -az --progress /home/user/Desktop/ boxxxx@storage_ip:/remote_folder/
Vedrete l'avanzamento e la velocità di copia.
Copiare una cartella da uno storage remoto a una cartella del server locale
Con Rsync, potete avviare la copia di una cartella da uno storage remoto. Il comando è il seguente:
rsync -az --progress boxxxx@storage_ip:/remote_folder /home/user/Desktop/
Vedrete l'avanzamento e la velocità di copia di una cartella remota in una cartella sul server locale.
Copiare il contenuto di una cartella da uno storage remoto a una cartella del server locale
Anche qui vale la pena prestare attenzione alla barra alla fine del percorso della cartella di origine. La sua presenza indica che è necessario copiare solo il contenuto della cartella.
rsync -az --progress boxxxx@storage_ip:/remote_folder/ /home/user/Desktop/
Copiare il contenuto di una cartella escludendo e/o includendo file
L'utility consente di specificare esplicitamente quali file trasferire e quali devono essere esclusi. Per fare ciò, utilizzate le opzioni --include e --exclude. Le regole vengono elaborate in ordine, quindi una regola di inclusione deve precedere una regola di esclusione che altrimenti corrisponderebbe allo stesso file.
Testate con un'esecuzione di prova. Prima di eseguire un comando che modifica o elimina molti file, aggiungete il flag -n o --dry-run. Rsync vi mostrerà esattamente cosa farebbe senza effettivamente spostare o eliminare nulla.
rsync -az --progress --include='test.file' --exclude='*' /home/user/Desktop/ boxxxx@storage_ip:/remote_folder/
Questo comando trasferisce test.file ed esclude tutto il resto nella directory di origine. La regola --exclude='*' è ciò che limita il trasferimento al singolo file incluso, quindi qui entrambe le opzioni sono necessarie insieme.
Copiare solo i file diversi dai file nella cartella di destinazione
Per impostazione predefinita, Rsync decide se un file deve essere trasferito in base alle sue dimensioni e all'ora di modifica. Utilizzate l'opzione -c quando volete che Rsync confronti invece il contenuto dei file tramite checksum. Questo è più affidabile quando non ci si può fidare dei timestamp, ma è più lento, poiché entrambe le parti devono leggere i file per calcolare i checksum.
rsync -azc --progress /home/user/Desktop/ boxxxx@storage_ip:/remote_folder/
Con -c, Rsync confronta il contenuto dei file di origine e di destinazione tramite checksum e trasferisce solo i file il cui contenuto differisce.
Utilizzo di Rsync tramite SSH con una porta SSH non standard
Per trasferire file da/verso un server con la porta SSH modificata, utilizzate l'opzione -e 'ssh -p port_number'.
Il comando per copiare un file su un server in cui la porta SSH è stata modificata a 44 sarà simile a questo:
rsync -azc --progress -e 'ssh -p 44' /home/user/Desktop/ user@server_ip:/remote_folder/
Nota sulla sicurezza: la modifica della porta SSH predefinita può ridurre le scansioni automatizzate e i tentativi di connessione indesiderati, ma non sostituisce un'adeguata sicurezza SSH come l'autenticazione basata su chiavi e le regole del firewall. Assicuratevi sempre che il vostro firewall consenta il traffico sulla porta scelta.