Dropbox-Like File Sync bez centralnego serwera [zamknięty]

22

Szukam sposobu na zsynchronizowanie dysków dodatkowych na moich dwóch komputerach Mac przez Internet. Mam spójną łączność VPN między dwoma komputerami Mac i mogę uzyskać do nich dostęp tak, jakby siedziały obok siebie.

Szukam sposobu na implementację podobną do Dropbox, w której jeśli zmodyfikuję plik na jednym komputerze Mac, plik zostanie wypchnięty na inny komputer Mac (i odwrotnie). Potrzebuję również możliwości ograniczenia przepustowości (aby nasza mała rura przesyłająca 1 megabit nie została przeciążona). Jakieś sugestie?

Aha, używanie Dropbox jest w tej chwili wykluczone, ponieważ mój dysk ma 500 GB. Dzięki!

Muncherelli
źródło
Sprawdź port „rsync”, który jest do tego celu narzędziem systemu Linux. Może synchronizować twoje pliki przy każdym uruchomieniu; wtedy potrzebujesz tylko sposobu, aby uruchomić to za każdym razem, gdy zmienia się SG.
dkellner
Czy chcesz zsynchronizować wszystkie 500 GB?
cubuspl42
5
To byłoby na temat rekomendacji oprogramowania. Zobacz to pytanie (nie dotyczy komputerów Mac): softwarerecs.stackexchange.com/questions/129/…
Nicolas Raoul
Czy ty też tego potrzebujesz? „Jeśli usunę plik na którymkolwiek komputerze, należy go również usunąć z drugiego komputera, zamiast go ponownie tworzyć”.
Patrick M,
Czy nie po to jest iCloud? hints.macworld.com/article.php?story=20120803092156975
Blazemonger

Odpowiedzi:

30

Sprawdź Bittorrent Sync . Ma funkcję synchronizacji jak Dropbox, ale bez chmury.

Oskar Persson
źródło
Wada: obie maszyny muszą być jednocześnie w trybie online, aby móc się synchronizować.
Gerald Schneider
18
@GeraldSchneider Czy wiesz o czymś, co nie ma tego ograniczenia?
Shelvacu
2
@shelvacu, niemożliwe. Jeśli chcesz zsynchronizować go bez konieczności korzystania z obu komputerów w trybie online, potrzebujesz pamięci w chmurze (w przeciwieństwie do żądania OP).
HalosGhost
5
Niekoniecznie przechowywanie w chmurze. Potrzebujesz jednego węzła, który jest zawsze online. Może to być komputer, NAS, usługa w chmurze, twoja własna instancja OwnCloud, jak zaproponował Lawrence lub inne podobne rozwiązanie. Ale dopóki nie masz jednego węzła zawsze online, to ograniczenie ma zawsze zastosowanie.
Gerald Schneider,
3
Korzystam z BitTorrent Sync i mogę go bardzo polecić - używam go w połączeniu z Dropboxem w przypadku plików, które są zbyt duże i nie warto tam zajmować miejsca. Jedną rzeczą do rozważenia jest to, że nie radzi sobie dobrze z równoczesną edycją plików - nie ma obsługi konfliktu, jak w przypadku Dropbox - ostatni edytowany plik po prostu wygrywa. Niekoniecznie problem, ale zależy to od twoich wymagań.
zelanix
16

Jeśli chcesz grać hardcorowo, możesz użyć komendy rsync natywnie w OsX , np. Pięciolinii * nix.

Przede wszystkim musisz mieć uprawnienia dostępu do zdalnego hosta przez ssh. Serwer OpenSSH jest wstępnie zainstalowany na Mac OSX i nie trzeba instalować żadnego dodatkowego pakietu. Wystarczy wprowadzić kilka ustawień systemowych. Aby włączyć serwer OpenSSH w systemie Mac OS X, otwórz Preferencje systemowe i kliknij Udostępnianie. Następnie zaznacz pole Zdalne logowanie, aby włączyć SSH, a następnie wybierz przycisk opcji Wszyscy użytkownicy z sekcji Zezwalaj na dostęp .

Możesz teraz uzyskać dostęp do zdalnego hosta przez ssh.

Teraz musisz utworzyć publiczny klucz dostępu w celu uzyskania dostępu bez hasła z lokalnej maszyny gościa do zdalnego hosta przez ssh. W tym celu musisz trochę ubrudzić rękę. :)

Najpierw sprawdź, czy masz już klucze uwierzytelniające. W terminalu uruchom:

sudo ls -la /var/root/.ssh

Jeśli zobaczysz „id_dsa” i id_dsa.pub , możesz pominąć resztę tej sekcji.

Na komputerze klienckim uruchom następujące polecenie w terminalu:

sudo ssh-keygen -t dsa -f /private/var/root/.ssh/id_dsa -C "comment about this key"

Po utworzeniu klucza dostępu na lokalnej maszynie gościa, musisz skopiować klucz publiczny gościa do pliku autoryzowanych kluczy hosta. Możesz to zrobić za pomocą prostej komendy Terminal, która dołącza klucz publiczny do listy autoryzowanych kluczy:

sudo cat /private/var/root/.ssh/id_dsa.pub | ssh root@remote_host_address 'cat - >> ~/.ssh/authorized_keys'

Poniższe polecenie, które wykona przyrostową kopię zapasową głównego systemu plików na lokalnym komputerze-gościu na zdalnym hoście:

/usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine

Możesz zmienić parametry rsync w celu zmiany zachowań synchronizacji. Jeśli dodasz to polecenie do crontab , synchronizację można uruchomić w dowolnych cyklach czasowych. Na przykład:

sudo crontab -e

dodaj wiersz poniżej do crontab:

*/30 * * * * /usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine

Synchronizacja będzie uruchamiana co pół godziny.

Oto przykładowy skrypt Pythona:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Cron automated synchronization script.

Desc: Synchronize remote folder into local machine. Duplicate processes 
      are disallowed until running process finished.

Usage:
    :: Change required variables as _user, _password, _domain etc.
    :: Edit crontab 
    # crontab -e

    :: Append line below.
    */30 * * * * python synchronizator.py 2>&1 &

Author: Sencer HAMARAT (RecNes)
E-Mail: [email protected]
"""

import shlex
from subprocess import Popen, PIPE
import logging as log
import sys

__author__ = "Sencer HAMARAT"

_user = 'username'
_password = 'password'
_domain = 'example.com'

_expectation = "Enter passphrase for key \'/home/%s/.ssh/id_rsa\':" % _user
_rsync = '/usr/bin/rsync --partial --progress -avvz -e'
_pub_key = '/home/%s/.ssh/id_rsa.pub' % _user
_ssh = '/usr/bin/ssh -i %s' % _pub_key
_remoteDir = '/home/%s/backup/' % _user
_localDir = '/home/%s/backup/' % _user
_command = '%s %s %s@%s:%s %s' % (_rsync, _ssh, _user, _domain, _remoteDir, _localDir)
run_command = shlex.split(_command)

_logFile = "logfile.log"
_logFormat = "%(asctime)s %(levelname)s %(name)s %(process)d %(threadName)s %(module)s:%(lineno)d %(funcName)s() " \
             "%(message)s\n"
log.basicConfig(filename=_logFile, level=log.DEBUG, format=_logFormat)

log.debug(u'Command will run: %s' % _command)

try:
    running_command = Popen(run_command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
    if running_command.poll():
        log.debug(repr(running_command.poll()))
        sys.exit()
    if _expectation in running_command.communicate():
        running_command.communicate(_password)
    print running_command.communicate()
except Exception as e:
    log.debug(repr(e))
finally:
    sys.exit()
Sencer H.
źródło
Zastanawiałem się nad użyciem rsync, jednak problem tkwi tutaj: „A jeśli rsync nie zostanie całkowicie ukończony po 30 minutach?” Nie chcę, aby dwa rsyncs występowały jednocześnie. Czy jest na to jakiś sposób?
Muncherelli
1
@ Muncherelli: pisanie małego mechanizmu blokującego wokół rsync jest stosunkowo bezbolesne, aby zapobiec jednoczesnym synchronizacjom. Zasadniczo, zawiń wywołanie rsync w skrypcie bash i możesz robić wszystko, co chcesz.
unperson325680
Dodałem przykładowy skrypt. Mam nadzieję, że to pomoże.
Sencer H.
To jest świetny skrypt. Dziękuję bardzo za pomoc. Zdecydowałem się na BitTorrent Sync ze względu na prostotę i ograniczanie przepustowości. (Wiem, że możesz ustawić maksymalne wykorzystanie przepustowości za pomocą rsync, ale BTS jest o wiele bardziej intuicyjny).
Muncherelli
8

Owncloud jest możliwym rozwiązaniem, jeśli chcesz uzyskać dostęp do Internetu.

Będziesz potrzebował własnego serwera do hostowania Owncloud, jednak jest to bardziej rozwiązanie oparte na serwerze, w którym twoi 2 klienci mogą uzyskać dostęp do tego, czego potrzebują, ale będzie tylko 1 kopia tego pliku, która będzie znajdować się na Serwer Owncloud.

Lawrence
źródło
Czy nadal jest tak, że możesz połączyć się tylko z jedną własną chmurą? Np. Nie mogę mieć własnego i dzielić się z bratem innym?
Thomas Weller
Przynajmniej klienci synchronizacji pulpitu obsługują teraz wiele jednoczesnych połączeń w chmurze. Ale także na jednym serwerze możesz udostępniać tylko określone pliki / katalogi, niekoniecznie wszystko.
ojdo
4

Niedawno natknąłem się na Syncthing. Wiele fajnych atrakcji.

http://syncthing.net/

użytkownik5522
źródło
2

W systemie Windows istnieje narzędzie SyncToy , które robi to w trzech krokach. czy Mac, jest to około ChronSync narzędzia lub tri-backup narzędzia

Ruslan Gerasimov
źródło
Cześć Ruslan, czy możesz edytować swoją odpowiedź, aby wyjaśnić, dlaczego ChronSync lub Tri-Backup byłyby idealnym rozwiązaniem dla OP? Teraz, jest to bardzo niska jakość odpowiedzi, a nie faktycznie odpowiedzieć na how w rachubę. Dzięki
Kanadyjczyk Luke REINSTATE MONICA
Cześć, dziękuję za twoje pytanie. Cóż, nie mówię, że te programy są idealnym rozwiązaniem, ale myślę, że jest to łatwe, ponieważ mają GUI, co oznacza również, że każdy może to zrobić bez głębokiego zrozumienia wielu wierszy poleceń z magiczną pisownią. Uważam również, że jeśli ktoś ma problem z używaniem wymienionych programów, należy go zadać w osobnym pytaniu, np. Co zrobił, co jest nie tak \ dziwne. Zamiast kopiować tutaj dokumentację bez zadawania konkretnych pytań.
Ruslan Gerasimov
2

Rozważ Unisona. Obsługuje dwukierunkową synchronizację plików. Możesz ustawić go według harmonogramu cronlub innej aplikacji do planowania.

http://www.cis.upenn.edu/~bcpierce/unison/

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.

Unison udostępnia wiele funkcji narzędziom, takim jak pakiety zarządzania konfiguracją (CVS, PRCS, Subversion, BitKeeper itp.), Rozproszone systemy plików (Coda itp.), Narzędzia do jednokierunkowego kopiowania (rsync itp.) I inne synchronizatory (Intellisync, Reconcile itp.). Jest jednak kilka punktów, w których to się różni:

Chloe
źródło
1
+1: Gdy wymagana jest synchronizacja dwukierunkowa, wyraźnie wygrywa z rsync, mając jednocześnie wszystkie fajne funkcje.
ojdo
1

Miałem szczęście z GoodSync z dwoma komputerami w tej samej sieci LAN, ale założę się, że nadal będzie dobrze działał w twojej sytuacji.

Oto ich opis produktu:

  • GoodSync synchronizuje pliki między komputerem, urządzeniami mobilnymi, FTP, SFTP, Amazon S3, Dyskiem Google, SkyDrive, WebDAV, Azure.
  • GoodSync tworzy kopie zapasowe plików na dyskach przenośnych, urządzeniach mobilnych oraz na FTP, S3, GDocs, SkyDrive, DAV lub innym komputerze.
  • Bezpośrednia synchronizacja P2P: GoodSync Connect synchronizuje pliki bezpośrednio między komputerami, bez spowolnienia spowodowanego synchronizacją za pośrednictwem serwerów innych firm.
  • GoodSync jest bardzo szybki i synchronizuje pliki na polecenie, okresowo, zgodnie z harmonogramem lub w czasie rzeczywistym (przy zmianie pliku).

Potrzebujesz tylko GoodSync skonfigurowanego na jednym z komputerów; obsługuje dwukierunkową synchronizację, a rodzaj synchronizacji można dostosować. Jest również wysoce zalecane przez CNet.

Jon Onstott
źródło
Cześć Jon, czy możesz edytować swoją odpowiedź, aby wyjaśnić, dlaczego GoodSync byłby idealnym rozwiązaniem dla OP? Teraz, jest to bardzo niska jakość odpowiedzi, a nie faktycznie odpowiedzieć na how w rachubę. Dzięki
Kanadyjczyk Luke REINSTATE MONICA
1

Innym możliwym rozwiązaniem jest AeroFS .

AeroFS dwukierunkowo synchronizuje dane między urządzeniami, jednocześnie przechowując je tylko na urządzeniach - dane nigdy nie zbliżają się do ich serwerów. AeroFS przechowuje historię zmian plików, aby w razie potrzeby móc przywrócić poprzednie wersje i zapewnia narzędzie do rozwiązywania konfliktów.

AeroFS działa na systemach Windows, Mac, Linux, iOS i Android, więc powinieneś go mieć.

chritohnide
źródło
0

Jeśli więc zasadniczo nie sprzeciwiasz się pamięci masowej w chmurze, istnieją dwa rozwiązania sprzętowe dla dysków zewnętrznych:

Kosmiczna małpa używa interesującego paradygmatu. Przydziela część twojego dysku do przechowywania małych fragmentów danych innych ludzi, a także przechowuje twoje dane na wielu dyskach innych ludzi (oczywiście zaszyfrowanych). W ten sposób istnieje duża nadmiarowość w przypadku awarii, a twoje maszyny nie muszą być w stanie się widzieć ani nawet być jednocześnie podłączone.

Transporter plików jest nieco prostszy, ponieważ dane są synchronizowane tylko na innych dyskach do transportowania plików, które zostały specjalnie skonfigurowane do synchronizacji.

Obie opcje są dobre dla dużych ilości danych, a sprzęt kupujesz tylko raz, bez opłaty abonamentowej.

tfinniga
źródło