Wie synchronisieren Sie den Basisordner zwischen mehreren Computern?

150362
lamcro

Ich habe drei Computer zu Hause und möchte, dass der /home/Ordnerbaum zwischen den drei Computern synchronisiert wird.
Alle Dateien / Ordner (außer den verborgenen), die auf einem der drei Computer geändert / hinzugefügt / entfernt wurden, werden auf den beiden anderen Computern aktualisiert.

Ist rsyncgenug um das zu tun? und wie?

102
Das Problem bei den meisten Synchronisierungswerkzeugen (einschließlich rsync, wenn ich mich richtig erinnere) ist, dass sie keine Ahnung von Benutzeraktionen haben. Wenn Sie also eine Datei auf Computer X löschen, weiß das Tool nicht, ob (a) Sie die Datei tatsächlich auf Computer X gelöscht haben oder (b) diese Datei auf Computer Y hinzugefügt haben. Die meisten Tools setzen voraus, dass (b) Bei der Synchronisierung fügen sie die Datei dann auf dem Computer X erneut hinzu (anstatt sie auf dem Computer Y zu löschen). Rabarberski vor 13 Jahren 7
@Rabarberski viele Sync-Tools (einschließlich Unison oder Syncthing) führen eine Datenbank mit Verweisen auf die vorhandenen Daten (aus diesem Grund). Es hilft nicht, wenn Sie zum ersten Mal neue Ordner synchronisieren, sie können jedoch Dateien (automatisch) für Sie löschen. Das eigentliche Problem der meisten Synchronisierungstools besteht darin, dass Dateien an zwei Speicherorten geändert wurden, bevor die nächste Synchronisierung durchgeführt wird. In diesem Konfliktfall müssen Sie im Allgemeinen eine manuelle Zusammenführung vornehmen oder möglicherweise durch die neueste Version ersetzen. Chris vor 8 Jahren 3
Das Synchronisieren, wenn die Änderungen nicht sofort auf den anderen Maschinen kopiert werden können, ist wirklich schwierig und ich habe noch nie ein Programm gesehen, das perfekt funktioniert. Seien Sie also auf ein paar Bugs, Konflikte und das Wiederauftauchen von Dateien vorbereitet. Ich würde empfehlen, nur bestimmte Ordner zu synchronisieren, von denen Sie wissen, dass sie vom Synchronisierungsprogramm verwaltet werden können. Arno vor 6 Jahren 1

16 Antworten auf die Frage

77
Tim Abell

Im Folgenden finden Sie eine Liste mit möglichen Problemen, die möglicherweise dieses Problem lösen könnten. Jeder gleicht die Kompromisse aus, die Sie treffen müssen, sodass Sie Ihre eigenen Entscheidungen treffen und die Dinge selbst ausprobieren müssen:

  • Unison - wie bereits erwähnt, wird dieser Vorgang manuell ausgeführt, ist aber sehr schnell, zuverlässig und effektiv. Erfordert, dass beide Maschinen gleichzeitig eingeschaltet sind. Es hat eine schöne Benutzeroberfläche, die es Ihnen ermöglicht, mit den fast unvermeidlichen Konflikten umzugehen und Löschungen korrekt zu verfolgen und zu verbreiten. Die grafische App / das Paket heißt unison-gtk.

  • OwnCloud - Cloud-Speicher wird auf Ihrem eigenen Server ausgeführt. Sie brauchen eine Maschine, um dort zu bleiben. Erfordert eine angemessene Menge an Setup. Führt einen vollständigen Apache 2-Webserver und eine SqlLite- oder MySQL-Datenbank auf dem Server aus. Funktioniert ähnlich wie Dropbox mit einem Desktop-Client, der Server steht jedoch unter Ihrer Kontrolle. edit: OwnCloud hat kürzlich einige Änderungen an der Ausführung des Projekts durchlaufen und bietet jetzt eine neue, vollständig offene Quelle (dh keine Closed-Source-Enterprise-Edition) unter dem Deckmantel von NextCloud (siehe dieses YouTube-Interview mit dem ursprünglichen OwnCloud-Entwickler) für mehr Details).

  • SparkleShare - verwendet git, um Dateien synchron zu halten. Laut Homepage: gut für viele kleinere Dateien, nicht für viele große Dateien wie Musik- oder Fotosammlung.

  • Seafile - Stellt eine Serverkomponente bereit, die Sie auf einem lokalen Computer installieren können. Seafile verwendet ein Datenmodell , das git ähnlich ist, um Änderungen zu verfolgen. Stellt Synchronisierungsclients für Desktops, Tablets und Smartphones bereit. Ein Blogbeitrag, der das Setup beschreibt, finden Sie unter http://openswitch.org/blog/2013/07/18/installing-and-configuring-seafile-on-ubuntu-12-dot-04/

  • Osync - "... bidirektionales Dateisynchronisierungstool, geschrieben in bash und basierend auf rsync. Es funktioniert in lokalen und / oder entfernten Verzeichnissen über SSH-Tunnel. Es wird hauptsächlich als Cron-Task gestartet" (Text von der Website)

  • PowerFolder - Java-basiertes GPL v2-Projekt. Auf der Hauptwebsite werden kommerzielle Angebote veröffentlicht, sodass die Verwendung der bereitgestellten .jar-Datei nicht klar ist.

  • Rsync - schnell und effektiv - und das schon seit Jahrzehnten, aber es speichert keine Historie. Sie müssen eine Richtung auswählen, um zu entscheiden, ob eine Datei neu oder gelöscht ist. Grafische Werkzeuge sind verfügbar, beispielsweise gwRsync .

  • Lsyncd - überwacht Ordner / Dateien, um die rsync-Replikation auszulösen

  • dvcs-autosync - in python geschrieben, verwendet git zum Speichern und Freigeben von Änderungen zwischen Maschinen und XMPP zum Kommunizieren von Änderungen.

  • git-annex - Kommandozeilen-Tool zum Umleiten von Dateien, basierend auf git. Hier finden Sie eine illustrative Lösung: http://git-annex.branchable.com/walkthrough/

  • Tonido - Freeware. Stellt eine Desktop-App bereit, die Dateien für andere Geräte freigibt. Bieten Sie auch kommerzielle Cloud-Angebote und den TonidoPlug-Plug-Computer an.

  • BitTorrent Sync (Freeware) - Peer-to-Peer-Dateisynchronisierung basierend auf BitTorrent. Ich weiß nicht viel darüber, da ich es nicht verwenden werde, weil es nicht Open Source ist und nicht darauf vertrauen kann, dass meine Daten in meinem LAN bleiben. Sie können diese Antwort mit besseren Informationen / echten Erfahrungen bearbeiten.

  • SyncThing - Entwickelt als Open Source-Alternative zu BitTorrent Sync. Derzeit fehlen einige der erweiterten Funktionen von BitTorrent Sync, z. B. nicht vertrauenswürdige Peers. Es ist in aktiver Entwicklung.

  • Kommerziell gehostete Dienste wie Dropbox, Ubuntu One, Google Drive, Apple iCloud sind alle schnell und günstig, aber sie alle müssen einem Unternehmen alle Ihre Daten anvertrauen und benötigen eine relativ schnelle Internetverbindung.

  • Git / Subversion - Verwenden Sie ein Quellcodeverwaltungssystem direkt. Vollständig manuell und kann ein wenig komplexer, aber populärer Ansatz sein, wenn einige Benutzer mit diesen Systemen vertraut sind, da sie sie als Programmiertools verwenden.

  • CloudFS - Synchronisation eines ganzen Dateisystems, basierend auf der Clustertechnologie

  • NFS-Mount - Grundsätzlich leben Sie zu Hause auf einem Computer, und Sie können über das Netzwerk darauf zugreifen. Dies ist für Notebooks, die Sie mitnehmen, nicht geeignet. Weitere Informationen: http://www.linuxjournal.com/article/4880


Faktoren, die Sie bei Ihrer Entscheidung berücksichtigen sollten:

  • Zentraler Server - Bei einigen Lösungen muss eine Maschine ständig eingeschaltet sein (oder zumindest, wenn Sie synchronisieren müssen), damit andere Maschinen eine Synchronisierung durchführen können. Dies kann eine Ihrer vorhandenen Maschinen oder eine separate Maschine wie ein NAS sein. Achten Sie auf erhöhte Stromrechnungen.

  • Automatisch / Manuell / Zeitgesteuert - Der beste Weg, Konflikte zu lösen, bei denen etwas geändert wird, ist mehr als eine Maschine, wenn auf jeder Maschine ein Programm vorhanden ist, das auf Änderungen achtet und sofort synchronisiert. Auf diese Weise reduzieren Sie die Möglichkeit, mehrere Programme zu verwenden Versionen. Bei manuellen Prozessen müssen Sie immer daran denken, die Synchronisation durchzuführen.

  • Fernzugriff - Möchten Sie die Synchronisierung außerhalb Ihres LANs (auch als "Zuhause" bezeichnet) durchführen, denken Sie über die Auswirkungen auf die Sicherheit nach.

  • Sicherheit: Verlassen Ihre Daten Ihr Netzwerk verschlüsselt oder nicht? Wie sicher ist die Übertragung zwischen Computern? Was ist, wenn jemand Ihre Daten unterwegs erfasst und die Verschlüsselung später Mängel aufweist? Wer kontrolliert den Server, auf dem Ihre Daten gespeichert sind? Werden die Daten verschlüsselt? Können Sie Dritten vertrauen? Müssen Sie Löcher in Ihren Router stecken, um Fernzugriff zu erhalten. Wie lange bleiben gelöschte Dateien und zugehörige Metadaten auf den synchronisierten Geräten und auf dem zentralen Server. Synchronisieren Sie zwischen verschlüsseltem und unverschlüsseltem Speicher?

  • Große Ordner verschieben - Die Lösungen, die ich ausprobiert habe, haben das Problem, dass die Synchronisierung beim Verschieben / Umbenennen einer Datei oder eines Ordners dies nicht versteht und alles neu als neu lädt und die alte Kopie dann löscht. Helfen Sie bitte, indem Sie alle Lösungen markieren, die in der Lage sind, damit umzugehen (Ich vermute, die git-basierten Lösungen tun dies, da git aufgrund der inhaltsbasierten Adressierung nicht darunter leidet, aber ich weiß nicht genau, was ich weiß benutzt sie nicht)

  • Festplattenkapazität

  • Backups - Synchronisation ist kein Backup. Löschen Sie versehentlich eine wichtige Datei, und viele der obigen Dateien werden alle Ihre anderen Kopien löschen. Ich empfehle, Mat Honans Artikel darüber zu lesen, wie er gehackt wurde, um eine gute Übersicht darüber zu erhalten, was passieren kann, wenn Sie alle Ihre digitalen Eier sozusagen in einen digitalen Korb legen.


Ich empfehle, den gesamten Home - Ordner nicht synchronisiert, sondern bestimmte Ordner Kommissionierung zu synchronisieren wie Documents/, Pictures/usw. Dies wird den Schmerz mit der Geschwindigkeit / Leistung / Speicherplatzprobleme automatisch synchronisieren alles zu tun gezwungen entgehen. Es vermeidet auch, dass Ausschlusslisten geführt werden müssen.

Während ich fortfahre, etwas zu finden, das für mich persönlich funktioniert, werde ich versuchen, diese Antwort mit nützlichen Informationen auf dem neuesten Stand zu halten. Ich habe die Informationen aus allen anderen Antworten zu einer vollständigen Antwort zusammengefasst.

Verweise:

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

hacken / alle /

Ich habe einen Server ohne Root-Zugriff (der beispielsweise für die Installation von unison erforderlich ist). Gibt es ein Skript, das ich auf meiner Client-Maschine haben kann, das nicht auf meinem Server installiert werden muss? Ben Kushigian vor 8 Jahren 0
Ich habe eine Software mit dem Namen freefilesync (http://sourceforge.net/projects/freefilesync) gesehen, die hier und dort ein paar Mal erwähnt wurde. Könnte es wert sein, in Ihrer Liste erwähnt zu werden? YoungFrog vor 8 Jahren 0
27
nagul

Unison könnte ein guter Kandidat sein:

Unison ist ein Dateisynchronisierungstool für Unix und Windows. Auf diese Weise können zwei Replikate einer Sammlung von Dateien und Verzeichnissen auf verschiedenen Hosts (oder verschiedenen Datenträgern auf demselben Host) gespeichert, separat geändert und anschließend auf den neuesten Stand gebracht werden, indem die Änderungen in den einzelnen Replikaten auf die anderen übertragen werden.

Es macht bereits 2-Wege-Synchronisierungen. Siehe Update unten.

Ich habe gelernt, dass es sehr wenige Dinge gibt, die Rsync nicht kann, und dies kann wahrscheinlich eine gleichwertige oder bessere Lösung darstellen, aber Sie müssen warten, bis ein Rsync-Experte für diese Lösung auftaucht.

Update: Ja, Unison kann mehr als zwei Computer synchronisieren. Aus ihrer Bedienungsanleitung :

Verwenden von Unison zum Synchronisieren von mehr als zwei Maschinen

Unison ist für das Synchronisieren von Replikatenpaaren konzipiert. Es ist jedoch möglich, größere Gruppen von Maschinen durch mehrere paarweise Synchronisationen synchron zu halten.

Wenn Sie dies tun müssen, besteht die zuverlässigste Methode zum Einrichten der Maschinen darin, die Maschinen in einer „Stern-Topologie“ zu organisieren, wobei eine Maschine als „Hub“ und der Rest als „Speichen“ bezeichnet wird und die Synchronisation aller Speichen-Maschinen erfolgt nur mit der Nabe. Der große Vorteil der Sterntopologie besteht darin, dass die Möglichkeit der Verwirrung von "Nebenkonflikten" vermieden wird, die dadurch entstehen, dass für jedes zu synchronisierende Hostpaar ein separates Archiv von Unison verwaltet wird.

Ich habe einige schlechte Erfahrungen mit unisono gemacht, aus irgendeinem Grund von Zeit zu Zeit, anstatt die neuen Dateien von anderen Computern hinzuzufügen, es löschte sie, während andere Male gut funktionierten. jhcaiced vor 12 Jahren 0
Ich schlage vor, das Beispiel a / b / c zu bearbeiten, um der Empfehlung im Handbuch zu folgen, Schleifen nicht zu erstellen. Tim Abell vor 10 Jahren 1
Ihre Referenz zu rsync. Nein, es kann keine Zweiwege-Synchronisierung zuverlässig durchgeführt werden. Sehen Sie sich die folgende Antwort an, um zu sehen, warum unison einen Fall verarbeiten kann, den rsync nicht verarbeiten kann: http://stackoverflow.com/questions/4504357/how-does-unison-decide-which-way-to-sync-a-file ndemou vor 8 Jahren 0
19
Johan

Wie wäre es, wenn Sie Ihre Dateien in einem Versionskontrollsystem wie SubVersion oder git ablegen?

Ich führe nicht mein gesamtes Heimverzeichnis aus, sondern nur eine Handvoll Subdirs mit ein paar wichtigen Sachen. Aber ich denke über die Umstellung auf Git nach, da es für diese Art von Job besser zu sein scheint. ( eine schnelle Suche bringt Sie in die richtige Richtung ).

Viel Glück


Update : Ein schöner Nebeneffekt von git ist, dass es leicht ist, computerspezifische Dateien zu haben, da Sie nur eine Verzweigung für diesen Computer benötigen (und in git erhalten Sie dies standardmäßig). Sie müssen also nicht auf jedem Computer genau die gleichen Dateien haben, sie müssen nur ähnlich sein und haben einen gemeinsamen "Haupt" -Zweig mit Elementen, die Sie auf allen Computern benötigen.

Yikes Die Idee, die Versionskontrolle für die Dateisynchronisierung zu verwenden, macht meine Haut wirklich krabbeln. JohnD vor 12 Jahren 0
Ja, die Idee ist seltsam, aber sehr nützlich. Denken Sie an ein Verzeichnis wie ~ / bin / für private Hilfsskripte. Diese Art von Verzeichnis ist in einem Versionskontrollsystem hervorragend. Ein Verzeichnis wie .kde verhält sich wahrscheinlich im Versionskontrollsystem schlecht und würde in eine Ignorierliste für nicht behandelte Dateien gestellt. Johan vor 12 Jahren 0
Dies ist eine großartige Möglichkeit, um Ihre Dateien synchron zu halten. Sie müssen sich an die Idee gewöhnen, "git add" und "git rm" zu verwenden, um Dateien hinzuzufügen / zu entfernen, funktionieren aber sehr gut. jhcaiced vor 12 Jahren 0
Diese Idee gefällt mir, weil ich die Kontrolle darüber habe, welcher Teil der Dateien im Müll, den ich zu Hause habe, freigegeben wird. Die einzige Frage ist, wie Commits verwaltet werden. Das heißt, einige Dateien sollten in das ursprüngliche Commit gehen und dann die Änderungen widerspiegeln, um zu zeigen, dass sie auf system / etc / skel basieren. ony vor 10 Jahren 0
Ist es sehr praktisch, ein paar separate Zweige mit Ihren Dateien zu pflegen, wenn Sie versuchen, Verzeichnisse zu synchronisieren? Klar, es funktioniert, aber ich würde es nicht für diese Aufgabe empfehlen. Sie können Dateien in der Regel von den meisten Synchronisierungstools ausschließen (entweder nach Name, Ordner usw.). Das, was Sie beschreiben (nur für einige wichtige Unterverzeichnisse verwenden), ist in Bezug auf die ursprüngliche Frage nicht wirklich nützlich. Chris vor 8 Jahren 0
Vereinbart, dass die Verwendung eines VCS die angenehme Nebenwirkung hat, Dateien synchron zu halten, aber normalerweise möchten Sie Dateien nicht der Versionskontrolle unterstellen, die nicht dorthin gehören. Idealerweise sollten Sie das beste Werkzeug für die Arbeit verwenden, die Sie zu erledigen versuchen. wenn git diesem zweck dient, dann großartig. Denken Sie nur daran, dass das, was sich für git engagiert, für immer im Repo sein sollte, daher würde dies für mich nicht funktionieren, da ich oft große ISO-Images oder Installationsprogramme herunterlade, die ein paar Monate lang sitzen und dann gelöscht oder archiviert werden ab in ein besseres Zuhause. Es hat keinen Sinn, diese zu einem Repo hinzuzufügen. jia103 vor 8 Jahren 0
6
Ira Cooke

Wenn Sie dies versuchen, besteht das Hauptproblem darin, zu entscheiden, wie Sie Änderungen zusammenführen, Löschungen verbreiten und Konflikte lösen. Dies ist schwer automatisierbar, insbesondere wenn Sie ein 3-Computer-Setup haben, das von mehreren Personen verwendet wird.

Wenn Sie Benutzer voneinander trennen, werden die Dinge viel einfacher. Da ein Benutzer nicht gleichzeitig an zwei Orten sein kann (und daher Konflikte erzeugen kann), können Sie einen rsync-Job einrichten, der beim Anmelden ausgeführt wird, um "Änderungen abzurufen" und sich abzumelden, um "Änderungen zu verschieben" ... auf einem Ihrer Computer wäre der Master ... auf dieser Ebene der Granularität würden Sie also jedes Mal / home / myuser synchronisieren und nicht das gesamte / home /. Eine weitere Verfeinerung (falls sich Benutzer nicht abmelden) würde das Push-Skript nach einer kurzen Zeit der Inaktivität ausführen.

Es gibt viele andere mögliche Lösungen, aber keine, die dieses Problem magisch löst, soweit ich weiß. Der erste Schritt besteht wahrscheinlich darin, über die Verwendung der Maschinen nachzudenken und eine Synchronisationsrichtlinie zu entwickeln, die sich an das Verhalten Ihres Benutzers anpasst.

5
jspeaks

I think you can achieve what you want better by NFS mounting a common home folder. Check out this article http://www.linuxjournal.com/article/4880

4
Matt Cofer

Dies bietet keine vollständige Lösung, aber es wird Ihnen einen Anfang geben:

Richten Sie regelmäßig einen Cron-Job ein, um die Dateien zu synchronisieren. Ich benutze einen Befehl wie den folgenden:

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

Dadurch wird rsync verwendet, um nur die erforderlichen Änderungen zu kopieren, und nicht bei jeder Ausführung des Befehls alles neu zu kopieren.

--stats und --progress sind optional und sollten wahrscheinlich aus Ihren Skripten ausgeschlossen werden

Der Inhalt meiner Datei rsync_backup_excludes.conf lautet:

dev/* proc/* lost+found/* mnt/* sys/* 
Anacron synchronisiert sich, wenn die Maschine eingeschaltet ist, und verhindert, dass Steckplätze aufgrund von Ausfallzeiten fehlen. Tim Abell vor 10 Jahren 0
Dadurch wird Ihr gesamtes lokales Stammverzeichnis in den Remote-Basisordner kopiert. Das ist nicht das, wonach die OP gefragt hat, und ich kann mir nicht vorstellen, warum das jemand will ... Cerin vor 8 Jahren 0
4
eric

Check out lsyncd

Lsyncd watches a local directory trees event monitor interface (inotify or fsevents). It aggregates and combines events for a few seconds and then spawns one (or more) process(es) to synchronize the changes. By default this is rsync. Lsyncd is thus a light-weight live mirror solution that is comparatively easy to install not requiring new filesystems or blockdevices and does not hamper local filesystem performance.

Rsync+ssh is an advanced action configuration that uses a SSH to act file and directory moves directly on the target instead of retransmitting the move destination over the wire.

Fine-grained customizaton can be achieved through the config file. Custom action configs can even be written from scratch in cascading layers ranging from shell scripts to code written in the Lua language.layers ranging from shell scripts to code written in the Lua language.

2
Boxdog

Werfen Sie einen Blick auf dropbox http://www.getdropbox.com/ Cross platform Win / Linux / Mac

Danke aber nein. Habe es schon probiert. Es ist nicht das, wonach ich suche. lamcro vor 14 Jahren 3
Dropbox ist großartig und ich verwende ihre kostenlosen 2 GB zum Speichern von Links, Fotos und anderen nicht geschäftskritischen Daten zwischen Zuhause, der Arbeit und meinen Laptops. Es ist nicht das, was Sie in dieser Situation brauchen, aber meiner Meinung nach hat Dropbox definitiv seinen Platz. Matt Cofer vor 14 Jahren 0
2
Xenoactive

Mounten Sie /homevon einem Computer zu den anderen beiden. Automount funktioniert dafür ziemlich gut.

1

PowerFolder - Synchronisieren Sie Dateien, Synchronisierungsordner, Remotespeicher, Backup und die gemeinsame Nutzung von privaten Dateien. Synchronisieren Sie Heim- und Büro-PC, tauschen Sie Urlaubsbilder aus oder arbeiten Sie gemeinsam an Dokumenten. Die sichere Peer-to-Peer-Technologie von PowerFolder funktioniert über das Internet oder LAN.