GNU/Linux >> Linux Esercitazione >  >> Linux

RSync:come posso sincronizzare in entrambe le direzioni?

Basta eseguirlo due volte, con la modalità "più recente" (-u o --update flag) più -t (per copiare l'ora di modifica del file), -r (per le cartelle ricorsive) e -v (per un output dettagliato per vedere di cosa si tratta facendo):

rsync -rtuv /path/to/dir_a/* /path/to/dir_b
rsync -rtuv /path/to/dir_b/* /path/to/dir_a

Questo non gestirà le eliminazioni, ma non sono sicuro che ci sia una buona soluzione a questo problema con solo la sincronizzazione periodica.


Conosci Unison File Synchronizer?

Unison è uno strumento di sincronizzazione dei file per Unix e Windows. Consente a due repliche di una raccolta di file e directory di essere memorizzate su host diversi (o dischi diversi sullo stesso host), modificate separatamente e quindi aggiornate propagando le modifiche in ciascuna replica all'altra. ...

Nota anche che è resistente al fallimento:

Unison è resistente al fallimento. È importante lasciare sempre le repliche e le proprie strutture private in uno stato ragionevole, anche in caso di terminazione anomala o errori di comunicazione.


Devi eseguire rsync due volte e consiglio di eseguirlo con -au :

rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source

-a (a per archivio) è una scorciatoia per -rlptgoD :

  • -r Ricorsi nelle sottodirectory
  • -l Sincronizza anche i link simbolici
  • -p Sincronizza anche i permessi dei file
  • -t Sincronizza anche i tempi di modifica dei file
  • -g Sincronizza anche i gruppi di file
  • -o Sincronizza anche il proprietario del file
  • -D Sincronizza anche file speciali (non normali/meta)

Fondamentalmente ogni volta che vuoi creare una copia identica uno a uno usando rsync , dovresti sempre usare -a poiché questo è ciò che la maggior parte degli utenti si aspetta che accada quando parlano di "sincronizzazione ". Altre risposte qui sembrano trascurare il fatto che a volte il contenuto di un file rimane invariato ma il suo proprietario potrebbe essere cambiato o le sue autorizzazioni di accesso potrebbero essere cambiate e in tal caso rsync non sincronizzerebbe il file che potrebbe essere fatale.

Ma hai anche bisogno di -u come dice rsync lasciare completamente da parte qualsiasi file/cartella, nel caso in cui esista già nella destinazione e abbia una data di ultima modifica più recente. Senza -u rsync si sincronizzerebbe indipendentemente dal fatto che un file/cartella sia più recente o meno.

Tieni presente che questa soluzione non è in grado di gestire i file eliminati. La gestione delle eliminazioni non è facilmente possibile in quanto considera la seguente situazione:un file è stato eliminato alla fonte, ora come deve rsync sapere se quel file una volta esisteva ed è stato cancellato (in tal caso deve essere cancellato anche alla destinazione) o se non è mai esistito alla fonte (in tal caso deve essere copiato dalla destinazione). Queste due situazioni sembrano identiche a rsync quindi non può sapere come reagire correttamente. Non aiuterà la sincronizzazione al contrario in quanto ciò può portare alla stessa situazione:un file esiste all'origine ma non alla destinazione. Come mai? Non è mai esistito nella destinazione o è stato eliminato? Entrambi i casi sembrano identici a rsync .

Gli strumenti di sincronizzazione in grado di sincronizzare in modo affidabile i file eliminati di solito gestiscono un registro di sincronizzazione su tutte le operazioni di sincronizzazione passate. Se quel registro rivela che una volta c'era un file ed è stato sincronizzato ma ora manca, è chiaro che è stato eliminato. Se non è mai esistito un file di questo tipo in base al registro, deve essere sincronizzato. Memorizzando tutte le voci di registro con timestamp, è anche possibile che un file eliminato ritorni e venga eliminato più volte, ma lo strumento di sincronizzazione saprà sempre cosa fare e il risultato è sempre corretto. rsync non ha tale registro, si basa solo sullo stato del file corrente di due lati dell'operazione.

Puoi comunque crearti un comando di sincronizzazione usando rsync e un po 'di scripting della shell POSIX che si avvicina già molto a uno strumento di sincronizzazione come descritto sopra. Dato che anch'io avevo bisogno di uno strumento del genere, ecco una risposta su StackOverflow che ti guida attraverso la creazione di tale script.


Linux
  1. Come pianificare un comando Rsync?

  2. Sincronizzare le directory in entrambe le direzioni con Rsync?

  3. Utilizzo di rsync per sincronizzare i file

  4. Come copiare un file in modo transazionale?

  5. Come sincronizzare file/cartelle da una data specifica in avanti?

Come creare un file in Linux

Come creare file Tar Gz

Come decomprimere (aprire) il file Gz

Come collegare simbolicamente un file in Linux

Come utilizzare Rsync per copiare/sincronizzare file tra server

Come fare eco in un file