it-swarm-eu.dev

Come sincronizzare la cartella principale tra più computer?

Ho tre computer a casa e vorrei avere l'albero delle cartelle /home/ sincronizzato tra i tre.
Qualsiasi altro 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?

112
lamcro

Ecco una lista di cose che potrebbero potenzialmente risolvere questo problema, ognuna delle quali bilancia i trade-off che devi fare in modo diverso, così 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 siano sincronizzate per essere accese allo stesso. Ha un'interfaccia utente piacevole per permetterti di affrontare i conflitti quasi inevitabili, e tiene traccia e diffonde correttamente le delezioni. L'app/pacchetto grafico si chiama unison-gtk.

  • OwnCloud - L'archiviazione su cloud avviene sul tuo server. Avrai bisogno di una macchina per andarsene. Richiede una quantità ragionevole di setup. 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 apportato alcune modifiche al modo in cui viene eseguito il progetto e ora ha una nuova versione completamente open source (ovvero nessuna 'versione aziendale' di closed source) sotto l'aspetto di NextCloud , (vedi questo intervista youtube con lo sviluppatore OwnCloud originale per maggiori dettagli).

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

  • Seafile - Fornisce un componente server che è possibile installare su un computer locale. Seafile utilizza un modello di dati simile a git per le modifiche al monitoraggio. Fornisce client di sincronizzazione per desktop, tablet e smartphone. Un post sul blog che descrive la configurazione può essere trovato in http://openswitch.org/blog/2013/07/18/installing-and-configuring-seafile-on-ubuntu-12-dot-04/

  • Osync - "... strumento di sincronizzazione file bidirezionale scritto in bash e basato su rsync, che funziona su directory locali e/o remote tramite tunnel ssh. È principalmente progettato per essere avviato come cron task" (testo da il sitoweb)

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

  • Rsync - veloce ed efficace, esiste da decenni, ma non conserva una cronologia, quindi devi scegliere una direzione per decidere se un file è nuovo o cancellato. Sono disponibili strumenti grafici come gwRsync .

  • Lsyncd - controlla le cartelle/i file per attivare la replica rsync

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

  • git-annex - strumento da riga di comando per lo smistamento di file, basato su git. Ecco una spiegazione illustrativa qui: http://git-annex.branchable.com/walkthrough/

  • Tonido - freeware. Fornisce un'app desktop che condividerà i file con altri dispositivi. Fornisci anche offerte cloud commerciali e il plug-in 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 conservare i miei dati all'interno della mia LAN, sentiti libero di modificare questa risposta con informazioni migliori/esperienze reali.

  • SyncThing - Sviluppato come alternativa open source a BitTorrent Sync. Al momento manca alcune delle funzionalità avanzate di BitTorrent Sync, come peer non affidabili. È in sviluppo attivo.

  • I servizi in hosting commerciale come dropbox, ubuntu one, google drive, Apple iCloud sono tutti economici e convenienti, ma tutti richiedono di fidarsi di un'azienda con tutti i dati e hanno bisogno di una connessione internet abbastanza veloce.

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

  • CloudFS - sincronizza un intero filesystem, basato sulla tecnologia cluster

  • Montaggio NFS: in pratica la tua casa abita su una macchina e la accedi alla rete, inutile per i laptop che porti con te. Ulteriori informazioni: http://www.linuxjournal.com/article/4880


Fattori da considerare nel prendere la vostra decisione:

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

  • Automatico/Manuale/Pianificato - Il modo migliore per evitare di dover risolvere 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 si riduce l'opportunità di finire con più versioni. Con i processi manuali è sempre necessario ricordare di eseguire la sincronizzazione.

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

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

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

  • Capacità del disco

  • Backup: la sincronizzazione non è un backup. Eliminare un file importante per errore e molti di questi cancelleranno 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 metti tutte le tue uova digitali in un cestino digitale, per così dire.


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

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

Riferimenti:

  • LinuxFormat - Febbraio 2014 LXF180 p31, "Hosted Storage Roundup"

l'hacking/all /

86
Tim Abell

Unison potrebbe essere un buon candidato:

Unison è uno strumento di sincronizzazione dei file per Unix e Windows. Consente di memorizzare due repliche di una raccolta di file e directory su host diversi (o dischi diversi sullo stesso host), modificati separatamente e quindi aggiornati facendo propagare le modifiche in ogni replica all'altra.

Ha già sincronizzazioni a 2 vie. Vedi l'aggiornamento qui sotto.

Ho imparato che ci sono pochissime cose che rsync non può fare, e probabilmente può fornire una soluzione uguale o migliore, ma dovrai aspettare che un esperto 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 di macchine più grandi eseguendo più sincronizzazioni a coppie.

Se è necessario, 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 di sincronizzazione dei raggi. solo con l'hub. Il grande vantaggio della topologia a stella è che elimina la possibilità di confondere "conflitti spuri" derivanti dal fatto che un archivio separato viene gestito da Unison per ogni coppia di host sincronizzata.

28
nagul

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

Non faccio la versione di tutta la mia home directory, ma solo una manciata di sottodiretti con alcune cose importanti. Ma sto pensando di convertire in git dato che sembra essere meglio per questo tipo di lavoro. ( una ricerca rapida ti invierà nella giusta direzione ).

In bocca al lupo


Aggiornamento : Un bell'effetto collaterale con git è che è facile avere file specifici per il computer, dal momento che è sufficiente disporre di un ramo per quel computer (e in git lo si ottiene per impostazione predefinita). Quindi non è necessario avere esattamente gli stessi file su tutto il computer, devono solo essere simili e avere un ramo "principale" comune con quello che si desidera su tutti i diversi computer.

19
Johan

Il tuo problema principale quando cerchi di farlo è decidere come unire le modifiche, propagare le eliminazioni e risolvere i conflitti. Questo è difficile da fare in un modo completamente automatico, specialmente se hai una configurazione di 3 computer utilizzata da più persone.

Se separi gli utenti, le cose diventano molto più semplici. Poiché un utente non può essere in due posti contemporaneamente (e quindi generare conflitti), è possibile impostare un processo rsync per eseguire l'accesso per "ottenere le modifiche" e uscire in "Push changes" ... su uno dei computer che sarebbe il padrone ... quindi a questo livello di granularità si sincronizzerebbe/home/myuser ogni volta piuttosto che l'intero/home /. Un ulteriore perfezionamento (nel caso in cui le persone non si disconnettano) eseguirà 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 pensare a come si usano le macchine e trovare una politica di sincronizzazione che si adatti al comportamento dell'utente.

6
Ira Cooke

Penso che si possa ottenere ciò che si desidera meglio da NFS montando una cartella home comune. Dai un'occhiata a questo articolo http://www.linuxjournal.com/article/4880

5
jspeaks

Controlla lsyncd

Lsyncd controlla un'interfaccia del monitor degli eventi degli alberi delle directory locali (inotify o fsevents). Esso aggrega e combina gli eventi per alcuni secondi e quindi genera uno (o più) processi per sincronizzare le modifiche. Di default questo è rsync. Lsyncd è quindi una soluzione live mirror leggera che è relativamente facile da installare, non richiede nuovi filesystem o blockdevices e non ostacola le prestazioni del filesystem locale.

Rsync + ssh è una configurazione di azioni avanzate che utilizza un SSH per agire sul file e la directory si sposta direttamente sul target invece di ritrasmettere la destinazione dello 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 di shell al codice scritto nel linguaggio Lua. Gli spettatori vanno dagli script di shell al codice scritto in linguaggio Lua.

4
eric

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

Impostare un cron job ogni tanto per rsync i file. Io uso un comando simile al seguente:

rsync -alhz --stats --progress --exclude-from '/etc/rsync_backup_excludes.conf' / -e ssh [email protected]:/path/to/home/

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

--stats e --progress sono opzionali e dovrebbero probabilmente essere esclusi dagli script

i contenuti del mio file rsync_backup_excludes.conf sono:

dev/*
proc/*
lost+found/*
mnt/*
sys/*
4
Matt Cofer

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

2
Xenoactive

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

2
Boxdog

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

1
Molly7244

Prova dvcs-autosync .

Questo è basato su git, utilizza XMPP per notificare i client associati alle modifiche ai file e reagisce agli eventi di modifica dei file tramite le modifiche degli inode. Quindi viene sempre informato subito dopo la modifica del file, in caso di conflitti si basa sui metodi collaudati di git.

L'ho usato per un po 'ora come sostituto Dropbox tramite chiavi pubbliche SSH e fa davvero il lavoro.

1
schlypel

Se si desidera sincronizzare le configurazioni, gli strumenti sopra menzionati sono totalmente inutili: le configurazioni vengono spesso modificate 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 da "~" sono copiati nella seconda "Slave". Nel momento in cui realizzo che ho bisogno di modificare qualcosa - lo faccio su Master, e Slave cattura queste modifiche durante la sincronizzazione.

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

export OOHOST = Master

Ora, gli script sanno quale Host stanno servendo;)

1
kolypto

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.

1
Ilari Kajaste

È possibile utilizzare uno script di sincronizzazione come osync che può propagare file cancellati 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.

0
Orsiris de Jong

Io 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 rendono questo un gioco da ragazzi una volta impostate le pre-impostazioni. Vai tranquillo! Sono sicuro che ci sono altre versioni di software simili disponibili per Linux e Ubuntu.

0

I workaround vorrei considerare:

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

  • A NAS server. Metti i tuoi file su un server NAS, sono diventati ragionevolmente accessibili ultimamente (da 150 $ circa) e uno buono non consuma molta energia. Nessun problema di sincronizzazione di sempre.
    Svantaggio principale: più lento di una copia locale

0
Rabarberski