Sembra chiaro che i backup siano sempre un argomento caldo nel mondo Linux. Nel 2017, David Both ha offerto ai lettori di Opensource.com suggerimenti su "Utilizzare rsync per eseguire il backup del sistema Linux" e all'inizio di quest'anno ha pubblicato un sondaggio chiedendoci:"Qual è la tua strategia di backup principale per la directory /home in Linux? " In un altro sondaggio di quest'anno, Don Watkins ha chiesto:"Quale soluzione di backup open source usi?"
La mia risposta è rsync. Mi piace molto rsync! Sul mercato sono disponibili molti strumenti grandi e complessi che potrebbero essere necessari per la gestione di unità nastro o dispositivi di librerie di archiviazione, ma un semplice strumento da riga di comando open source potrebbe essere tutto ciò di cui hai bisogno.
Risincronizzazione di base
Ho gestito il sistema di repository binario per un'organizzazione globale che aveva circa 35.000 sviluppatori con più terabyte di file. Spostavo o archiviavo regolarmente centinaia di gigabyte di dati alla volta. È stato utilizzato Rsync. Questa esperienza mi ha dato fiducia in questo semplice strumento. (Quindi sì, lo uso a casa per eseguire il backup dei miei sistemi Linux.)
Il comando di base rsync è semplice.
rsync -av SRC DST
In effetti, i comandi rsync insegnati in qualsiasi tutorial funzioneranno bene per la maggior parte delle situazioni generali. Tuttavia, supponiamo di dover eseguire il backup di una quantità molto grande di dati. Qualcosa come una directory con 2.000 sottodirectory, ciascuna contenente da 50 GB a 700 GB di dati. L'esecuzione di rsync su questa directory potrebbe richiedere un'enorme quantità di tempo, in particolare se stai utilizzando l'opzione di checksum, che preferisco.
È probabile che le prestazioni ne risentano se si tenta di sincronizzare grandi quantità di dati o di sincronizzare connessioni di rete lente. Lascia che ti mostri alcuni metodi che utilizzo per garantire buone prestazioni e affidabilità.
Risincronizzazione avanzata
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
Una delle prime righe che appare durante l'esecuzione di rsync è:"invio dell'elenco di file incrementali". Se esegui una ricerca per questa riga, vedrai molte domande che fanno cose come:perché ci vuole un'eternità? o perché sembra riagganciare?
Ecco un esempio basato su questo scenario. Supponiamo di avere una directory chiamata /storage di cui desideriamo eseguire il backup su un dispositivo USB esterno montato su /media/WDPassport .
Se vogliamo eseguire il backup di /storage su un'unità USB esterna, potremmo usare questo comando:
rsync -cav /storage /media/WDPassport
La c opzione dice a rsync di usare i checksum dei file invece dei timestamp per determinare i file modificati, e questo di solito richiede più tempo. Per scomporre lo /spazio di archiviazione directory, sincronizzo per sottodirectory, utilizzando il trova comando. Ecco un esempio:
find /storage -type d -exec rsync -cav {} /media/WDPassport \;
Sembra OK, ma se sono presenti file in /storage directory, non verranno copiati. Quindi, come possiamo sincronizzare i file in /storage ? C'è anche una piccola sfumatura in cui alcune opzioni faranno sì che rsync sincronizzi il . directory, che è la radice della directory di origine; questo significa che sincronizzerà le sottodirectory due volte e non lo vogliamo.
Per farla breve, la soluzione su cui ho optato è una sceneggiatura "doppio incrementale". Questo mi permette di scomporre una directory, ad esempio suddividendo /home nelle home directory dei singoli utenti o nei casi in cui disponi di più directory di grandi dimensioni, come musica o foto di famiglia.
Ecco un esempio del mio script:
HOMES="alan"
DRIVE="/media/WDPassport"
for HOME in $HOMES; do
cd /home/$HOME
rsync -cdlptgov --delete . /$DRIVE/$HOME
find . -maxdepth 1 -type d -not -name "." -exec rsync -crlptgov --delete {} /$DRIVE/$HOME \;
done
Il primo comando rsync copia i file e le directory che trova nella directory di origine. Tuttavia, lascia le directory vuote in modo da poterle scorrere usando trova comando. Questo viene fatto passando il d argomento, che dice a rsync di non ricorrere alla directory.
-d, --dirs transfer directories without recursing
Il trovare il comando quindi passa ciascuna directory a rsync individualmente. Rsync quindi copia il contenuto delle directory. Questo viene fatto passando la r argomento, che dice a rsync di ricorrere alla directory.
-r, --recursive recurse into directories
Ciò mantiene il file di incremento utilizzato da rsync a una dimensione gestibile.
La maggior parte dei tutorial di rsync utilizza la a (o archivia ) argomentazione per comodità. Questo è in realtà un argomento composto.
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
Gli altri argomenti che passo sarebbero stati inclusi nella a; quelli sono l , p , t , g e o .
-l, --links copy symlinks as symlinks
-p, --perms preserve permissions
-t, --times preserve modification times
-g, --group preserve group
-o, --owner preserve owner (super-user only)
Il --elimina l'opzione dice a rsync di rimuovere tutti i file sulla destinazione che non esistono più nell'origine. In questo modo, il risultato è una duplicazione esatta. Puoi anche aggiungere un'esclusione per il .Cestino directory o forse il .DS_Store file creati da MacOS.
-not -name ".Trash*" -not -name ".DS_Store"
Fai attenzione
Un'ultima raccomandazione:rsync può essere un comando distruttivo. Fortunatamente, i suoi creatori premurosi hanno fornito la possibilità di fare "corse a secco". Se includiamo il n opzione, rsync visualizzerà l'output previsto senza scrivere alcun dato.
rsync -cdlptgovn --delete . /$DRIVE/$HOME
Questo script è scalabile per dimensioni di archiviazione molto grandi e situazioni di latenza elevata o collegamento lento. Sono sicuro che c'è ancora spazio per migliorare, come c'è sempre. Se hai suggerimenti, condividili nei commenti.