In un articolo precedente intitolato Strumenti di amministratore di sistema:utilizzo di rsync per gestire il backup, il ripristino e la sincronizzazione dei file, ho discusso di cp
e sftp
e ha esaminato le basi di rsync
per spostare i file. Ci sono anche un paio di altri ottimi articoli qui su Enable Sysadmin su tar e SSH a cui dovresti dare un'occhiata. Copiare file da e verso sistemi remoti e avere un modo semplice per eseguire un backup di qualcosa su cui stai lavorando (o, se è per questo, dati aziendali critici) sono strumenti utili di base nella casella degli strumenti di sysadmin che uso ancora e ancora. A volte, tuttavia, potresti voler fare qualcosa di un po' più sofisticato, come spostare i dati su un collegamento meno affidabile o più lento. Rsync
può fornire crittografia per proteggerlo in transito, compressione per renderlo migliore e checksum per assicurarti di ottenere ciò che ti aspettavi.
[ Ai lettori è piaciuto anche: Come copiare in modo sicuro i file tra host Linux utilizzando SCP e SFTP ]
Mantenimento di un sito web
Ho iniziato a usare rsync
per sincronizzare una versione locale di un sito web che gestivo nei secoli bui, quando CI/CD era solo un lampo negli occhi di suo padre. Potrei mantenere una copia locale su cui lavorare e anche avere un backup dell'ultima versione del sito. Userò quello scenario come mio esempio. Puoi usare rsync
per sincronizzare qualsiasi filesystem remoto per i backup o come modo rapido per creare una pipeline dal test alla produzione. L'ho anche usato per sincronizzare una directory e poi ho usato tar
per creare backup locali:
skipworthy ~ enable websync ls -al
total 8
drwxrwxr-x 2 skipworthy skipworthy 4096 Dec 16 13:57 .
drwxrwxr-x 5 skipworthy skipworthy 4096 Dec 16 14:01 ..
skipworthy ~ enable websync rsync -aruv 192.168.11.111:/usr/share/httpd/enable ./
receiving incremental file list
enable/
enable/bar
enable/foo
enable/index
sent 85 bytes received 229 bytes 209.33 bytes/sec
total size is 0 speedup is 0.00
skipworthy ~ enable websync ls -l
total 4
dr-xr-xr-x 2 skipworthy skipworthy 4096 Dec 16 13:49 enable
Come prima con il rsync
locale , stiamo eseguendo in modalità archivio, preservando mtime e attributi di file, ricorrendo nelle sottodirectory e aggiornando solo i dati nuovi o modificati.
Nota :-v
quasi sempre significa prolisso , inviando l'output alla console.
Quindi diciamo che volevo aggiungere una pagina al sito e caricarla:
skipworthy ~ enable websync rsync -aruv ./* 192.168.11.111:/usr/share/httpd/enable
sending incremental file list
pagetwo
rsync: recv_generator: mkdir "/usr/share/httpd/enable/enable" failed: Permission denied (13)
Questo è un buon momento per notare che ci sono alcune cose a cui devi pensare quando usi rsync
per inviare file. Rsync
necessita dell'autorizzazione per l'intero albero delle directory, non solo per la directory di destinazione. Ci sono diversi modi in cui puoi farlo. Per uno, è possibile specificare l'uid e gid del rsync
demone in /etc/rsyncd.conf
. Un altro modo è eseguire rsync
come utente con le autorizzazioni richieste. Entrambi possono essere problematici in un ambiente sicuro, quindi procedi con attenzione qui.
Inoltre, tieni presente che per impostazione predefinita, quando usi rsync
da remoto, ti stai connettendo direttamente a rsync
servizio sulla porta 873 . Devi pensarci quando imposti le regole e le autorizzazioni del firewall. Inoltre, ci sono i permessi di SELinux, che sono tutta un'altra discussione e non rientrano nell'ambito di questo articolo. Una soluzione al problema delle autorizzazioni di directory e ai problemi di sicurezza, in generale, consiste nell'usare SSH (questo dovrebbe suonare familiare ormai). SSH configura un tunnel crittografato e può essere impostato per l'ascolto su qualsiasi porta, senza contare che puoi specificare una chiave SSH per proteggere ulteriormente la connessione e rendere le connessioni remote un po' più facili da automatizzare.
Funzioni avanzate
Per questo prossimo esempio, inserirò queste modifiche come root. Per favore, non essere come me:
rsync -aruv -e ssh ./* [email protected]:/usr/share/httpd/enable
[email protected]'s password:
sending incremental file list
pagetwo
sent 246 bytes received 36 bytes 43.38 bytes/sec
total size is 31 speedup is 0.11
Si noti ancora che le solite opzioni SSH sono disponibili per le connessioni, inclusa la specifica della porta e della posizione della chiave. Rsync
ti consente anche di selezionare l'opzione della shell remota, purché sia installata su entrambe le estremità e configurata in .ssh/config
.
Checksum
Ho menzionato i checksum in precedenza e ci sono due cose potenzialmente utili qui. Innanzitutto, rsync
esegue un checksum per impostazione predefinita e quindi lo verifica sul target, che ti avviserà sulla remota possibilità che i dati vengano persi o danneggiati durante il volo.
In secondo luogo, puoi anche utilizzare i checksum per determinare quali file trasferire (ad esempio, quali file sono effettivamente diversi tra sorgente e destinazione), utile se non sei sicuro che sia il mtime /tempo rappresenta la versione effettiva del file che desideri. Ho avuto filesystem che stavo cercando di sincronizzare che venivano toccati da un'altra app, quindi i tempi non erano corretti.
skipworthy ~ enable websync rsync -aruv -e ssh --checksum 192.168.11.111:/usr/share/httpd/enable ./
receiving incremental file list
sent 26 bytes received 364 bytes 780.00 bytes/sec
Nota :Ciò comporta un sovraccarico aggiuntivo nell'elaborazione e nel trasferimento poiché viene generato un checksum per ciascun file su ciascun lato e quindi confrontato.
Compressione
Un altro trucco utile è la compressione. Il -z
l'opzione comprimerà lo stream, --zc
imposta il tipo di compressione e --zl
imposta il livello:
skipworthy ~ enable websync rsync -aruv -e ssh --zc=zlib --zl=6 192.168.11.111:/usr/share/httpd/enable ./
receiving incremental file list
sent 26 bytes received 248 bytes 548.00 bytes/sec
total size is 31 speedup is 0.11
Se non specifichi il tipo o il livello, rsync
utilizza un elenco fornito in RSYNC_COMPRESS_LIST variabile di ambiente per negoziare un tipo e un livello di compressione comuni.
[ Cerchi ulteriori informazioni sull'automazione dei sistemi? Inizia con The Automated Enterprise, un libro gratuito di Red Hat. ]
Concludi
Quindi il gioco è fatto:rsync
è ancora un altro di quegli strumenti che è ancora utile e rilevante per l'amministrazione dei sistemi Linux, uno strumento che sono stato felice di avere molte volte nella mia carriera. Ci sono molte, molte altre cose che puoi fare con esso che non abbiamo spazio per esplorare qui:come sempre, controlla le pagine man!