2009-08-28 18:10:40 +0000 2009-08-28 18:10:40 +0000
121
121

Come sincronizzare la cartella home tra più computer?

Ho tre computer a casa, e vorrei avere l'albero delle cartelle sincronizzato tra i tre.
Qualsiasi file/cartella (tranne quelli nascosti) che viene modificato/aggiunto/rimosso in uno dei tre computer viene aggiornato negli altri due.

È sufficiente /home/ per fare questo e come?

Risposte (14)

97
97
97
2014-01-18 17:52:37 +0000

Ecco una lista di cose che potrebbero potenzialmente risolvere questo problema, ognuno 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 da sincronizzare siano accese allo stesso tempo. Ha una bella interfaccia utente che permette di gestire i quasi inevitabili conflitti, e tiene traccia e propaga correttamente le cancellazioni. L'applicazione/pacchetto grafico si chiama unison-gtk.

  • OwnCloud - Cloud storage eseguito sul proprio server. Avrai bisogno di una macchina su cui partire. Richiede una quantità ragionevole di configurazione. Esegue un webserver 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. edit : OwnCloud ha recentemente attraversato alcuni cambiamenti nel modo in cui il progetto è gestito, e ora ha un nuovo completamente open source (cioè nessuna edizione ‘enterprise’ closed source) sotto la veste di NextCloud , (vedi questa intervista youtube con lo sviluppatore originale OwnCloud per maggiori dettagli).

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

  • Seafile - Fornisce un componente server che puoi installare su una macchina locale. Seafile usa un modello di dati simile a git per tracciare i cambiamenti. Fornisce client di sincronizzazione per desktop, tablet e smartphone. Un post sul blog che descrive la configurazione può essere trovato a 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. Funziona su directory locali e/o remote tramite tunnel ssh. È principalmente mirato ad essere lanciato come task cron” (testo dal sito web)

  • PowerFolder - progetto GPL v2 basato su java. Il sito web principale spinge offerte commerciali quindi non è chiaro come usare il file .jar fornito.

  • Rsync - veloce ed efficace ed è stato in giro per decenni, tuttavia non tiene una cronologia quindi devi scegliere una direzione per decidere se un file è nuovo o cancellato. Sono disponibili strumenti grafici come gwRsync .

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

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

  • git-annex - strumento a riga di comando per spostare i file, basato su git. C'è una guida illustrativa qui: http://git-annex.branchable.com/walkthrough/

  • Tonido - freeware. Fornisce un'applicazione desktop che condividerà i file su altri dispositivi. Fornisce anche offerte cloud commerciali, e il TonidoPlug plug computer.

  • BitTorrent Sync (freeware) - sincronizzazione dei file peer-to-peer basata su BitTorrent. Non so molto su questo perché non lo userò a causa del fatto che non è open source e non mi fido a mantenere 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. Attualmente manca di alcune delle caratteristiche avanzate di BitTorrent Sync, come i peer non fidati. È in fase di sviluppo attivo.

  • I servizi commerciali ospitati come dropbox, ubuntu one, google drive, apple iCloud sono tutti velocemente economici e convenienti, tuttavia tutti richiedono di fidarsi di una società con tutti i tuoi dati, e hanno bisogno di una connessione internet ragionevolmente veloce.

  • Git / subversion - Usa direttamente un sistema di controllo dei sorgenti. Completamente manuale e può essere un po’ complesso, ma approccio popolare con alcuni utenti che hanno familiarità con questi sistemi per averli usati come strumenti di programmazione.

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

  • NFS mount - fondamentalmente la tua casa vive su una macchina e tu ci accedi attraverso la rete, non va bene per i portatili 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 hai bisogno di sincronizzare) per sincronizzare le altre macchine. Questa potrebbe essere una delle vostre macchine esistenti, o una macchina separata come un NAS. Attenzione all'aumento della bolletta energetica.

  • Automatico / Manuale / Programmato - Il modo migliore per evitare di dover risolvere i conflitti in cui qualcosa è cambiato su più macchine è quello di avere un programma su ogni macchina che osserva i cambiamenti e sincronizza immediatamente, in questo modo si riduce la possibilità di finire con versioni multiple. Con i processi manuali devi sempre ricordarti di eseguire la sincronizzazione.

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

  • Sicurezza - i tuoi dati lasciano la tua rete criptata o no, quanto è sicuro il trasferimento tra le macchine. Cosa succede se qualcuno cattura i tuoi dati in movimento e più tardi si scopre che la crittografia ha delle falle? Chi controlla il server che conserva i tuoi dati, i dati sono criptati, puoi fidarti di terze parti? Devi fare dei buchi nel tuo router per avere accesso remoto? Per quanto tempo i file “cancellati” e i relativi metadati rimangono sui dispositivi sincronizzati e sul server centrale. Stai sincronizzando tra storage criptato e non criptato?

  • Spostamento di grandi cartelle - 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 poi cancella la vecchia copia. Per favore, aiutaci segnando qualsiasi soluzione sopra che sia in grado di gestire questo problema (sospetto che le soluzioni basate su git lo facciano perché git non soffre di questo a causa dell'indirizzamento basato sul contenuto che usa, ma non lo so per certo perché non le ho usate).

  • Capacità del disco

  • Backup - la sincronizzazione non è un backup. Cancellate un file importante per errore e molti di quelli sopra citati cancelleranno allegramente tutte le vostre altre copie. Raccomando la lettura del pezzo di Mat Honan sull'essere hacked per un buon resoconto di cosa può succedere se metti tutte le tue uova digitali in un solo paniere digitale, per così dire.


Raccomando di non sincronizzare l'intera cartella home, ma di scegliere invece cartelle specifiche da sincronizzare come Documents/, Pictures/ ecc. Questo eviterà il dolore di essere costretti ad affrontare i problemi di velocità / prestazioni / spazio su disco della sincronizzazione automatica di tutto. Evita anche di dover mantenere liste 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 una risposta completa.

Riferimenti:

  • LinuxFormat - Febbraio 2014 LXF180 p31, “Hosted Storage Roundup”

hacking/all/

19
19
19
2009-08-29 22:07:36 +0000

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

Non faccio la versione della mia intera cartella home, ma solo una manciata di sottocartelle con alcune cose importanti. Ma sto pensando di convertirmi a git dato che sembra essere migliore per questo tipo di lavoro. una rapida ricerca ti manderà nella giusta direzione ).

Buona fortuna


Aggiornamento : Un bell'effetto collaterale con git è che è facile avere file specifici per il computer, dato che hai solo bisogno di avere un ramo per quel computer (e in git lo ottieni di default). Quindi non c'è bisogno di avere esattamente gli stessi file in tutti i computer, devono solo essere simili, e avere un ramo “principale” comune con le cose che volete su tutti i diversi computer.

6
6
6
2009-08-29 09:43:00 +0000

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

Se si separano gli utenti le cose diventano molto più semplici. Poiché un utente non può essere in due posti contemporaneamente (e quindi generare conflitti) si potrebbe quindi impostare un lavoro rsync da eseguire al login per “ottenere le modifiche” e al logout per “spingere le modifiche” … su uno dei vostri computer che sarebbe il master … così a questo livello di granularità si sincronizzerebbe /home/myuser ogni volta piuttosto che l'intera /home/. Un ulteriore perfezionamento (in caso di persone che non si disconnettono) sarebbe eseguire 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 usate le macchine e trovare una politica di sincronizzazione che si adatti al comportamento dei vostri utenti.

5
5
5
2010-06-11 20:05:12 +0000

Penso che tu possa ottenere ciò che vuoi meglio montando NFS una cartella home comune. Controlla questo articolo http://www.linuxjournal.com/article/4880

4
4
4
2010-06-11 21:20:04 +0000

Controllate lsyncd

Lsyncd osserva un'interfaccia di monitoraggio degli eventi degli alberi delle directory locali (inotify o fsevents). Aggrega e combina gli eventi per alcuni secondi e poi genera uno (o più) processi per sincronizzare i cambiamenti. Per impostazione predefinita 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 azione avanzata che utilizza un SSH per agire sugli spostamenti di file e directory direttamente sulla destinazione invece di ritrasmettere la destinazione dello spostamento sul filo.

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

4
4
4
2009-08-28 18:34:44 +0000

Questo non fornirà una soluzione completa, ma vi darà un inizio:

Imposta un cron job ogni tanto per rsyncare i file. Io 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 dovrebbero probabilmente essere esclusi dai tuoi script

il contenuto del mio file rsync_backup\excludes.conf è:

dev/*
proc/*
lost+found/*
mnt/*
sys/*
2
2
2
2011-08-24 23:57:12 +0000

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

2
2
2
2009-08-28 18:41:17 +0000

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

1
1
1
2009-08-29 11:11:32 +0000

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

1
1
1
2009-08-29 21:38:15 +0000

Se vuoi anche sincronizzare le configurazioni - gli strumenti menzionati sopra sono totalmente impotenti: le configurazioni sono spesso cambiate, e molti file di log creeranno conflitti, quindi non possono essere uniti.
La mia decisione è semplice e stupida :) Ho una workstation Master, e tutti i file da “~” sono semplicemente copiati sulla seconda “Slave”. Nel momento in cui mi rendo conto che ho bisogno di modificare qualcosa - lo faccio sulla Master, e la Slave cattura queste modifiche sulla sincronizzazione.

Inoltre, alcuni script bash dovrebbero girare diversamente su queste macchine, così ho modificato il mio /etc/bash.bashrc:

export OOHOST=Master

Ora, gli script sanno quale host stanno servendo ;)

1
1
1
2012-03-22 11:47:19 +0000

Prova dvcs-autosync .

Questo è basato su git, usa XMPP per notificare ai client connessi i cambiamenti di file e reagisce agli eventi di cambiamento di file attraverso i cambiamenti di inode. Quindi viene sempre informato subito dopo il cambiamento del file, in caso di conflitti si affida ai metodi collaudati di git.

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

0
0
0
2011-03-02 14:02:40 +0000

I workaround che prenderei in considerazione:

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

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

0
0
0
2011-03-02 13:47:07 +0000

Io uso SyncTwoFolders per Mac e Syncback per PC - il primo per i miei tre mac a casa (incluso il portatile), 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 che le preimpostazioni sono state impostate. Facile facile! Sono sicuro che ci sono altre versioni di software simili disponibili per Linux e Ubuntu.

0
0
0
2013-08-18 14:28:59 +0000

Si potrebbe usare uno script di sincronizzazione come osync che può propagare i 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.