GNU/Linux >> Linux Esercitazione >  >> Linux

Come utilizzare Advanced rsync per backup Linux di grandi dimensioni

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.


Linux
  1. Come usare il comando Su in Linux

  2. 5 suggerimenti avanzati di rsync per gli amministratori di sistema Linux

  3. Come usare kdump per l'analisi del crash del kernel Linux

  4. Utilità di backup Linux per backup incrementali

  5. Come posso usare rsync con un file system FAT?

Come utilizzo Cockpit per la gestione del server Linux di casa

Come utilizzare systemd-nspawn per il ripristino del sistema Linux

Come utilizzare Rsync per sincronizzare file nuovi o modificati/modificati in Linux

Come controllare le porte di ascolto in Linux (porte in uso)

Come scegliere uno strumento di backup per Linux

Come utilizzare più comandi in Linux per leggere file di testo di grandi dimensioni