17Aug
Il protocollo rsync può essere abbastanza semplice da utilizzare per normali processi di backup / sincronizzazione, ma alcune delle sue funzionalità più avanzate potrebbero sorprendervi. In questo articolo, mostreremo come anche i più grandi accaparratori di dati e gli appassionati di backup possono brandire rsync come un'unica soluzione per tutte le loro esigenze di ridondanza dei dati. Avviso
: Geek avanzati Solo
Se sei seduto lì a pensare "Che diavolo è rsync?" O "Uso solo rsync per compiti davvero semplici", potresti voler controllare il nostro precedente articolo su come usare rsync per il backupi tuoi dati su Linux, che forniscono un'introduzione a rsync, ti guidano attraverso l'installazione e mostrano le sue funzioni più basilari. Una volta che hai una conoscenza approfondita di come usare rsync( onestamente, non è così complesso) e stai a tuo agio con un terminale Linux, sei pronto per passare a questa guida avanzata.
Esecuzione di rsync su Windows
Per prima cosa, prendiamo i nostri lettori di Windows sulla stessa pagina dei nostri guru di Linux. Sebbene rsync sia costruito per funzionare su sistemi Unix, non c'è ragione per cui non si dovrebbe essere in grado di usarlo altrettanto facilmente su Windows. Cygwin produce una meravigliosa API Linux che possiamo usare per eseguire rsync, quindi vai al loro sito Web e scarica la versione a 32 o 64 bit, a seconda del tuo computer.
L'installazione è immediata;è possibile mantenere tutte le opzioni ai valori predefiniti fino a quando non si arriva alla schermata "Seleziona pacchetti".
Ora devi fare gli stessi passi per Vim e SSH, ma i pacchetti appariranno un po 'diversi quando andrai a selezionarli, quindi ecco alcuni screenshot:
Installazione di Vim:
Installazione di SSH:
Dopo che haiselezionato questi tre pacchetti, continua a fare clic su Avanti fino a quando non hai terminato l'installazione. Quindi è possibile aprire Cygwin facendo clic sull'icona che il programma di installazione ha posizionato sul desktop. Comandi rsync
:
semplice e avanzato Ora che gli utenti di Windows si trovano sulla stessa pagina, diamo un'occhiata a un semplice comando rsync e mostriamo come l'uso di alcuni switch avanzati può renderlo rapidamente complesso.
Supponiamo che tu abbia un gruppo di file di cui è necessario eseguire il backup, chi non lo fa in questi giorni? Si collega il disco rigido portatile in modo da poter eseguire il backup dei file del computer e inviare il seguente comando:
rsync -a /home/geek/files/ /mnt/usb/files/
Oppure, il modo in cui apparirebbe su un computer Windows con Cygwin:
rsync -a /cygdrive/c/files/ /cygdrive/e/files/
Abbastanza semplice, e inquel punto non c'è davvero bisogno di usare rsync, dato che puoi semplicemente trascinare e rilasciare i file. Tuttavia, se l'altro disco rigido ha già alcuni dei file e ha solo bisogno delle versioni aggiornate più i file che sono stati creati dall'ultima sincronizzazione, questo comando è utile perché invia solo i nuovi dati sul disco rigido. Con file di grandi dimensioni e in particolare il trasferimento di file su Internet, è un grosso problema.
Eseguire il backup dei file su un disco rigido esterno e tenere il disco rigido nella stessa posizione del computer è una pessima idea, quindi diamo un'occhiata a ciò che sarebbe necessario per iniziare a inviare i file su Internet a un altro computer(uno che hai affittato, un membro di famiglia, ecc.).
rsync -av --delete -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/
Il comando precedente invia i file a un altro computer con un indirizzo IP 10.1.1.1.Cancellerebbe file estranei dalla destinazione che non esistono più nella directory di origine, genererà i nomi dei file che vengono trasferiti così da avere un'idea di cosa sta succedendo e tunnel rsync attraverso SSH sulla porta 12345.
The -a -v -e -- Gli interruttori di eliminazione sono alcuni dei più basilari e comunemente usati;dovresti già sapere molto su di loro se stai leggendo questo tutorial. Andiamo su alcuni altri switch che a volte vengono ignorati ma incredibilmente utili:
--progress - Questa opzione ci consente di vedere lo stato del trasferimento di ciascun file.È particolarmente utile quando si trasferiscono file di grandi dimensioni su Internet, ma è possibile produrre una quantità insignificante di informazioni quando si trasferiscono piccoli file su una rete veloce.
È in corso un comando rsync con l'opzione --progress come backup:
--partial - Questo è un altro switch particolarmente utile quando si trasferiscono file di grandi dimensioni su Internet. Se rsync viene interrotto per qualsiasi motivo nel mezzo di un trasferimento di file, il file parzialmente trasferito viene mantenuto nella directory di destinazione e il trasferimento riprende dal punto in cui era stato interrotto una volta eseguito nuovamente il comando rsync. Quando si trasferiscono file di grandi dimensioni su Internet( ad esempio, un paio di gigabyte), non c'è niente di peggio che avere una seconda interruzione di Internet, una schermata blu o un errore umano che fa inciampare nel trasferimento dei file e deve ricominciare tutto da capo.
-P - questo switch combina --progress e --partial, quindi usalo invece e renderà il tuo comando rsync un po 'più ordinato.
-z o --compress - Questa opzione consente a rsync di comprimere i dati del file durante il trasferimento, riducendo la quantità di dati che devono essere inviati alla destinazione. In realtà è un interruttore abbastanza comune, ma è tutt'altro che essenziale, ma solo a vantaggio dei trasferimenti tra connessioni lente, e non fa nulla per i seguenti tipi di file: 7z, avi, bz2, deb, g, z iso, jpeg, jpg,mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.
-h o --human-readable - Se si sta usando l'opzione --progress, si vorrà sicuramente usare anche questo. Cioè, a meno che non ti piaccia convertire i byte in megabyte al volo. L'opzione -h converte tutti i numeri emessi in un formato leggibile dall'uomo, in modo da poter effettivamente dare un senso alla quantità di dati trasferiti.
-n o --dry-run: questa opzione è essenziale per sapere quando si scrive per la prima volta lo script rsync e si esegue il test. Esegue una corsa di prova ma in realtà non apporta alcuna modifica - le modifiche potrebbero essere ancora eseguite normalmente, in modo da poter leggere tutto e assicurarsi che sia ok prima di far girare lo script in produzione.
-R o --relative - Questa opzione deve essere utilizzata se la directory di destinazione non esiste già.Utilizzeremo questa opzione più avanti in questa guida in modo che possiamo creare directory sul computer di destinazione con data e ora nei nomi delle cartelle.
--exclude-from - Questo parametro viene utilizzato per collegarsi a un elenco di esclusioni che contiene percorsi di directory di cui non si desidera eseguire il backup. Ha solo bisogno di un semplice file di testo con una directory o un percorso file su ogni riga.
--include-from - Simile a --exclude-from, ma si collega a un file che contiene directory e percorsi di file dei dati di cui si desidera eseguire il backup.
--stats - Non è davvero un passaggio importante in alcun modo, ma se sei un sysadmin, può essere utile conoscere le statistiche dettagliate di ogni backup, solo così puoi monitorare la quantità di traffico che viene inviata sulla tua rete e tale.
--log-file: consente di inviare l'output rsync a un file di registro. Lo raccomandiamo sicuramente per i backup automatici in cui non siete lì a leggere l'output da soli. Fornisci sempre una volta i file di registro nel tuo tempo libero per assicurarti che tutto funzioni correttamente. Inoltre, è un passaggio cruciale per un amministratore di sistema da utilizzare, quindi non ti rimane da chiedersi come i tuoi backup siano falliti mentre hai lasciato il tirocinante in carica.
Diamo un'occhiata al nostro comando rsync ora che abbiamo aggiunto qualche altro switch:
rsync -avzhP --delete --stats --log-file = /home/geek/rsynclogs/ backup.log --exclude-da '/home/geek/ exclude.txt'-e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/
Il comando è ancora abbastanza semplice, ma non abbiamo ancora creato una soluzione di backup decente. Anche se i nostri file sono ora in due diverse posizioni fisiche, questo backup non fa nulla per proteggerci da una delle principali cause di perdita di dati: errore umano. Backup di istantanee
Se si elimina accidentalmente un file, un virus corrompe i file o accade qualcos'altro in cui i file vengono alterati in modo indesiderato e quindi si esegue lo script di backup rsync, i dati di backup vengono sovrascritti con le modifiche indesiderate. Quando si verifica una cosa del genere( non se, ma quando), la soluzione di backup non ha fatto nulla per proteggerti dalla perdita di dati.
Il creatore di rsync lo ha realizzato e ha aggiunto gli argomenti --backup e --backup-dir in modo che gli utenti possano eseguire backup differenziali. Il primo esempio sul sito Web di rsync mostra uno script in cui viene eseguito un backup completo ogni sette giorni, quindi le modifiche a tali file vengono eseguite quotidianamente in directory separate. Il problema con questo metodo è che per recuperare i tuoi file, devi recuperarli in modo efficace sette volte diverse. Inoltre, molti geek eseguono i loro backup più volte al giorno, quindi puoi facilmente avere oltre 20 diverse directory di backup in un dato momento. Il recupero dei tuoi file non è solo un problema, ma anche la semplice ricerca dei dati di backup può richiedere molto tempo: dovresti sapere l'ultima volta che un file è stato modificato per trovare la sua copia di backup più recente. Oltre a tutto ciò, è inefficiente eseguire solo backup incrementali settimanali( o anche meno frequenti in alcuni casi).
Backup di istantanee in soccorso! I backup di istantanee non sono altro che backup incrementali, ma utilizzano i collegamenti fisici per mantenere la struttura dei file dell'origine originale. All'inizio, potrebbe essere difficile avvolgere la testa, quindi diamo un'occhiata a un esempio.
Fingiamo di avere uno script di backup in esecuzione che esegue automaticamente il backup dei nostri dati ogni due ore. Ogni volta che rsync esegue questa operazione, denomina ogni backup nel formato di: Backup-mese-giorno-anno-tempo.
Quindi, alla fine di un giorno tipico, avremmo una lista di cartelle nella nostra directory di destinazione come questa:
Quando attraversi una di queste directory, vedresti ogni file dalla directory di origine esattamente com'era in quel momento. Tuttavia, non ci sarebbero duplicati in nessuna delle due directory.rsync lo realizza con l'uso del collegamento hard tramite l'argomento --link-dest = DIR.
Naturalmente, per avere questi nomi di directory piacevolmente datati, dovremo rinforzare un po 'il nostro script rsync. Diamo un'occhiata a cosa servirebbe per realizzare una soluzione di backup come questa, e quindi spiegheremo lo script in modo più dettagliato:
#!/bin/ bash
#copy old time.txt to time2.txt
si |cp ~ /backup/ time.txt ~ /backup/ time2.txt
#overwrite vecchio file time.txt con nuovo tempo
echo `date +"% F-% I% p "` & gt;~ /backup/ time.txt
#make il file di registro
echo "" & gt;~ /backup/ rsync-`date + "% F-% I% p" `.log
comando #rsync
rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --stats --log-file = ~ /backup/ rsync-`date + "% F-% I% p" `.log --exclude-from '~ / exclude.txt' --link-dest = /home/geek2/files/` cat ~ /backup/time2.txt` -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/ `date +"% F-% I% p "` /
# non dimenticare di scp il file di log e metterlo conbackup
scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/ `cat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`.log
chesarebbe uno script rsync tipico di istantanee. Nel caso in cui ti abbiamo perso da qualche parte, analizziamolo pezzo per pezzo:
La prima riga del nostro script copia il contenuto di time.txt in time2.txt. Il pipe yes è per confermare che vogliamo sovrascrivere il file. Successivamente, prendiamo l'ora corrente e la inseriamo in time.txt. Questi file torneranno utili in seguito.
La riga successiva crea il file di log rsync, nominandolo rsync-date.log( dove data è la data e l'ora effettive).
Ora, il complesso comando rsync di cui ti abbiamo avvertito:
-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest - Justgli interruttori di cui abbiamo parlato prima;scorrere verso l'alto se è necessario un aggiornamento.
--chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - Queste sono le autorizzazioni per la directory di destinazione. Dato che stiamo creando questa directory nel mezzo del nostro script rsync, dobbiamo specificare le autorizzazioni in modo che il nostro utente possa scrivere file su di esso.
Uso dei comandi data e cat
Esamineremo ogni utilizzo dei comandi date e cat all'interno del comando rsync, nell'ordine in cui si verificano. Nota: siamo consapevoli che ci sono altri modi per realizzare questa funzionalità, specialmente con l'uso di dichiarare variabili, ma per lo scopo di questa guida, abbiamo deciso di utilizzare questo metodo.
Il file di registro è specificato come:
~ /backup/ rsync-`date + "% F-% I% p" `.log
In alternativa, è possibile averlo specificato come:
~ /backup/ rsync-`cat ~ /backup/ time.txt`.log
In entrambi i casi, il comando --log-file dovrebbe essere in grado di trovare il file di log datato precedentemente creato e scrivere su di esso.
Il file di destinazione del collegamento è specificato come:
--link-dest = /home/geek2/files/ `cat ~ /backup/ time2.txt`
Ciò significa che al comando --link-dest viene assegnata la directory del backup precedente. Se eseguiamo i backup ogni due ore e sono le 4:00 PM al momento dell'esecuzione di questo script, il comando --link-dest cerca la directory creata alle 14:00 e trasferisce solo i dati che sono stati modificati da allora( se del caso).
Per reiterare, ecco perché time.txt viene copiato in time2.txt all'inizio dello script, quindi il comando --link-dest può fare riferimento a quell'ora successiva.
La directory di destinazione è specificata come:
[email protected]: /home/geek2/files/ `date +"% F-% I% p "`
Questo comando inserisce semplicemente i file di origine in una directory che ha un titolo della data e ora correnti.
Infine, ci assicuriamo che una copia del file di log sia posizionata all'interno del backup.
scp -P 12345 ~ /backup/ rsync-`cat ~ /backup/ time.txt`.log [email protected]: /home/geek2/files/ `cat ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`.log
Utilizziamocopia protetta sulla porta 12345 per prendere il log rsync e posizionarlo nella directory corretta. Per selezionare il file di registro corretto e assicurarsi che finisca nel posto giusto, il file time.txt deve essere referenziato tramite il comando cat. Se ti stai chiedendo perché abbiamo deciso di cat time.txt invece di usare semplicemente il comando date, è perché molto tempo sarebbe potuto accadere mentre il comando rsync era in esecuzione, quindi per essere sicuri di avere il momento giusto, siamo solo catil documento di testo che abbiamo creato in precedenza.
Automation
Usa Cron su Linux o Task Scheduler su Windows per automatizzare lo script rsync. Una cosa a cui devi fare attenzione è assicurarti di terminare qualsiasi processo rsync attualmente in esecuzione prima di continuarne uno nuovo. L'Utilità di pianificazione sembra chiudere automaticamente le istanze già in esecuzione, ma per Linux è necessario essere un po 'più creativi.
La maggior parte delle distribuzioni Linux può usare il comando pkill, quindi assicurati di aggiungere quanto segue all'inizio dello script rsync:
pkill -9 rsync
Codifica
No, non abbiamo ancora finito. Finalmente abbiamo una soluzione di backup fantastica( e gratuita!), Ma tutti i nostri file sono ancora suscettibili di furto. Spero che tu stia salvando i tuoi file in qualche posto a centinaia di chilometri di distanza. Non importa quanto sia sicuro quel posto lontano, il furto e l'hacking possono sempre essere problemi.
Nei nostri esempi, abbiamo tunnelato tutto il nostro traffico rsync tramite SSH, quindi significa che tutti i nostri file sono crittografati mentre sono in transito verso la loro destinazione. Tuttavia, dobbiamo assicurarci che la destinazione sia altrettanto sicura. Tieni presente che rsync crittografa solo i dati mentre vengono trasferiti, ma i file vengono aperti una volta raggiunta la destinazione.
Una delle migliori caratteristiche di rsync è che trasferisce solo le modifiche in ogni file. Se hai tutti i tuoi file crittografati e fai una piccola modifica, l'intero file dovrà essere ritrasmesso come risultato della crittografia che ha completamente randomizzato tutti i dati dopo ogni modifica.
Per questo motivo, è meglio / più semplice utilizzare un tipo di crittografia del disco, come BitLocker per Windows o dm-crypt per Linux. In questo modo, i tuoi dati sono protetti in caso di furto, ma i file possono essere trasferiti con rsync e la tua crittografia non ne ostacolerà le prestazioni. Ci sono altre opzioni disponibili che funzionano in modo simile a rsync o addirittura ne implementano alcune forme, come Duplicity, ma mancano alcune delle funzionalità che rsync ha da offrire.
Dopo aver impostato i backup dell'istantanea in una posizione fuori sede e crittografato i dischi rigidi di origine e di destinazione, datti una pacca sulla parte posteriore per padroneggiare rsync e implementando la soluzione di backup dei dati più infallibile possibile.