Jak zsynchronizować folder domowy między wieloma komputerami?

117

Mam w domu trzy komputery i chciałbym, aby /home/drzewo folderów zostało zsynchronizowane między tymi trzema.
Wszelkie pliki / foldery (oprócz ukrytych), które są modyfikowane / dodawane / usuwane na jednym z trzech komputerów, są aktualizowane na pozostałych dwóch.

Czy to rsyncwystarczy? i jak?

lamcro
źródło
9
Problem z większością narzędzi do synchronizacji (w tym rsync, jeśli dobrze pamiętam) polega na tym, że nie mają pojęcia działań użytkownika. Jeśli więc usuniesz plik na komputerze X, narzędzie nie wie, czy (a) faktycznie usunąłeś plik na komputerze X, czy (b) dodałeś ten plik na komputerze Y. Większość narzędzi zakłada, że ​​(b), więc po zsynchronizowaniu dodają plik ponownie na komputerze X (zamiast usuwać go na komputerze Y).
Rabarberski
5
@Rabarberski wiele narzędzi do synchronizacji (w tym Unison lub Syncthing) prowadzi bazę danych z odniesieniami do istniejących danych (z tego powodu). Nie pomoże ci to podczas synchronizacji nowych folderów po raz pierwszy, ale mogą one bardzo dobrze usunąć pliki (automatycznie). Prawdziwy problem z większością narzędzi do synchronizacji polega na tym, że pliki zostały zmienione w dwóch lokalizacjach przed następną synchronizacją - w tym przypadku konfliktu zazwyczaj trzeba wykonać ręczne scalanie lub zastąpienie najnowszą wersją.
Chris,
2
Synchronizacja, gdy zmian nie można natychmiast skopiować na inne maszyny, jest naprawdę trudna i nigdy nie widziałem, aby jakikolwiek program robił to idealnie, więc przygotuj się na kilka błędów, konfliktów lub ponownego pojawiania się plików. Polecam zsynchronizować tylko niektóre określone foldery, o których wiesz, że będą zarządzane przez program do synchronizacji.
Elzo

Odpowiedzi:

90

Oto lista rzeczy, które potencjalnie mogą rozwiązać ten problem, każda z nich równoważy kompromisy, które musisz wykonać inaczej, więc będziesz musiał dokonać własnych wyborów i wypróbować rzeczy na własną rękę:

  • Unison - jak wspominają inni, jest uruchamiany ręcznie, ale jest bardzo szybki, niezawodny i skuteczny. Wymaga synchronizacji obu komputerów jednocześnie. Ma ładny interfejs użytkownika, który pozwala radzić sobie z prawie nieuniknionymi konfliktami, a także poprawnie śledzi i propaguje usuwanie. Aplikacja / pakiet graficzny nazywa się unison-gtk.

  • OwnCloud - Magazyn w chmurze działa na twoim serwerze. Potrzebujesz maszyny, żeby wyjść. Wymaga rozsądnej konfiguracji. Działa na serwerze pełny serwer Apache 2 i baza danych SqlLite lub MySQL. Działa podobnie jak Dropbox z klientem stacjonarnym, ale serwer jest pod twoją kontrolą. edycja: OwnCloud przeszedł niedawno pewne zmiany w sposobie prowadzenia projektu, a teraz ma nowe całkowicie otwarte źródło (tj. brak zamkniętej edycji „Enterprise”) pod pozorem NextCloud (patrz wywiad z youtube z oryginalnym deweloperem OwnCloud po więcej szczegółów).

  • SparkleShare - używa git do synchronizacji plików. Według strony głównej: dobre dla wielu mniejszych plików, nie dobre dla wielu dużych plików, takich jak muzyka lub kolekcja zdjęć.

  • Seafile - zapewnia komponent serwera, który można zainstalować na komputerze lokalnym. Seafile używa modelu danych podobnego do git do śledzenia zmian. Zapewnia klientom synchronizacji na komputery stacjonarne, tablety i smartfony. Wpis na blogu opisujący konfigurację można znaleźć na stronie http://openswitch.org/blog/2013/07/18/installing-and-configuring-seafile-on-ubuntu-12-dot-04/

  • Osync - „... dwukierunkowe narzędzie do synchronizacji plików napisane w języku bash i oparte na rsync. Działa w lokalnych i / lub zdalnych katalogach za pośrednictwem tuneli ssh. Jego głównym celem jest uruchomienie jako zadanie cron” (tekst ze strony internetowej)

  • PowerFolder - projekt GPL v2 oparty na Javie. Główna strona internetowa oferuje oferty komercyjne, więc nie jest jasne, jak korzystać z dostarczonego pliku .jar.

  • Rsync - szybki i skuteczny, działający od dziesięcioleci, jednak nie zachowuje historii, więc musisz wybrać kierunek, aby zdecydować, czy plik jest nowy, czy usunięty. Dostępne są narzędzia graficzne, takie jak gwRsync .

  • Lsyncd - monitoruje foldery / pliki w celu wyzwolenia replikacji rsync

  • dvcs-autosync - napisany w Pythonie, używa git do przechowywania i udostępniania zmian między komputerami, a XMPP do komunikowania zmian.

  • git-annex - narzędzie wiersza poleceń do przetaczania plików, oparte na git. Oto przykładowy przewodnik: http://git-annex.branchable.com/walkthrough/

  • Tonido - darmowy. Udostępnia aplikację komputerową, która będzie udostępniać pliki innym urządzeniom. Zapewnij również komercyjne oferty chmurowe oraz komputer z wtyczką TonidoPlug.

  • BitTorrent Sync (darmowy) - synchronizacja plików peer-to-peer oparta na BitTorrent. Nie wiem zbyt wiele na ten temat, ponieważ nie będę go używać, ponieważ nie jest open source i nie ufam, że moje dane będą przechowywane w mojej sieci LAN, możesz edytować tę odpowiedź z lepszymi informacjami / prawdziwymi doświadczeniami.

  • SyncThing - opracowany jako otwarta alternatywa dla BitTorrent Sync. Obecnie brakuje niektórych zaawansowanych funkcji BitTorrent Sync, takich jak niezaufani peer. Jest w trakcie aktywnego rozwoju.

  • Komercyjne usługi hostowane, takie jak Dropbox, Ubuntu One, dysk Google, Apple iCloud są szybkie i tanie, ale wszystkie wymagają zaufania do firmy z wszystkimi Twoimi danymi i potrzebują dość szybkiego połączenia z Internetem.

  • Git / subversion - użyj bezpośrednio systemu kontroli źródła. Całkowicie ręczny i może być nieco złożonym, ale popularnym podejściem dla niektórych użytkowników zaznajomionych z tymi systemami z wykorzystaniem ich jako narzędzi programistycznych.

  • CloudFS - synchronizacja całego systemu plików w oparciu o technologię klastrową

  • Montaż NFS - w zasadzie Twój dom mieszka na jednej maszynie i masz do niego dostęp przez sieć, nie jest to dobre dla laptopów, które zabierasz ze sobą. Więcej informacji: http://www.linuxjournal.com/article/4880


Czynniki, które należy wziąć pod uwagę przy podejmowaniu decyzji:

  • Serwer centralny - niektóre rozwiązania wymagają, aby komputer był cały czas włączony (lub przynajmniej w przypadku konieczności synchronizacji), aby inne maszyny mogły się z nim synchronizować. Może to być jedna z istniejących maszyn lub osobna maszyna, na przykład NAS. Uważaj na wyższe rachunki za prąd.

  • Automatyczny / ręczny / zaplanowany - najlepszym sposobem na uniknięcie konieczności rozwiązywania konfliktów, gdy coś jest zmieniane na więcej niż maszynie, jest posiadanie programu na każdym komputerze, który obserwuje zmiany i natychmiast synchronizuje, w ten sposób zmniejszasz możliwość uzyskania wielu wersje. W przypadku procesów ręcznych zawsze musisz pamiętać o uruchomieniu synchronizacji.

  • Zdalny dostęp - czy chcesz synchronizować z dala od sieci LAN (zwanej także domem), zastanów się nad konsekwencjami tego bezpieczeństwa.

  • Bezpieczeństwo - czy dane pozostawiają sieć zaszyfrowaną, czy nie, jak bezpieczny jest transfer między komputerami. Co się stanie, jeśli ktoś zarejestruje Twoje dane w ruchu, a później okaże się, że szyfrowanie ma wady? Kto kontroluje serwer, który przechowuje twoje dane, czy dane są szyfrowane, czy możesz zaufać stronom trzecim? Czy musisz dziurawić otwory w routerze, aby uzyskać zdalny dostęp? Jak długo trwają „usunięte” pliki i powiązane metadane na zsynchronizowanych urządzeniach i na centralnym serwerze. Czy synchronizujesz między pamięcią szyfrowaną a nieszyfrowaną?

  • Przenoszenie dużych folderów - w rozwiązaniach, które wypróbowałem, występuje problem polegający na tym, że po przeniesieniu / zmianie nazwy pliku lub folderu synchronizacja nie rozumie tego i przesyła je od nowa jako nowe, a następnie usuwa starą kopię. Proszę o pomoc, zaznaczając powyższe rozwiązania, które są w stanie sobie z tym poradzić (podejrzewam, że rozwiązania oparte na git robią, ponieważ git nie cierpi z tego powodu z powodu adresowania opartego na treści, którego używa, ale nie wiem na pewno, ponieważ nie mam pojęcia ich używałam).

  • Pojemność dysku

  • Kopie zapasowe - synchronizacja nie jest kopią zapasową. Usuń ważny plik przez pomyłkę, a wiele z powyższych wesoło usunie wszystkie pozostałe kopie. Polecam przeczytać artykuł Mata Honana o tym, jak zostałeś zhakowany, aby uzyskać dobry opis tego, co może się stać, jeśli włożysz wszystkie swoje cyfrowe jajka do jednego cyfrowego koszyka, że ​​tak powiem.


Nie zalecamy synchronizację cały folder domowy, ale zamiast zbierając określone foldery do synchronizacji, takich jak Documents/, Pictures/itd. Pozwoli to na uniknięcie bólu zmuszany do czynienia z problematyką przestrzeni prędkość / wydajność / dysk automatycznego synchronizowania wszystko. Pozwala to również uniknąć konieczności utrzymywania list wykluczeń.

Gdy będę nadal starać się znaleźć coś, co będzie dla mnie osobiście, postaram się aktualizować tę odpowiedź z przydatnymi informacjami. Zebrałem informacje ze wszystkich pozostałych odpowiedzi w jedną pełną odpowiedź.

Bibliografia:

  • LinuxFormat - luty 2014 LXF180 p31, „Hosted Storage Roundup”

hacking / all /

Tim Abell
źródło
Mam serwer bez dostępu roota (który jest niezbędny na przykład do instalacji unisona). Czy istnieje skrypt, który mogę mieć na komputerze klienta, który nie musi być instalowany na moim serwerze?
Ben Kushigian,
Widziałem kilka razy oprogramowanie o nazwie freefilesync ( sourceforge.net/projects/freefilesync ). Czy warto wspomnieć na liście?
YoungFrog,
28

Unison może być dobrym kandydatem:

Unison to narzędzie do synchronizacji plików dla systemów Unix i Windows. Umożliwia przechowywanie dwóch replik kolekcji plików i katalogów na różnych hostach (lub różnych dyskach na tym samym hoście), modyfikowanie ich osobno, a następnie aktualizowanie poprzez propagowanie zmian w każdej replice do drugiej.

Już wykonuje synchronizację dwukierunkową. Zobacz aktualizację poniżej.

Dowiedziałem się, że jest niewiele rzeczy, których rsync nie może zrobić i prawdopodobnie może to zapewnić równe lub lepsze rozwiązanie, ale będziesz musiał poczekać na pojawienie się eksperta rsync dla tego rozwiązania.

Aktualizacja: Tak, Unison może synchronizować więcej niż 2 maszyny. Z instrukcji obsługi :

Używanie Unison do synchronizacji więcej niż dwóch maszyn

Unison został zaprojektowany do synchronizacji par replik. Można go jednak użyć do synchronizacji większych grup komputerów, wykonując wiele synchronizacji parami.

Jeśli musisz to zrobić, najbardziej niezawodnym sposobem konfiguracji jest zorganizowanie maszyn w „topologię gwiazd”, z jedną maszyną oznaczoną jako „hub”, a resztą jako „szprychami”, i synchronizacją każdej maszyny szprychowej tylko z hubem. Dużą zaletą topologii gwiazdy jest to, że eliminuje ona możliwość mylenia „fałszywych konfliktów” wynikających z faktu, że Unison prowadzi osobne archiwum dla każdej pary hostów, które synchronizuje.

nagul
źródło
Mam pewne złe doświadczenia z unisonem, z jakiegoś powodu od czasu do czasu zamiast dodawać nowe pliki z innych komputerów, usuwałem je, a innym razem działało dobrze.
jhcaiced
1
Sugeruję edycję przykładu a / b / c, aby postępować zgodnie z zaleceniami zawartymi w instrukcji, aby nie tworzyć pętli.
Tim Abell,
Odnosząc się do twojego odwołania do rsync. Nie, nie można niezawodnie przeprowadzić synchronizacji dwukierunkowej. Spójrz na następującą odpowiedź, aby zobaczyć, dlaczego unison może obsłużyć sprawę, której rsync nie może: stackoverflow.com/questions/4504357/...
ndemou
19

Co powiesz na umieszczenie plików w systemie kontroli wersji, takim jak SubVersion lub git?

Nie zmieniam całego mojego domowego katalogu, ale tylko kilka subdirów z ważnymi rzeczami. Ale myślę o przejściu na git, ponieważ wydaje się, że jest lepiej dla tego rodzaju pracy. ( szybkie wyszukiwanie skieruje Cię we właściwym kierunku ).

Powodzenia


Aktualizacja : Przyjemnym efektem ubocznym z git jest to, że łatwo jest mieć pliki specyficzne dla komputera, ponieważ wystarczy mieć gałąź dla tego komputera (i w git dostajesz to domyślnie). Więc nie musisz mieć dokładnie takich samych plików na całym komputerze, muszą one być podobne i mieć wspólną „główną” gałąź z rzeczami, które chcesz na wszystkich różnych komputerach.

Johan
źródło
Yikes. Pomysł użycia kontroli wersji do synchronizacji plików naprawdę sprawia, że ​​moja skóra się czołga.
JohnD,
Tak, pomysł jest dziwny, ale bardzo przydatny. Pomyśl o katalogu jak ~ / bin / dla prywatnych skryptów pomocniczych, ten rodzaj katalogu jest świetny w systemie kontroli wersji. Podczas gdy katalog, taki jak .kde, prawdopodobnie zachowuje się źle w systemie kontroli wersji i zostanie umieszczony na liście ignorowanych plików nieobsługiwanych.
Johan
Jest to świetny sposób na synchronizację plików, musisz przyzwyczaić się do używania „git add” i „git rm” do dodawania / usuwania plików, ale działa bardzo dobrze.
jhcaiced
Podoba mi się ten pomysł, ponieważ mam kontrolę nad tym, jaka część plików w śmieciach, które mam w domu, będą udostępniane. Jedyne pytanie dotyczy sposobu zarządzania zatwierdzeniami. tzn. niektóre pliki powinny przejść do początkowego zatwierdzenia, a następnie odzwierciedlić zmiany, aby pokazać, że są oparte na systemie / etc / skel.
ony
Czy utrzymanie kilku oddzielnych gałęzi z plikami jest naprawdę wygodne, gdy próbujesz zsynchronizować katalogi? Jasne, działa, ale nie poleciłbym (g) tego do tego zadania. Zasadniczo możesz wykluczyć pliki z większości narzędzi do synchronizacji (według nazwy, folderu itp.), A dla tego, co opisujesz (używając go tylko do niektórych ważnych podkatalogów), nie jest to naprawdę przydatne w odniesieniu do pierwotnego pytania.
Chris
6

Głównym problemem podczas próby wykonania tego jest podjęcie decyzji o sposobie scalania zmian, propagowania usuwania i rozwiązywania konfliktów. Jest to trudne do zrobienia w całkowicie zautomatyzowany sposób, szczególnie jeśli masz konfigurację z 3 komputerami, z której korzysta wiele osób.

Jeśli oddzielisz użytkowników, wszystko stanie się znacznie prostsze. Ponieważ jeden użytkownik nie może znajdować się w dwóch miejscach jednocześnie (a zatem generować konflikty), możesz skonfigurować zadanie rsync, aby uruchamiało się przy logowaniu w celu „uzyskania zmian” i wylogowaniu się w celu „wypchnięcia zmian” ... na jeden z komputerów, na których byłby mistrzem ... więc na tym poziomie szczegółowości synchronizowałbyś / home / myuser za każdym razem, a nie cały / home /. Dodatkowym udoskonaleniem (w przypadku osób, które się nie wylogowują) byłoby uruchomienie skryptu wypychania po krótkim okresie bezczynności.

Istnieje wiele innych potencjalnych rozwiązań, ale o ile mi wiadomo, żadne magicznie nie rozwiązują tego problemu. Pierwszym krokiem jest prawdopodobnie zastanowienie się nad tym, jak korzystasz z komputerów i wymyślenie zasad synchronizacji dopasowanych do zachowania użytkownika.

Ira Cooke
źródło
4

Nie zapewni to całkowicie rozwiązania, ale da ci początek:

Co jakiś czas konfiguruj zadanie crona, aby zsynchronizować pliki. Używam polecenia takiego jak poniżej:

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

Spowoduje to użycie rsync do skopiowania tylko potrzebnych zmian, a nie do skopiowania wszystkiego za każdym razem, gdy polecenie zostanie uruchomione.

--stats i --progress są opcjonalne i prawdopodobnie powinny zostać wyłączone ze skryptów

zawartość mojego pliku rsync_backup_excludes.conf to:

dev/*
proc/*
lost+found/*
mnt/*
sys/*
Matt Cofer
źródło
Anacron zsynchronizuje się, gdy urządzenie jest włączone, unikając brakujących miejsc z powodu przestoju.
Tim Abell
Spowoduje to skopiowanie całego lokalnego katalogu głównego do zdalnego folderu domowego. Nie o to prosił PO, ani nie wyobrażam sobie, dlaczego ktokolwiek chciałby tego ...
Cerin,
4

Sprawdź lsyncd

Lsyncd obserwuje interfejs monitorowania zdarzeń lokalnego drzewa katalogów (inotify lub fsevents). Agreguje i łączy zdarzenia przez kilka sekund, a następnie spawnuje jeden (lub więcej) procesów w celu synchronizacji zmian. Domyślnie jest to rsync. Lsyncd jest zatem lekkim rozwiązaniem Live Mirror, które jest stosunkowo łatwe do zainstalowania, nie wymaga nowych systemów plików ani urządzeń blokowych i nie ogranicza wydajności lokalnego systemu plików.

Rsync + ssh to zaawansowana konfiguracja akcji, która wykorzystuje SSH do działania, aby pliki i katalogi przenosiły się bezpośrednio na obiekt docelowy, zamiast retransmitować miejsce docelowe przenoszenia przez sieć.

Dokładne dostosowanie można uzyskać za pomocą pliku konfiguracyjnego. Niestandardowe konfiguracje akcji można nawet pisać od podstaw w kaskadowych warstwach, od skryptów powłoki do kodu napisanego w języku Lua. Warstwy od skryptów powłoki do kodu napisanego w języku Lua.

eric
źródło
2

Spójrz na dropbox http://www.getdropbox.com/ Wiele platform Win / Linux / Mac

Boxdog
źródło
3
Dziękuje ale nie. Próbowałem już. Nie tego szukam.
lamcro
Dropbox jest świetny i używam ich darmowego 2 GB do przechowywania linków, zdjęć i innych danych o znaczeniu innym niż misja między domem, pracą i moimi laptopami. W tej sytuacji nie jest to potrzebne, ale moim zdaniem Dropbox zdecydowanie ma swoje miejsce.
Matt Cofer
2

Zamontuj /homez jednego komputera na dwóch pozostałych. Automount działa do tego całkiem dobrze.

Xenoactive
źródło
1

Ubuntu One może być tym, czego szukasz. Niestety, wciąż jest w fazie beta i nie mam z tym doświadczenia, więc nie jestem pewien, czy to zadziała.

Ilari Kajaste
źródło
Powiedziałbym, że wciąż jest w fazie intensywnego rozwoju - co kilka dni pojawiają się aktualizacje, gdy zespół Ubuntu rozwiązuje problemy. Działa, ale nie poleciłbym tego nad Dropbox.
nagul
1

Jeśli chcesz również zsynchronizować konfiguracje - narzędzia wymienione powyżej są całkowicie bezradne: konfiguracje są często zmieniane, a wiele plików dziennika powoduje konflikty, więc nie można ich scalić.
Moje oszustwo jest proste i głupie :) Mam stację roboczą Master, a wszystkie pliki z „~” są właśnie kopiowane do drugiego „Slave”. W chwili, gdy zdaję sobie sprawę, że muszę coś zmodyfikować - robię to na Master, a Slave synchronizuje te zmiany.

Ponadto niektóre skrypty bash powinny działać inaczej na tych komputerach, dlatego edytowałem /etc/bash.bashrc:

eksport OOHOST = Master

Teraz skrypty wiedzą, któremu hostowi służą;)

kolypto
źródło
1

Spróbuj dvcs-autosync .

Jest to oparte na git, używa XMPP do powiadamiania podłączonych klientów o zmianach plików i reaguje na zdarzenia zmiany plików poprzez zmiany i-węzła. Dlatego zawsze jest informowany zaraz po zmianie pliku, w przypadku konfliktu opiera się na sprawdzonych metodach git.

Używam go od jakiegoś czasu jako zamiennika Dropbox za pomocą kluczy publicznych SSH i to naprawdę działa.

schlypel
źródło
0

PowerFolder - Synchronizuj pliki, synchronizuj foldery, zdalne przechowywanie, kopie zapasowe i prywatne udostępnianie plików. Synchronizuj komputer w domu i biurze, udostępniaj zdjęcia z wakacji lub pracuj razem nad dokumentami. Bezpieczna technologia peer-to-peer PowerFolder działa w Internecie lub w sieci LAN.

Molly7244
źródło
0

Obejścia, które rozważę:

  • Dropbox.
    Główne wady: nie jest za darmo dla żadnej rozsądnej ilości danych. W przeciwnym razie działa bezbłędnie IMHO

  • Serwer NAS. Umieść swoje pliki na serwerze NAS, stały się ostatnio niedrogie (od około 150 $), a dobry nie zużywa dużo energii. Nigdy nie wystąpiły problemy z synchronizacją.
    Główna wada: wolniejsza niż kopia lokalna

Rabarberski
źródło
Dzięki NAS nadal nie zastanawiasz się, jak przebiega synchronizacja. Posiadanie serwera NAS i dwóch komputerów w zasadzie nie różni się od posiadania trzech komputerów, o które prosi OP. Jeśli sugerujesz, że wszystko, co musi być zsynchronizowane, jest po prostu przechowywane na serwerze NAS, nie jest to na ogół możliwe - rozważ na przykład synchronizację plików konfiguracyjnych - muszą znajdować się na każdym komputerze.
kba
0

Używam SyncTwoFolders dla komputerów Mac i Syncback na PC - pierwszy dla moich trzech komputerów Mac w domu (w tym laptopa), a drugi dla mojego komputera w pracy. Oba programy mają różne opcje tworzenia kopii zapasowych i synchronizacji, dzięki czemu jest to pestka po skonfigurowaniu ustawień wstępnych. Bułka z masłem! Jestem pewien, że istnieją inne wersje podobnego oprogramowania dla systemów Linux i Ubuntu.

Henk the ThinkTank
źródło
0

Możesz użyć skryptu synchronizacji, takiego jak osync, który może propagować usunięte pliki i aktualizować tylko te zmodyfikowane. http://www.netpower.fr/osync osync jest oparty na rsync, ale może obsłużyć wiele scenariuszy synchronizacji między folderami lokalnymi lub zdalnymi przez ssh.

Orsiris de Jong
źródło