Come utilizzare RSYNC per copiare o sincronizzare Files e cartelle da console – UBUNTU Linux
CORSAIR VENGEANCE DDR5 32GB (2x16GB) DDR5 6000MHz CL30 AMD EXPO Intel XMP iCUE Memoria Compatibile per Computer - Grigio (CMK32GX5M2B6000Z30)
5% OffRsync (Remote Sync) è il comando più comunemente usato per copiare e sincronizzare file e directory da remoto e localmente nei sistemi Linux / Unix. Con l’aiuto del comando rsync è possibile copiare e sincronizzare i dati in remoto e localmente tra directory, dischi e reti, eseguire backup dei dati e mirroring tra due macchine Linux.
Questo articolo spiega gli usi di base e avanzati del comando rsync per trasferire i files in remoto e/o localmente su macchine basate su Linux.
Non è necessario essere utenti root per eseguire il comando rsync.
Alcuni vantaggi e funzionalità del comando Rsync
- Copia e sincronizza in modo efficiente i file da o verso un sistema remoto.
- Supporta la copia di collegamenti, dispositivi, proprietari, gruppi e autorizzazioni.
- È più veloce di scp (Secure Copy) perché rsync utilizza il protocollo di aggiornamento remoto che consente di trasferire solo le differenze tra due set di file.
La prima volta, copia l’intero contenuto di un file o di una directory dall’origine alla destinazione, ma dalla volta successiva copia solo i blocchi e i byte modificati nella destinazione. - Rsync consuma meno larghezza di banda in quanto utilizza un metodo di compressione e decompressione durante l’invio e la ricezione di dati su entrambi i “lati della copia” ( origine e destinazione ).
Sintassi di base del comando rsync
# rsync options source destination
Alcune opzioni comuni spesso utilizzate con rsync
- -v : verbose ( dettaglio delle operazioni )
- -r : copia i dati ricorsivamente (ma non conserva data ,ora e permessi )
- -a : archive mode, copia i dati ricorsivamente (conserva data,ora,permessi ,symbolic links, usenti & gruppi e proprietà )
- -z : compress file data ( comprime i dati )
- -h : human-readable, numeri di output leggibili dall’uomo
Installare rsync nella macchina Linux
Cavo iPhone, 1.8M Ricarica Filo Caricatore iPhone Carica Rapida Certificato MFi Lungo Cavo Lightning USB Caricabatterie Cavetto per iPhone 11 12 13 14 Pro Max Plus Mini XS XR X 8 7 6 SE iPad
36% OffPossiamo installare il pacchetto rsync con i seguenti comandi.
# yum install rsync (Su sistemi basati su Red Hat)
# apt-get install rsync (Su sistemi basati su
Debian )
1. Copia/Sincronizzazione di Files e Directory localmente
Copia/Sincronizzazione di File su un computer locale
Il seguente comando sincronizzerà un singolo file su un computer locale da una posizione a un’altra posizione. In questo esempio, un nome file backup.tar deve essere copiato o sincronizzato nella cartella / tmp / backups /.
[root@blograffo]# rsync -zvh backup.tar /tmp/backups/
created directory /tmp/backups
backup.tar
sent 14.71M bytes received 31 bytes 3.27M bytes/sec
total size is 16.18M speedup is 1.10
Copia/Sincronizzazione di cartelle ( directory ) su un computer locale
Il comando seguente trasferirà o sincronizzerà tutti i file da una directory a un’altra directory nella stessa macchina.
In questo esempio, / root / rpmpkgs contiene alcuni file del pacchetto rpm e si desidera che la directory venga copiata nella cartella
/ tmp / backups /.
[root@blograffo]# rsync -avzh /root/rpmpkgs /tmp/backups/
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm
rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm
rpmpkgs/nagios-3.5.0.tar.gz
rpmpkgs/nagios-plugins-1.4.16.tar.gz
sent 4.99M bytes received 92 bytes 3.33M bytes/sec
total size is 4.99M speedup is 1.00
2. Copia/Sincronizzazione di Files e Directory da o verso server remoto
Copia di una cartella ( directory ) da un server locale ad un server remoto
Questo comando sincronizzerà una directory da un computer locale a un computer remoto. Ad esempio: nel computer locale è presente una cartella “rpmpkgs” che contiene alcuni pacchetti RPM e si desidera che il contenuto della directory locale venga inviato a un server remoto, è possibile utilizzare il comando seguente.
[root@blograffo]$ rsync -avz rpmpkgs/ [email protected]:/home/
[email protected]’s password:
sending incremental file list
./
httpd-2.2.3-82.el5.centos.i386.rpm
mod_ssl-2.2.3-82.el5.centos.i386.rpm
nagios-3.5.0.tar.gz
nagios-plugins-1.4.16.tar.gz
sent 4993369 bytes received 91 bytes 399476.80 bytes/sec
total size is 4991313 speedup is 1.00
Copia di una cartella ( directory ) da un server remoto ad un server locale
Questo comando ti aiuterà a sincronizzare una directory remota con una directory locale. Qui in questo esempio, una directory / home / tarunika / rpmpkgs che si trova su un server remoto viene copiata nel tuo computer locale in / tmp / myrpms.
[root@blograffo]# rsync -avzh [email protected]:/home/tarunika/rpmpkgs /tmp/myrpms
[email protected]'s password:
receiving incremental file list
created directory /tmp/myrpms
rpmpkgs/
rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm
rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm
rpmpkgs/nagios-3.5.0.tar.gz
rpmpkgs/nagios-plugins-1.4.16.tar.gz
sent 91 bytes received 4.99M bytes 322.16K bytes/sec
total size is 4.99M speedup is 1.00
3. Copia/Sincronizzazione con RSYNC su SSH
Con rsync, possiamo usare SSH (Secure Shell) per il trasferimento dei dati; usando il protocollo SSH durante il trasferimento dei nostri dati possiamo essere certi che i dati vengono trasferiti in una connessione protetta con crittografia e nessuno potrà leggerli durante il trasferimento.
Inoltre, spesso, la connessione SSH è l’unica disponibile su determinati hosting che escludono altri protocolli di trasferimento
Copiare un File da un Server Remoto ad un Server Locale con SSH
Per specificare un protocollo con rsync è necessario fornire l’opzione “-e” con il nome del protocollo che si desidera utilizzare. In questo esempio, useremo “ssh” con l’opzione “-e” ed eseguiremo il trasferimento dei dati.
[email protected]’s password:
receiving incremental file list
install.log
sent 30 bytes received 8.12K bytes 1.48K bytes/sec
total size is 30.74K speedup is 3.77
Copiare un File da un Server Locale ad un Server Remoto con SSH
[email protected]’s password:
sending incremental file list
backup.tar
sent 14.71M bytes received 31 bytes 1.28M bytes/sec
total size is 16.18M speedup is 1.10
4. Mostrare l’avanzamento mentre si copiano dati con RSYNC
Per mostrare l’avanzamento durante il trasferimento dei dati da una macchina a un’altra macchina, possiamo usare l’opzione “–progress”. Visualizza i file e il tempo rimanente per completare il trasferimento.
[email protected]’s password:
sending incremental file list
created directory /root/rpmpkgs
rpmpkgs/
rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm
5. Uso di -include ed -exclude per includere o escludere files e directory
Queste due opzioni di RSYNC ci consentono di includere ed escludere i file e le cartelle che desideriamo o meno trasferire.
In questo esempio, il comando rsync includerà solo quei file e directory che iniziano con “R” ed escluderà tutti gli altri file e directory.
[email protected]’s password:
receiving incremental file list
created directory /root/rpm
./
Requirename
Requireversion sent 67 bytes received 167289 bytes 7438.04 bytes/sec
total size is 434176 speedup is 2.59
6. Uso dell’opzione -delete
Se un file o una directory non esistono sull’origine, ma esistono già nella destinazione, durante la sincronizzazione potremmo voler eliminare quel file / directory esistente sulla destinazione.
Possiamo usare l’opzione “–delete” per eliminare, sulla destinazione, i file che non sono presenti nella directory di origine.
Sorgente e destinazione saranno perfettamente sincronizzati.
Se, ad esempio creiamo un file test.txt sulla destinazione ceh enon è presente sull’origine questo è quello che accade :
il file test.txt sarà immediatamente cancellato, usando RSYNC con –delete, in quanto non presente nell’origine della copia.
7. Impostare la grandezza massima dei files da trasferire
È possibile specificare la dimensione massima del file da trasferire o sincronizzare. Si può fare con l’opzione “–max-size”. Qui in questo esempio, la dimensione massima del file è 200k, quindi questo comando trasferirà solo quei files che sono uguali o inferiori a 200k.
sending incremental file list
created directory /root/tmprpm
./
Conflictname
Group
Installtid
Name
Provideversion
Pubkeys
Requireversion
Sha1header
Sigmd5
Triggername
__db.001
sent 189.79K bytes received 224 bytes 13.10K bytes/sec
total size is 38.08M speedup is 200.43
8. Cancellare automaticamente i files sorgenti dopo il trasferimento ( avvenuto con successo )
Supponiamo di avere un server Web principale e un server di backup dei dati, che venga effettuato un backup quotidiano locale che venga poi sincronizzato con un server remoto; ora non vogliamo conservare la copia locale del backup nel server web.
Dovremmo aspetterai il completamento del trasferimento e poi eliminare manualmente quel file di backup locale.
Questa eliminazione si può compiere automaticamente utilizzando l’opzione “–remove-source-files“.
sent 14.71M bytes received 31 bytes 4.20M bytes/sec
total size is 16.18M speedup is 1.10 [root@tecmint]#
ll backup.tar
ls: backup.tar: No such file or directory
9. Esegui una “lancio sicuro ” di rsync – “–dry-run”
Se avete poca esperienza con Linux o in particolare con RSYNC può essere comodo lanciare una copia o sincronizzazione di files e cartelle con RSYNC che possa essere annullabile.
Un errore potrebbe generare effetti indesiderati nella cartella di destinazione che dovrebbero essere riparati con tanta pazienza e tanto lavoro.
L’uso di “–dry-run” non apporterà alcuna modifica dopo l’esecuzione del comando RSYNC e mostrerà solo l’output del comando stesso ( cioè quello che RSYNC andrebbe a fare ); se l’output mostra esattamente lo stesso risultato che si desidera , sarà possibile rimuovere l’opzione “–dry-run” dal comando e lanciarne effettivamente l’esecuzione sul terminale.
10. Impostare un limite di banda per il trasferimento di files
È possibile impostare il limite di larghezza di banda durante il trasferimento dei dati da una macchina a un’altra macchina con l’aiuto dell’opzione “–bwlimit”. Questa opzione ci aiuta a limitare la larghezza di banda di input/output
Inoltre, per impostazione predefinita rsync sincronizza solo blocchi e byte modificati; se si desidera sincronizzare esplicitamente l’intero file, utilizzare l’opzione “-W” .