Come sincronizzare la cartella principale tra più computer?


117

Ho tre computer a casa e vorrei avere l' /home/albero delle cartelle sincronizzato tra i tre.
Qualsiasi file / cartella (eccetto quelli nascosti) che vengono modificati / aggiunti / rimossi in uno dei tre computer viene aggiornato negli altri due.

È rsyncabbastanza per fare questo? e come?


9
Il problema con la maggior parte degli strumenti di "sincronizzazione", (incluso rsync se ricordo bene), è che non hanno una nozione di azioni dell'utente. Quindi, se elimini un file sul computer X, lo strumento non sa se (a) hai effettivamente eliminato il file sul computer X, oppure (b) che hai aggiunto quel file sul computer Y. La maggior parte degli strumenti assumerà (b), quindi dopo la sincronizzazione aggiungeranno di nuovo il file sul computer X (invece di eliminarlo sul computer Y).
Rabarberski,

5
@Rabarberski molti strumenti di sincronizzazione (tra cui Unison o Syncthing) mantengono un database con riferimenti ai dati esistenti (per questo motivo). Non ti aiuterà quando sincronizzi nuove cartelle per la prima volta, ma possono anche eliminare i file per te (automaticamente). Il vero problema con la maggior parte degli strumenti di sincronizzazione è quando i file sono stati modificati in due posizioni prima che si verifichi la sincronizzazione successiva: in questo caso di conflitto in genere è necessario eseguire un'unione manuale o sostituire con la versione più recente.
Chris

2
Sincronizzare quando le modifiche non possono essere copiate istantaneamente su altre macchine è davvero complicato e non ho mai visto alcun programma farlo alla perfezione, quindi preparati ad alcuni bug, conflitti e riapparire dei file. Consiglierei di sincronizzare solo alcune cartelle specifiche che sai saranno gestibili dal programma di sincronizzazione.
Elzo,

Risposte:


90

Ecco un elenco di cose che potrebbero potenzialmente risolvere questo problema, ognuna bilancia i compromessi che devi fare in modo diverso, quindi dovrai fare le tue scelte e provare le cose da solo:

  • Unison - come menzionato da altri, questo viene eseguito manualmente, ma è molto veloce, affidabile ed efficace. Richiede che entrambe le macchine sincronizzate siano accese contemporaneamente. Ha una bella interfaccia utente che ti consente di affrontare i conflitti quasi inevitabili e tiene traccia e propaga correttamente le eliminazioni. L'app / pacchetto grafico si chiama unison-gtk.

  • OwnCloud : l'archiviazione cloud viene eseguita sul tuo server. Avrai bisogno di una macchina per lasciarla accesa. Richiede una ragionevole quantità di installazione. Esegue un server Web Apache 2 completo e un database SqlLite o MySQL sul server. Funziona in modo simile a Dropbox con un client desktop, ma il server è sotto il tuo controllo. modifica: OwnCloud ha recentemente subito alcuni cambiamenti nel modo in cui viene eseguito il progetto e ora ha una nuova versione completamente open source (ovvero nessuna edizione 'enterprise' di tipo open source) sotto le spoglie di NextCloud , (vedi questa intervista su YouTube con lo sviluppatore OwnCloud originale per ulteriori dettagli).

  • SparkleShare - usa git per mantenere sincronizzati i file. Secondo la homepage: buono per molti file più piccoli, non buono per molti file di grandi dimensioni come la raccolta di musica o foto.

  • Seafile : fornisce un componente server che è possibile installare su un computer locale. Seafile utilizza un modello di dati simile a git per tenere traccia delle modifiche. Fornisce client di sincronizzazione per desktop, tablet e smartphone. Un post sul blog che descrive l'installazione è disponibile all'indirizzo http://openswitch.org/blog/2013/07/18/installing-and-configuring-seafile-on-ubuntu-12-dot-04/

  • Osync - "... strumento di sincronizzazione dei file bidirezionale scritto in bash e basato su rsync. Funziona su directory locali e / o remote tramite tunnel ssh. È principalmente destinato a essere lanciato come cron task" (testo dal sito Web)

  • PowerFolder - progetto GPL v2 basato su Java. Il sito Web principale offre offerte commerciali, quindi non è chiaro come utilizzare il file .jar fornito.

  • Rsync : veloce ed efficace e in circolazione da decenni, tuttavia non mantiene una cronologia, quindi devi scegliere una direzione per decidere se un file è nuovo o eliminato. Sono disponibili strumenti grafici come gwRsync .

  • Lsyncd : monitora cartelle / file per attivare la replica rsync

  • dvcs-autosync - scritto in python, usa git per archiviare e condividere le modifiche tra macchine e XMPP per comunicare le modifiche.

  • git-annex - strumento da riga di comando per lo shunting dei file, basato su git. C'è una procedura illustrativa qui: http://git-annex.branchable.com/walkthrough/

  • Tonido - software gratuito. Fornisce un'app desktop che condividerà i file con altri dispositivi. Fornisci anche offerte cloud commerciali e il computer plug TonidoPlug.

  • BitTorrent Sync (freeware) - sincronizzazione file peer-to-peer basata su BitTorrent. Non ne so molto perché non lo userò perché non è open source e non mi fido di esso per mantenere i miei dati all'interno della mia LAN, sentiti libero di modificare questa risposta con migliori informazioni / esperienze reali.

  • SyncThing - Sviluppato come alternativa open source a BitTorrent Sync. Manca attualmente alcune delle funzionalità avanzate di BitTorrent Sync, come i peer non attendibili. È in fase di sviluppo attivo.

  • I servizi di hosting commerciale come dropbox, ubuntu one, google drive, apple iCloud sono tutti rapidi, economici e convenienti, tuttavia richiedono tutti la fiducia di un'azienda con tutti i tuoi dati e una connessione Internet ragionevolmente veloce.

  • Git / subversion - Usa direttamente un sistema di controllo del codice sorgente. Completamente manuale e può essere un approccio un po 'complesso ma popolare con alcuni utenti che hanno familiarità con questi sistemi utilizzandoli come strumenti di programmazione.

  • CloudFS : sincronizza un intero file system, basato sulla tecnologia cluster

  • Montaggio NFS: fondamentalmente la tua casa vive su un solo computer e accedi alla rete, non va bene per i laptop che porti con te. Maggiori informazioni: http://www.linuxjournal.com/article/4880


Fattori da considerare nel prendere la tua decisione:

  • Server centrale: alcune soluzioni richiedono che una macchina sia sempre accesa (o almeno quando è necessario eseguire la sincronizzazione) per la sincronizzazione con altre macchine. Potrebbe trattarsi di una delle macchine esistenti o di una macchina separata come un NAS. Fai attenzione alle maggiori bollette.

  • Automatico / Manuale / Pianificato - Il modo migliore per evitare di dover risolvere i conflitti in cui qualcosa è cambiato su più di una macchina è avere un programma su ogni macchina che controlla le modifiche e si sincronizza immediatamente, in questo modo riduci l'opportunità di finire con più versioni. Con i processi manuali devi sempre ricordare di eseguire la sincronizzazione.

  • Accesso remoto: vuoi sincronizzarti lontano dalla tua LAN (aka casa), pensa alle implicazioni di sicurezza di questo.

  • Sicurezza: i tuoi dati lasciano la tua rete crittografata o meno, quanto è sicuro il trasferimento tra macchine. Cosa succede se qualcuno acquisisce i tuoi dati in movimento e in seguito si rileva che la crittografia presenta dei difetti? Chi controlla il server che conserva i tuoi dati, i dati sono crittografati, puoi fidarti di terze parti? Devi fare buchi nel tuo router per ottenere l'accesso remoto. Per quanto tempo restano attivi i file "cancellati" e i relativi metadati sui dispositivi sincronizzati e sul server centrale. Stai eseguendo la sincronizzazione tra archiviazione crittografata e non crittografata?

  • Spostamento di cartelle di grandi dimensioni: le soluzioni che ho provato hanno tutte il problema che quando si sposta / rinomina un file o una cartella la sincronizzazione non lo capisce e lo carica di nuovo come nuovo, quindi elimina la vecchia copia. Per favore aiutatemi contrassegnando tutte le soluzioni sopra che sono in grado di affrontare questo (sospetto che le soluzioni basate su git facciano come git non soffre di questo a causa dell'indirizzamento basato sul contenuto che usa ma non lo so per certo come ho li ho usati).

  • Capacità del disco

  • Backup: la sincronizzazione non è un backup. Elimina un file importante per errore e molti dei precedenti elimineranno allegramente tutte le altre copie. Consiglio di leggere il pezzo di Mat Honan sull'essere hackerato per un buon resoconto di cosa può accadere se si mettono tutte le uova digitali in un paniere digitale, per così dire.


Consiglio di non sincronizzare l'intera cartella home, ma di selezionare cartelle specifiche da sincronizzare come Documents/, Pictures/ecc. Ciò eviterà il dolore di essere costretto a gestire i problemi di velocità / prestazioni / spazio su disco della sincronizzazione automatica di tutto. Evita inoltre di mantenere elenchi di esclusione.

Mentre continuo a cercare qualcosa che funzioni personalmente per me, cercherò di mantenere aggiornata questa risposta con informazioni utili. Ho aggregato le informazioni di tutte le altre risposte in una risposta completa.

Riferimenti:

  • LinuxFormat - LXF180 p31 febbraio 2014, "Roundup di archiviazione ospitata"

l'hacking / all /


Ho un server senza accesso root (che è necessario per installare all'unisono, per esempio). Esiste uno script che posso avere sul mio computer client che non deve essere installato sul mio server?
Ben Kushigian,

Ho visto un software chiamato freefilesync ( sourceforge.net/projects/freefilesync ) menzionato alcune volte qua e là. Vale la pena menzionare nella tua lista?
YoungFrog,

28

Unison potrebbe essere un buon candidato:

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.

Fa già sincronizzazioni a 2 vie. Vedi aggiornamento qui sotto.

Ho imparato che ci sono pochissime cose che rsync non può fare e che probabilmente può fornire una soluzione uguale o migliore, ma dovrai aspettare che un esperto di rsync si presenti per quella soluzione.

Aggiornamento: Sì, Unison può sincronizzare più di 2 macchine. Dal loro manuale utente :

Utilizzo di Unison per sincronizzare più di due macchine

Unison è progettato per sincronizzare coppie di repliche. Tuttavia, è possibile utilizzarlo per mantenere sincronizzati gruppi più grandi di macchine eseguendo più sincronizzazioni a coppie.

Se è necessario eseguire questa operazione, il modo più affidabile per impostare le cose è organizzare le macchine in una "topologia a stella", con una macchina designata come "hub" e il resto come "raggi" e con ogni macchina a raggi sincronizzata solo con l'hub. Il grande vantaggio della topologia a stella è che elimina la possibilità di confondere i "conflitti spuri" derivanti dal fatto che Unison mantiene un archivio separato per ogni coppia di host che sincronizza.


Ho delle brutte esperienze all'unisono, per qualche motivo di tanto in tanto invece di aggiungere i nuovi file da altri computer, li ha eliminati mentre altre volte ha funzionato bene.
jhcaiced

1
Suggerisco di modificare l'esempio a / b / c per seguire la raccomandazione nel manuale di non creare loop.
Tim Abell,

Per quanto riguarda il tuo riferimento a rsync. No, non è possibile eseguire in modo affidabile la sincronizzazione bidirezionale. Guardate la seguente risposta da vedere perché all'unisono in grado di gestire un caso che rsync non può: stackoverflow.com/questions/4504357/...
ndemou

19

Che ne dici di mettere i tuoi file in un sistema di controllo versione come SubVersion o git?

Non eseguo la versione della mia intera directory home, ma solo una manciata di contenuti secondari con alcune cose importanti. Ma sto pensando di convertirmi in git poiché sembra essere migliore per questo tipo di lavoro. ( una rapida ricerca ti invierà nella giusta direzione ).

In bocca al lupo


Aggiornamento : Un buon effetto collaterale con git è che è facile avere file specifici per computer, dal momento che devi solo avere un ramo per quel computer (e in git lo ottieni per impostazione predefinita). Quindi non devi avere esattamente gli stessi file in tutti i computer, devono solo essere simili e avere un ramo "principale" comune con le cose che vuoi su tutti i diversi computer.


Yikes. L'idea di utilizzare il controllo versione per la sincronizzazione dei file mi fa davvero strisciare la pelle.
JohnD,

Sì, l'idea è strana ma davvero utile. Pensa a una directory come ~ / bin / per gli script di helper privati, quel tipo di dir è fantastico in un sistema di controllo della versione. Mentre una directory come .kde probabilmente si comporterà male nel sistema di controllo della versione e verrebbe inserita in un elenco ignorato per il file non gestito.
Johan,

Questo è un ottimo modo per mantenere sincronizzati i tuoi file, devi abituarti all'idea di usare "git add" e "git rm" per aggiungere / rimuovere i file ma funziona molto bene.
jhcaiced

Mi piace questa idea perché ho il controllo su quale parte dei file all'interno dell'immondizia che ho in casa verrà condivisa. L'unica domanda è come gestire gli commit. cioè alcuni file dovrebbero andare nel commit iniziale e quindi riflettere le modifiche per mostrare che si basano sul sistema / etc / skel.
ony

Mantenere un paio di rami separati con i tuoi file è davvero conveniente, quando stai cercando di sincronizzare le directory? Certo, funziona, ma non lo consiglierei (g) per questo compito. In genere puoi escludere i file dalla maggior parte degli strumenti di sincronizzazione (per nome, cartella, ecc.) E per quello che stai descrivendo (utilizzandolo solo per alcune importanti sottodirectory), non è davvero utile per quanto riguarda la domanda originale.
Chris

6

Il problema principale quando si tenta di farlo è decidere come unire le modifiche, propagare le eliminazioni e risolvere i conflitti. Questo è difficile da fare in modo completamente automatizzato, soprattutto se hai una configurazione a 3 computer utilizzata da più persone.

Se separi gli utenti, le cose diventano molto più semplici. Poiché un utente non può trovarsi in due posizioni contemporaneamente (e quindi generare conflitti), è possibile quindi impostare un processo rsync da eseguire all'accesso per "ottenere modifiche" e disconnettersi per "inviare modifiche" ... a uno dei computer che sarebbe il padrone ... quindi a questo livello di granularità sincronizzeresti / home / myuser ogni volta piuttosto che l'intero / home /. Un ulteriore perfezionamento (in caso di persone che non si disconnettono) verrebbe eseguito lo script push dopo un breve periodo di inattività.

Ci sono molte altre potenziali soluzioni, ma nessuna che risolva magicamente questo problema per quanto ne so. Il primo passo è probabilmente quello di pensare a come usi le macchine e trovare una politica di sincronizzazione per adattarsi al comportamento dell'utente.



4

Questo non fornirà del tutto una soluzione, ma ti darà un inizio:

Imposta un lavoro cron ogni tanto per risincronizzare i file. Uso un comando come il seguente:

rsync -alhz --stats --progress --exclude-from '/etc/rsync_backup_excludes.conf' / -e ssh user@10.10.0.1:/path/to/home/

Questo userà rsync per copiare solo le modifiche necessarie, non ricopiare tutto ogni volta che il comando viene eseguito.

--stats e --progress sono opzionali e probabilmente dovrebbero essere esclusi dai tuoi script

i contenuti del mio file rsync_backup_excludes.conf sono:

dev/*
proc/*
lost+found/*
mnt/*
sys/*

Anacron si sincronizzerà quando la macchina è accesa, evitando slot mancanti a causa di tempi di inattività.
Tim Abell,

Questo copia l'intera radice locale nella cartella home remota. Non è quello che l'OP ha richiesto, né posso immaginare perché qualcuno lo vorrebbe ...
Cerin

4

Dai un'occhiata a lsyncd

Lsyncd guarda un'interfaccia di monitoraggio eventi di alberi di directory locali (inotify o fsevents). Aggrega e combina gli eventi per alcuni secondi, quindi genera uno (o più) processi per sincronizzare le modifiche. Per impostazione predefinita, questo è rsync. Lsyncd è quindi una soluzione live mirror leggera, relativamente semplice da installare che non richiede nuovi filesystem o blockdevices e non ostacola le prestazioni del filesystem locale.

Rsync + ssh è una configurazione di azione avanzata che utilizza un SSH per agire su file e directory si sposta direttamente sulla destinazione invece di ritrasmettere la destinazione di spostamento sul filo.

La personalizzazione a grana fine può essere ottenuta tramite il file di configurazione. Le configurazioni di azioni personalizzate possono anche essere scritte da zero in livelli a cascata che vanno dagli script della shell al codice scritto nel linguaggio Lua. I giocatori che vanno dagli script della shell al codice scritto nel linguaggio Lua.


2

Dai un'occhiata a dropbox http://www.getdropbox.com/ Cross platform Win / Linux / Mac


3
Grazie, ma no. Ho già provato. Non è quello che sto cercando.
lamcro,

Dropbox è eccezionale e utilizzo i 2 GB gratuiti per la memorizzazione di collegamenti, foto e altri dati non mission-critical tra casa, lavoro e i miei laptop. Non è quello che ti serve in questa situazione, ma secondo me Dropbox ha sicuramente il suo posto.
Matt Cofer,

2

Montare /homeda un computer agli altri due. Automount funziona abbastanza bene per questo.


1

Ubuntu One potrebbe essere quello che stai cercando. Sfortunatamente è ancora in fase beta e non ho esperienza con esso, quindi non sono sicuro che funzioni per te.


Direi che al momento è ancora in forte sviluppo - ci sono aggiornamenti ogni pochi giorni mentre il team di Ubuntu risolve i problemi. Funziona, ma non lo consiglierei su Dropbox.
nagul,

1

Se vuoi anche sincronizzare le configurazioni - gli strumenti sopra menzionati sono totalmente impotenti: le configurazioni sono spesso cambiate e molti file di registro creano conflitti in modo che non possano essere uniti.
La mia inganno è semplice e stupida :) Ho una workstation Master e tutti i file di "~" vengono copiati nel secondo "Slave". Nel momento in cui mi rendo conto di dover modificare qualcosa, lo faccio su Master e Slave rileva questi cambiamenti in sincronia.

Inoltre, alcuni script bash dovrebbero funzionare in modo diverso su questi computer, quindi ho modificato il mio /etc/bash.bashrc:

export OOHOST = Master

Ora, gli script sanno quale host stanno servendo;)


1

Prova dvcs-autosync .

Questo si basa su git, utilizza XMPP per notificare ai client collegati le modifiche ai file e reagisce agli eventi di modifica dei file tramite modifiche agli inode. Quindi viene sempre informato subito dopo la modifica del file, in caso di conflitti si affida ai comprovati metodi di git.

Lo sto usando da un po 'di tempo come sostituto di Dropbox tramite chiavi pubbliche SSH e fa davvero il lavoro.


0

PowerFolder : sincronizzazione di file, cartelle di sincronizzazione, archiviazione remota, backup e condivisione di file privati. Sincronizza il PC di casa e dell'ufficio, condividi foto delle vacanze o lavora insieme su documenti. La tecnologia peer-to-peer sicura di PowerFolder funziona su Internet o in LAN.


0

Le soluzioni alternative che prenderei in considerazione:

  • Dropbox.
    Svantaggi principali: non è gratuito per una quantità ragionevole di dati. Altrimenti funziona perfettamente IMHO

  • Un server NAS. Metti i tuoi file su un server NAS, sono diventati ragionevolmente convenienti ultimamente (da 150 $ o giù di lì) e uno buono non consuma molta energia. Nessun problema di sincronizzazione mai.
    Svantaggio principale: più lento di una copia locale


Con il NAS, non stai ancora affrontando come avviene la sincronizzazione. Avere un NAS e due computer non è, in linea di principio, diverso dall'avere tre computer come OP sta chiedendo. Se stai suggerendo che tutto ciò che deve essere sincronizzato sia semplicemente archiviato sul NAS, in genere non è possibile - considera ad esempio la sincronizzazione dei file di configurazione - devono essere su ogni macchina.
kba,

0

Uso SyncTwoFolders per Mac e Syncback per PC, il primo per i miei tre mac a casa (laptop incluso) e il secondo per il mio PC al lavoro. Entrambi i programmi hanno varie opzioni di backup e sincronizzazione che lo rendono un gioco da ragazzi una volta impostati i pre-set. Vai tranquillo! Sono sicuro che ci sono altre versioni di software simili disponibili per Linux e Ubuntu.


0

È possibile utilizzare uno script di sincronizzazione come osync che può propagare i file eliminati e aggiornare solo quelli modificati. http://www.netpower.fr/osync osync è basato su rsync ma può gestire molti scenari di sincronizzazione tra cartelle locali o remote su ssh.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.