Due server, una VPN, una directory che deve esistere in entrambi i posti e un comando facile da eseguire e difficile da annullare. Prima di digitarlo, decidi quale copia è autorevole, perché ogni domanda rsync che segue dipende da quella risposta. Una replica a senso unico, una cartella di lavoro condivisa e un archivio con versioni richiedono regole diverse per modifiche ed eliminazioni. Il tunnel fornisce il percorso e non ha opinioni su nessuna di esse.

Decidi quale copia vince prima di digitare un comando

Scrivi la direzione in una frase, inclusi il nome host e il percorso su ciascun lato, e falla approvare da chi possiede i dati. In questa guida l'origine è /srv/publish/ e la destinazione è un account su fileserver.example che può scrivere solo in /srv/mirror/.

Conferma i fatti di trasporto prima della copia: la chiave host SSH è verificata, l'account di destinazione può scrivere nell'area di replica e in nient'altro, ed entrambi gli host hanno versioni di rsync compatibili. Queste precondizioni impediscono che un piccolo errore di pianificazione diventi un incidente di permessi. Ti dicono anche quale account comparirà nei log della destinazione quando qualcosa va storto.

Visualizza la copia in anteprima e leggi l'elenco dettagliato

Esegui prima la copia con l'opzione di anteprima e conserva l'output. Le modifiche dettagliate ti dicono cosa accadrebbe a ogni percorso, il che è molto più utile di un riepilogo di completamento a posteriori. Conserva l'output nel registro delle modifiche così l'esecuzione successiva ha qualcosa con cui confrontarsi.

rsync -rt --dry-run --itemize-changes -e ssh -- /srv/publish/ [email protected]:/srv/mirror/

La barra finale conta. Sull'origine indica il contenuto di quella directory, mentre ometterla aggiunge un livello di directory con il nome dell'origine. Il manuale di rsync documenta entrambe le forme insieme alle opzioni di conservazione, e l'insieme di opzioni che ti serve dipende dai dati e non dall'abitudine.

Leggi ogni riga rispetto alla destinazione che intendevi. Rimuovere l'opzione di anteprima esegue la copia e può sovrascrivere file, e senza un'opzione di eliminazione i file in più già presenti nella destinazione restano semplicemente dove sono. È il valore predefinito sicuro solo se hai davvero deciso che i file obsoleti lasciati indietro sono accettabili. Se la risposta è no, la decisione di eliminazione più sotto è quella da prendere, non un'opzione extra da spargere in questo comando.

Poi decidi se le eliminazioni viaggiano

Rendere la destinazione uno specchio è una seconda decisione, non un affinamento della prima. Visualizzala separatamente, con l'opzione di eliminazione aggiunta e nient'altro cambiato, così la differenza nell'elenco appartiene interamente a quella decisione.

rsync -rt --delete --dry-run --itemize-changes -e ssh -- /srv/publish/ [email protected]:/srv/mirror/

Le eliminazioni rimuovono i file superflui sul lato ricevente entro l'ambito sincronizzato, ed è per questo che un percorso di origine sbagliato, una directory non montata o un filtro che esclude più del previsto possono far sembrare un'esecuzione distruttiva uno specchio pulito. L'elenco di anteprima è l'unico posto in cui quella differenza diventa visibile prima di diventare costosa. Tieni una copia di ripristino indipendente dove i dati lo giustificano, e ricorda che uno specchio riproduce fedelmente un'eliminazione accidentale invece di conservare la cronologia.

Un'anteprima non blocca nulla. Le persone modificano i file tra la prova e l'esecuzione reale, e i filesystem hanno opinioni proprie, quindi l'esecuzione che approvi e quella che viene eseguita non sono la stessa operazione a meno che entrambi gli alberi siano fermi.

Due processi a senso unico non fanno una sincronizzazione bidirezionale

Eseguire lo stesso comando in entrambe le direzioni è il modo più comune di perdere dati in questo scenario. Ogni direzione tratta l'altro lato come destinazione e sovrascrive allegramente contenuti più recenti, e le eliminazioni si rispecchiano nell'ordine in cui scatta la pianificazione.

Se gli utenti devono modificare entrambe le copie, è un'altra decisione di prodotto: gestione dei conflitti, tracciamento delle eliminazioni e uno strumento progettato per quel modello. Approssimarla con l'ordine della pianificazione è il modo in cui una cartella condivisa accumula due versioni di ogni documento che nessuno riesce a riconciliare. Decidilo esplicitamente invece di approssimarlo con due voci di cron e speranza.

Automatizza solo dopo aver scritto la politica

Un processo pianificato dovrebbe portare con sé la direzione, i percorsi, la politica sui metadati e la decisione di eliminazione approvata. Metti questi cinque fatti nel file del processo stesso, non in una pagina wiki che il prossimo amministratore potrebbe non leggere mai. Impedisci esecuzioni sovrapposte, perché due copie che scrivono lo stesso albero contemporaneamente producono uno stato che nessuna delle due intendeva.

Quando l'origine è un database attivo o un altro dataset composto da più file, crea prima un'esportazione coerente con l'applicazione o uno snapshot coordinato. Una scansione ricorsiva dei file non è una transazione, e una copia di un dataset in cambiamento non è coerente.

Registra completamenti ed errori, e controlla il dataset nella destinazione invece del solo codice di uscita. Ripristinare la VPN dopo un'interruzione ripristina la connettività; non dice nulla sul fatto che l'ultima copia sia finita o che le modifiche in conflitto siano mai state risolte.

Articoli correlati