Come amministratore di sistema, dedico la maggior parte delle mie energie a due cose (oltre a assicurarmi che ci sia il caffè):preoccuparmi di avere backup e capire il modo più semplice e migliore per fare le cose. Uno dei miei strumenti preferiti per risolvere entrambi i problemi si chiama rsync
.
Rsync
è stato creato da una delle stesse persone che hanno inventato la samba, Andrew Tridgell. È uno strumento così utile e flessibile che è incluso in ogni versione di Linux ed è stato portato su altri sistemi operativi. Più semplicemente, rsync è uno strumento per copiare file. Tuttavia, è molto più potente di così.
- Mantiene due set di file aggiornati e sincronizzati.
- Esegui come comando e può essere sottoposto a script.
- Comprime e crittografa il flusso di dati.
- Utilizza diversi tipi di client di accesso remoto (SSH e RSH, ad esempio).
Quindi non sorprende che sia uno dei preferiti di molti amministratori di sistema.
Le basi
Come il mv
e cp
comando, nella sua forma più elementare rsync
ha solo bisogno di una fonte e di una destinazione:
[root@milo enable]# rsync ./foo/testfoo ./bar/
[root@milo enable]# ls -ilR
.:
total 8
5079202 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:15 bar
5079201 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:08 foo
./bar:
total 8
5001398 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
4982446 -rw-rw-r-- 1 root root 8 Jun 11 15:15 testfoo
./foo:
total 4
5001268 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testfoo
Abbiamo copiato testfoo
alla bar
directory. Niente di grave, davvero.
Ora aggiungiamo un file a ./foo
e risincronizza:
[root@milo enable]# touch ./foo/bat.txt
[root@milo enable]# rsync ./foo/* ./bar/
[root@milo enable]# ls -ilR
.:
total 8
5079202 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:45 bar
5079201 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:25 foo
./bar:
total 8
4992599 -rw-r--r-- 1 root root 0 Jun 11 15:45 bat.txt
5001398 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
4992604 -rw-rw-r-- 1 root root 8 Jun 11 15:45 testfoo
./foo:
total 4
5002591 -rw-r--r-- 1 root root 0 Jun 11 15:25 bat.txt
5001268 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testfoo
A questo punto, vogliamo sottolineare un paio di cose. Innanzitutto, quando abbiamo eseguito nuovamente rsync
, ha ricopiato testfoo
e aggiornato il atime
. Inoltre, ogni volta che copia un file, assegna al file un nuovo inode
numero. Pertanto, per quanto riguarda il filesystem, è un file completamente diverso (perché è—ha copiato tutto le informazioni ogni volta). Infine, nota che quando rsync
il file, cambia la proprietà all'utente che ha eseguito il comando (root, in questo caso).
Tutto questo è importante se vogliamo fare dei backup. Questo comportamento è lo stesso di cp
comando. Possiamo anche usare il cp
comando per copiare le directory in modo ricorsivo, oltre a preservare gli attributi e la proprietà. La grande differenza è che rsync
può fare un checksum del file e confrontare i file di origine e di destinazione, dove cp
guarda solo atime
valore. Rsync
La funzionalità aggiuntiva di è utile per preservare l'integrità del backup (ne parleremo più avanti in questa serie).
Quindi aggiorniamo solo uno di questi file e vediamo cosa rsync
fa:
[root@milo enable]# echo 'this is new text'>>./foo/testfoo
[root@milo enable]# ls -al ./foo
-rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
[root@milo enable]# rsync -aruv ./foo/* ./bar/
sending incremental file list
testfoo
sent 194 bytes received 35 bytes 458.00 bytes/sec
total size is 25 speedup is 0.11
[root@milo enable]# ls -ilR
.:
total 8
5079202 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 16:16 bar
5079201 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:56 foo
./bar:
total 8
4992599 -rw-r--r-- 1 root root 0 Jun 11 15:45 bat.txt
4998080 -rw-r--r-- 1 root root 0 Jun 11 15:56 footoo.txt
5001398 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
4983541 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
./foo:
total 4
5002591 -rw-r--r-- 1 root root 0 Jun 11 15:25 bat.txt
4997949 -rw-rw-r-- 1 skipworthy skipworthy 0 Jun 11 15:56 footoo.txt
5001268 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
Nota che questa volta abbiamo usato alcuni interruttori:
-a
Modalità archivio, conservamtime
, autorizzazioni e collegamenti simbolici.-r
Modalità ricorsiva, esegue il drill-down in tutte le directory e le sincronizza (dovrebbe essere ridondante con-a
switch, ma lo specifico sempre comunque).-u
Aggiorna i file solo semtime
sulla fonte è più recente.-v
Modalità dettagliata, ti dice cosa sta facendo (è sempre bello poter monitorare cosa sta succedendo. Un altro trucco utile è reindirizzare questo output su un file e controllarlo in un secondo momento).
Ripristina file con rsync
Quindi facciamo finta che siano trascorse qualche settimana. Il CFO chiama e dice che qualcosa non va:nella sua directory /foo mancano molti file.
./foo:
total 8
5002591 -rw-r--r-- 1 root root 0 Jun 11 15:25 bat.txt
4997949 -rw-rw-r-- 1 skipworthy skipworthy 33 Jul 24 15:32 footoo.txt
5001268 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
Diamo un'occhiata ai backup e vediamo i file mancanti:
./bar:
total 12
4992599 -rw-r--r-- 1 root root 0 Jun 11 15:45 bat.txt
4994298 -rw-rw-r-- 1 skipworthy skipworthy 33 Jul 24 15:32 footoo.txt
4994359 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles1.txt
4994367 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles2.txt
4994374 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles3.txt
4994413 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles4.txt
5001398 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
4983541 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
Un rapido rsync
ripristinare:
[root@milo enable]# rsync -aruv ./bar/* ./foo
sending incremental file list
bat.txt
laterfiles1.txt
laterfiles2.txt
laterfiles3.txt
laterfiles4.txt
testbar
E:
./foo:
total 12
4994387 -rw-r--r-- 1 root root 0 Jun 11 15:45 bat.txt
4997949 -rw-rw-r-- 1 skipworthy skipworthy 33 Jul 24 15:32 footoo.txt
4994562 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles1.txt
4994564 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles2.txt
4994565 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles3.txt
4994567 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles4.txt
4994579 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
5001268 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
I file mancanti vengono ripristinati o aggiornati dai backup più recenti, ma i file esistenti, che non sono stati modificati, vengono lasciati soli. Inoltre, tieni presente che la proprietà di footoo.txt
è stato conservato.
Concludi
Ti incoraggio a dare un'occhiata (come sempre) alla pagina man di rsync
e prova questo utile comando.
Ecco alcune altre opzioni da considerare:
-r
(ricorsivo)-b
(backup)-R
(parente)-u
(aggiornamento - copia solo i file modificati)-P
(avanzamento)-c
(comprimere)-p
(conserva i permessi)
Nel prossimo articolo di questa serie, andremo un po' oltre e esamineremo rsync
remoto e alcune delle altre funzionalità più avanzate di questo comando.
[ Corso online gratuito:panoramica tecnica di Red Hat Enterprise Linux. ]