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

Jak zsynchronizować folder domowy między wieloma komputerami?

Mam trzy komputery w domu i chciałbym, aby drzewo folderów /home/ było zsynchronizowane między nimi.
Każdy plik/folder (z wyjątkiem ukrytych), który jest modyfikowany/dodawany/usuwany na jednym z trzech komputerów, jest aktualizowany na pozostałych dwóch.

Czy rsync wystarczy, aby to zrobić? i jak?

Odpowiedzi (14)

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

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

  • Unison - jak wspomniano przez innych, jest to uruchamiane ręcznie, ale jest bardzo szybkie, niezawodne i skuteczne. Wymaga, aby obie synchronizowane maszyny były włączone w tym samym czasie. Ma ładny interfejs użytkownika, który pozwala radzić sobie z prawie nieuniknionymi konfliktami, a także śledzi i propaguje usuwanie poprawnie. Graficzna aplikacja/pakiet nazywa się unison-gtk.

  • OwnCloud - Przechowywanie danych w chmurze na własnym serwerze. Będziesz potrzebował maszyny, na której będziesz mógł go zostawić. Wymaga rozsądnej ilości konfiguracji. Działa na pełnym serwerze WWW Apache 2 i bazie danych SqlLite lub MySQL. Działa podobnie do Dropbox z klientem na pulpicie, ale serwer jest pod twoją kontrolą. edit: OwnCloud przeszedł ostatnio pewne zmiany w sposobie prowadzenia projektu, a teraz ma nowe, w pełni otwarte źródło (tj. nie ma zamkniętego źródła ‘enterprise’ edition) pod przykrywką NextCloud , (zobacz ten wywiad youtube z oryginalnym deweloperem OwnCloud po więcej szczegółów).

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

  • Seafile - Udostępnia komponent serwera, który można zainstalować na lokalnej maszynie. Seafile używa modelu danych podobnego do git do śledzenia zmian. Dostarcza klientów synchronizacji dla komputerów stacjonarnych, tabletów i smartfonów. Wpis na blogu opisujący konfigurację można znaleźć pod adresem 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 bashu i oparte na rsync. Działa na lokalnych i / lub zdalnych katalogach poprzez tunele ssh. Jest głównie przeznaczony do uruchamiania jako zadanie cron” (tekst ze strony www)

  • PowerFolder - projekt oparty na java GPL v2. Strona główna promuje ofertę komercyjną, więc nie jest jasne, jak używać dostarczonego pliku .jar.

  • Rsync - szybki, efektywny i znany od dziesięcioleci, jednak nie przechowuje 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 aby uruchomić replikację rsync

  • dvcs-autosync - napisany w pythonie, używa git do przechowywania i współdzielenia zmian pomiędzy maszynami, oraz XMPP do komunikacji zmian.

  • git-annex - narzędzie wiersza poleceń do przenoszenia plików, oparte na git. Ilustracyjny przewodnik znajduje się tutaj: http://git-annex.branchable.com/walkthrough/

  • Tonido - freeware. Udostępnia aplikację desktopową, która udostępnia pliki na inne urządzenia. Oferuje również komercyjne usługi w chmurze oraz komputer z wtyczką TonidoPlug.

  • BitTorrent Sync (freeware) - synchronizacja plików peer-to-peer oparta na BitTorrent. Nie wiem zbyt wiele o tym, ponieważ nie będę go używał ze względu na to, że nie jest open source i nie ufam, że utrzyma moje dane w mojej sieci LAN, nie krępuj się edytować tej odpowiedzi z lepszymi informacjami / prawdziwymi doświadczeniami.

  • SyncThing - Opracowany jako alternatywa open source dla BitTorrent Sync. Obecnie nie posiada niektórych zaawansowanych funkcji programu BitTorrent Sync, takich jak niezaufani użytkownicy. Jest aktywnie rozwijany.

  • Komercyjne usługi hostingowe, takie jak dropbox, ubuntu one, google drive, apple iCloud są tanie i wygodne, jednak wszystkie wymagają powierzenia firmie wszystkich danych i potrzebują dość szybkiego połączenia z Internetem.

  • Git / subversion - Bezpośrednie użycie systemu kontroli źródła. Całkowicie ręczne i może być trochę skomplikowane, ale popularne podejście wśród niektórych użytkowników znających te systemy z używania ich jako narzędzi programistycznych.

  • CloudFS - synchronizacja całego systemu plików, oparta na technologii klastrowej

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


Czynniki, które należy rozważyć przy podejmowaniu decyzji:

  • Serwer centralny - niektóre rozwiązania wymagają, aby maszyna była włączona przez cały czas (lub przynajmniej wtedy, gdy potrzebujesz synchronizacji), aby inne maszyny mogły się z nią synchronizować. Może to być jedna z istniejących maszyn lub oddzielna maszyna, np. NAS. Uważaj na zwiększone rachunki za prąd.

  • Automatyczny / Ręczny / Zaplanowany - Najlepszym sposobem na uniknięcie konieczności rozwiązywania konfliktów, gdy coś zostało zmienione na więcej niż jednej maszynie, jest posiadanie programu na każdej maszynie, który obserwuje zmiany i synchronizuje się natychmiast, w ten sposób zmniejszasz możliwość skończenia z wieloma wersjami. W przypadku procesów ręcznych zawsze trzeba pamiętać o uruchomieniu synchronizacji.

  • Zdalny dostęp - czy chcesz synchronizować dane z dala od swojej sieci LAN (czyli w domu), zastanów się, jakie są tego konsekwencje dla bezpieczeństwa.

  • Bezpieczeństwo - czy Twoje dane opuszczają sieć zaszyfrowane czy nie, jak bezpieczny jest transfer pomiędzy maszynami. Co jeśli ktoś przechwyci Twoje dane podczas podróży, a później okaże się, że szyfrowanie ma wady? Kto kontroluje serwer, na którym przechowywane są Twoje dane, czy dane są szyfrowane, czy możesz zaufać osobom trzecim? Czy trzeba robić dziury w routerze, aby uzyskać zdalny dostęp? Jak długo “usunięte” pliki i związane z nimi metadane pozostają na zsynchronizowanych urządzeniach i na centralnym serwerze. Czy synchronizujesz pomiędzy zaszyfrowaną i niezaszyfrowaną pamięcią masową?

  • Przenoszenie dużych folderów - wszystkie rozwiązania, które wypróbowałem, mają problem polegający na tym, że gdy przenosisz / zmieniasz nazwę pliku lub folderu, synchronizacja nie rozumie tego i przesyła go ponownie jako nowy, a następnie usuwa starą kopię. Proszę o pomoc, zaznaczając wszelkie rozwiązania powyżej, które są w stanie sobie z tym poradzić (podejrzewam, że rozwiązania oparte na git robią to, ponieważ git nie cierpi z tego powodu ze względu na adresowanie oparte na treści, którego używa, ale nie wiem na pewno, ponieważ nie używałem ich).

  • Pojemność dysku

  • Kopie zapasowe - synchronizacja nie jest kopią zapasową. Usuń przez pomyłkę jakiś ważny plik, a wiele z wyżej wymienionych będzie wesoło kasować wszystkie pozostałe kopie. Polecam przeczytanie kawałka Mat'a Honan'a o byciu zhakowanym ](http://www.wired.com/gadgetlab/2012/08/apple-amazon-mat-honan-) aby dowiedzieć się, co może się stać, jeśli włożysz wszystkie swoje cyfrowe jajka do jednego cyfrowego koszyka, że tak powiem.


Polecam nie synchronizować całego folderu domowego, ale zamiast tego wybrać konkretne foldery do synchronizacji, takie jak Documents/, Pictures/ itp. Pozwoli to uniknąć bólu bycia zmuszonym do radzenia sobie z problemami związanymi z prędkością / wydajnością / przestrzenią dyskową automatycznej synchronizacji wszystkiego. Uniknie się również konieczności utrzymywania list wykluczeń.

Ponieważ nadal próbuję znaleźć coś, co działa dla mnie osobiście, postaram się, aby ta odpowiedź była aktualna z przydatnymi informacjami. Zebrałem informacje ze wszystkich innych odpowiedzi w jedną kompletną odpowiedź.

Referencje:

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

hacking/all/.

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

A może by tak umieścić swoje pliki w systemie kontroli wersji jak SubVersion lub git?

Nie wersjonuję całego mojego home dir, ale tylko garść podkatalogów z kilkoma ważnymi rzeczami. Ale myślę o konwersji na git, ponieważ wydaje się, że jest lepszy do tego typu zadań. Szybkie wyszukiwanie wyśle cię we właściwym kierunku ](http://www.google.se/search?q=git+sync+home)).

Powodzenia


Update : Miłym efektem ubocznym z git jest to, że łatwo jest mieć pliki specyficzne dla komputera, ponieważ musisz mieć tylko gałąź dla tego komputera (i w git dostajesz to domyślnie). Więc nie musisz mieć dokładnie tych samych plików we wszystkich komputerach, muszą być tylko podobne i mieć wspólną “główną” gałąź z rzeczami, które chcesz na wszystkich komputerach.

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

Twoim głównym problemem przy próbie zrobienia tego jest podjęcie decyzji jak scalać zmiany, propagować usuwanie i rozwiązywać konflikty. Jest to trudne do zrobienia w sposób całkowicie zautomatyzowany, szczególnie jeśli masz konfigurację 3 komputerów używanych przez wiele osób.

Jeśli rozdzielisz użytkowników, sprawy stają się o wiele prostsze. Ponieważ jeden użytkownik nie może być w dwóch miejscach na raz (i dlatego generować konflikty), możesz skonfigurować zadanie rsync, aby uruchomić po zalogowaniu się, aby “pobrać zmiany” i wylogować się, aby “przepchnąć zmiany” … do jednego z komputerów, który byłby master … więc na tym poziomie szczegółowości będziesz synchronizował /home/myuser za każdym razem, a nie cały /home/. Dodatkowym udoskonaleniem (w przypadku osób, które się nie wylogowują) byłoby uruchamianie skryptu push po krótkim okresie bezczynności.

Istnieje wiele innych potencjalnych rozwiązań, ale żadne, które w magiczny sposób rozwiązują ten problem, o ile mi wiadomo. Pierwszym krokiem jest prawdopodobnie zastanowienie się, w jaki sposób używasz maszyn i wymyślenie polityki synchronizacji, aby dopasować ją do zachowania użytkowników.

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

Myślę, że możesz osiągnąć to, co chcesz, lepiej przez NFS montując wspólny folder domowy. Sprawdź ten artykuł http://www.linuxjournal.com/article/4880

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

Sprawdź lsyncd

Lsyncd obserwuje interfejs monitora zdarzeń drzew katalogów lokalnych (inotify lub fsevents). Agreguje i łączy zdarzenia przez kilka sekund, a następnie wywołuje jeden (lub więcej) proces(y) do synchronizacji zmian. Domyślnie jest to rsync. Lsyncd jest więc lekkim rozwiązaniem typu live mirror, które jest stosunkowo łatwe do zainstalowania, nie wymaga nowych systemów plików ani urządzeń blokowych i nie obniża wydajności lokalnego systemu plików.

Rsync+ssh jest zaawansowaną konfiguracją działania, która używa SSH do wykonywania ruchów plików i katalogów bezpośrednio na celu, zamiast retransmitowania miejsca docelowego ruchu przez kabel.

Dokładne dostosowanie może być osiągnięte poprzez plik konfiguracyjny. Niestandardowe konfiguracje akcji mogą być nawet pisane od zera w kaskadowych warstwach od skryptów powłoki do kodu napisanego w języku Lua. warstwach od skryptów powłoki do kodu napisanego w języku Lua.

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

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

Skonfiguruj zadanie cron co jakiś czas, aby rsyncować pliki. Używam polecenia jak poniżej:

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

To użyje rsync do kopiowania tylko potrzebnych zmian, a nie ponownego kopiowania wszystkiego za każdym razem, gdy polecenie jest uruchamiane.

–stats i –progress są opcjonalne i prawdopodobnie powinny być wyłączone z twoich skryptów

zawartość mojego pliku rsyncbackupexcludes.conf to:

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

Zamontuj /home z jednego komputera na dwóch pozostałych. Automount działa całkiem dobrze.

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

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

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

Ubuntu One ](https://ubuntuone.com/) może być tym, czego szukasz. Niestety jest jeszcze w fazie beta i nie mam z nim doświadczenia, więc nie jestem pewien, czy zadziała dla Ciebie.

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

Jeśli chcesz również synchronizować configi - narzędzia wymienione powyżej są całkowicie bezradne: configi są często zmieniane, a wiele plików logów będzie powodować konflikty, więc nie mogą być łączone.
Moja decyzja jest prosta i głupia :) Mam stację roboczą Master, i wszystkie pliki z “~” są po prostu kopiowane na drugą stację “Slave”. W momencie, gdy zdaję sobie sprawę, że muszę coś zmodyfikować - robię to na Masterze, a Slave wyłapuje te zmiany podczas synchronizacji.

Ponadto, niektóre skrypty bash powinny działać inaczej na tych maszynach, więc edytowałem mój /etc/bash.bashrc:

export OOHOST=Master

Teraz skrypty wiedzą, który host obsługują ;)

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

Spróbuj dvcs-autosync .

To jest oparte na git, używa XMPP do powiadamiania podłączonych klientów o zmianach w plikach i reaguje na zdarzenia zmian w plikach poprzez zmiany inode. Więc zawsze jest informowany zaraz po zmianie pliku, w przypadku konfliktów opiera się na sprawdzonych metodach gita.

Używam go już od jakiegoś czasu jako zamiennika Dropboxa poprzez klucze publiczne SSH i naprawdę robi robotę.

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

Obejścia, które bym rozważył:

  • Dropbox.
    Główne wady: nie jest darmowy dla żadnej rozsądnej ilości danych. Poza tym działa bez zarzutu IMHO

  • Serwer NAS. Umieść swoje pliki na serwerze NAS, ostatnio stały się one dość przystępne cenowo (od 150$), a dobry serwer nie zużywa dużo energii. Nigdy nie ma problemów z synchronizacją.
    Główna wada: wolniejszy niż kopia lokalna

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

Używam SyncTwoFolders dla Maca i Syncback dla PC - pierwszy dla moich trzech Maców w domu (włącznie z laptopem), a drugi dla mojego PC w pracy. Oba programy mają różne opcje tworzenia kopii zapasowych i synchronizacji, co sprawia, że po skonfigurowaniu ustawień wstępnych jest to bardzo proste. Łatwy-łatwy! Jestem pewien, że istnieją inne wersje podobnego oprogramowania dostępne dla Linuksa i Ubuntu.

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

Możesz użyć skryptu synchronizacji 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 lokalnymi folderami lub zdalnymi przez ssh.