Merkezi bir sunucu olmadan Dropbox Benzeri Dosya Senkronizasyonu [kapalı]


22

İki Mac'imde ikincil sürücüleri İnternet üzerinden senkronize etmenin bir yolunu arıyorum. İki mac arasında tutarlı bir VPN bağlantım var ve onlara yanlarında oturuyormuş gibi erişebiliyorum.

Bir Mac'ta bir dosyayı değiştirirsem, dosyanın diğer Mac'e (ve tersi) itileceği bir Dropbox benzeri deneyim uygulamanın bir yolunu arıyorum. Ayrıca bant genişliğini kısma yeteneğine de ihtiyacım var (bu nedenle küçük 1 megabit yükleme borumuz aşırı yüklenmiyor). Baska öneri?

Oh, ve dropbox kullanarak şu anda benim disk 500GB olduğu için söz konusu değil. Teşekkürler!


Bunun için bir Linux aracı olan "rsync" portunu kontrol edin. Her çalıştırmada dosyalarınızı senkronize edebilir; o zaman bunu yalnızca sg değiştiğinde tetiklemek için bir yol gerekir.
dkellner

500 GB’nin senkronize edilmesini istiyor musunuz?
cubuspl42

5
Bu, Yazılım Önerileriyle ilgili olacaktır. Bu soruya bakın (Mac’e özgü değil): softwarerecs.stackexchange.com/questions/129/…
Nicolas Raoul

Buna da ihtiyacınız var mı? "Herhangi bir makinedeki dosyayı silersem, yeniden oluşturulmak yerine diğer makineden de silinmelidir."
Patrick M,

Yanıtlar:


30

Check out Bittorrent Sync . Dropbox gibi senkronizasyon işlevselliğine sahiptir ancak bulutsuzdur.


Dezavantajı: Her iki makinenin senkronizasyon yapabilmek için aynı anda çevrimiçi olması gerekir.
Gerald Schneider

18
@GeraldSchneider Bu sınırlamaya sahip olmayan bir şey biliyor musunuz?
Shelvacu

2
@ shelvacu, mümkün değil. Her iki makineye de çevrimiçi ihtiyaç duymadan senkronize etmek istiyorsanız, bulut depolama yapmanız gerekir (OP isteğine karşı).
HalosGhost

5
Mutlaka bir bulut depolama değil. Her zaman çevrimiçi olan bir düğüme ihtiyacınız var. Bu bir bilgisayar, NAS, bulut hizmeti, Lawrence tarafından önerilen şekilde kendi barındırma sahibi OwnCloud örneğiniz veya benzeri bir çözüm olabilir. Ancak her zaman çevrimiçi olarak bir düğümünüz olmadıkça bu sınırlama her zaman geçerlidir.
Gerald Schneider,

3
BitTorrent Sync'i kullanıyorum ve şiddetle tavsiye ediyorum - çok büyük ve orada yer almaya değmeyen dosyalar için Dropbox ile birlikte kullanıyorum. Yine de göz önünde bulundurulması gereken bir şey, dosyaların eşzamanlı düzenlemeleriyle iyi başa çıkmadığıdır - Dropbox ile olduğu gibi herhangi bir çakışma yoktur - en son düzenlenen dosya basitçe kazanır. Mutlaka bir sorun değil ama gereksinimlerinize bağlı.
zelanix

16

Sertleşmek istiyorsanız, * nix personeli gibi , OsX'te yerel olarak rsync komutunu kullanabilirsiniz .

Her şeyden önce, uzak ana bilgisayara ssh ile erişim izniniz olmalıdır. OpenSSH sunucusu Mac OsX'e önceden yüklenmiştir ve herhangi bir ek paket kurmanıza gerek yoktur. Sadece bazı sistem ayarlarını yapmanız gerekir. OpenSSH sunucusunu Mac OS X'te etkinleştirmek için, Sistem Tercihleri'ni açın ve Paylaşım'a tıklayın. Ve SSH etkinleştirmek için Uzaktan Giriş kutusunu işaretleyin daha sonra etiketli radyo düğmesini seçin Tüm Kullanıcılar gelen İçin Erişime İzin bölüm.

Şimdi uzak ana bilgisayara ssh ile erişebilirsiniz.

Şimdi, yerel konuk makinesinden uzak ana bilgisayara ssh üzerinden şifresiz erişim için bir ortak erişim anahtarı oluşturmanız gerekir. Bunun için elinizi biraz kirletmelisiniz. :)

İlk olarak, kimlik doğrulama anahtarınızın olup olmadığını belirleyin. In Terminali , çalıştırın:

sudo ls -la /var/root/.ssh

" İd_dsa " ve id_dsa.pub görürseniz , bu bölümün kalanını atlayabilirsiniz.

İstemci makinede, Terminal'de aşağıdakileri çalıştırın:

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

Yerel konuk makinesinde erişim anahtarı oluşturulduktan sonra, konuğun ortak anahtarını konağın yetkili_key dosyasına kopyalamanız gerekir. Bunu, genel anahtarı yetkili anahtarlar listesine ekleyen basit bir Terminal komutuyla yapabilirsiniz:

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

Aşağıdaki komut, yerel konuk makinenizdeki kök dosya sisteminizi uzaktaki ana makinenize artımlı bir şekilde yedekleyecektir:

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

Değişiklik senkronizasyonu davranışları için rsync parametrelerini değiştirebilirsiniz. Bu komutu crontab'a eklerseniz senkronizasyon herhangi bir zaman döngüsünde çalıştırılabilir. Örneğin:

sudo crontab -e

crontab'a aşağıdaki satırı ekle:

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

Bu, her yarım saatte bir senkronizasyon çalıştırılacak.

Örnek Python betiği:

#!/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: sencerhamarat@gmail.com
"""

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()

Rsync'i kullanmayı düşünmüştüm, ancak sorun burada yatmaktadır: "30 dakika sonra rsync tamamen bitmediyse?" Aynı anda gerçekleşen iki senkronizasyon istemiyorum. Bunun bir yolu var mı?
muncherelli

1
@muncherelli: Eşzamanlı senkronizasyonları önlemek için rsync'in etrafına küçük bir "kilitleme" mekanizması yazmak nispeten ağrısızdır. Temel olarak, rsync çağrısını bir bash betiğine sarın ve istediğiniz her şeyi yapmakta özgürsünüz.
unperson325680

Örnek komut dosyası ekledim. Umarım yardımı olur.
Sencer H.

Bu harika bir senaryo. Yardımın için çok teşekkürler. Sadelik ve bant genişliği azaltma nedeniyle BitTorrent Sync ile gitmeye karar verdim. (Maksimum bant genişliği kullanımını rsync ile ayarlayabileceğinizi biliyorum, ancak BTS çok daha sezgiseldir).
muncherelli

8

Web tabanlı erişim istiyorsanız Owncloud olası bir çözümdür.

Owncloud'u barındırmak için kendi sunucunuza ihtiyacınız olacak ancak 2 müşterinizin ihtiyaç duydukları şeye erişebilecekleri sunucu tabanlı bir çözüm daha var, ancak söz konusu dosyanın yalnızca 1 kopyası olacaktır. Owncloud sunucusu.


Hala sadece bir owncloud'a bağlanabiliyor musunuz? Mesela kendime ait olanı elde edemem ve başka birini kardeşimle paylaşamıyorum?
Thomas Weller

En azından masaüstü senkronizasyon istemcileri şimdi aynı anda birden fazla bulut bağlantısını desteklemektedir. Ancak aynı zamanda bir sunucuda, her şeyi değil, yalnızca belirli dosyaları / dizinleri paylaşabilirsiniz.
ojdo


2

Windows ise, üç adımda yapan bir SyncToy aracı vardır. Mac ise, ChronSync aracı veya üçlü yedekleme aracı hakkında


Merhaba Ruslan, ChronSync veya Tri-Backup'ın OP için neden ideal çözüm olacağını açıklamak için cevabınızı düzenleyebilir misiniz ? Şu anda, çok düşük kaliteli cevaptır ve aslında vermez cevap how soru. Teşekkürler
Kanadalı Luke MONICA REINSTATE

Merhaba, sorunuz için teşekkür ederim. Eh, bu programların ideal bir çözüm olduğunu söylemiyorum, ama bunun kolay olduğunu düşünüyorum çünkü GUI'ye sahipler, bu da herkesin sihir hecelemelerini derinden anlayabilmeksizin yapabileceği anlamına geliyor. Ayrıca, birinin listelenen programları kullanma konusunda bir sorunu varsa, ayrı bir soruda sorulması gerektiği, ne yaptığı gibi, neyin yanlış olduğu konusunda inanıyorum. Belli bir soru sorulmadan onlar için belgelerin kopyalanması yerine.
Ruslan Gerasimov

2

Unison'u düşünün. İki yönlü dosya senkronizasyonunu gerçekleştirir. Bunu bir zamanlamaya cronveya başka bir zamanlama uygulamasıyla ayarlayabilirsiniz .

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

Unison, Unix ve Windows için bir dosya senkronizasyon aracıdır. Bir dosya ve dizin koleksiyonunun iki kopyasının, farklı ana bilgisayarlarda (veya aynı ana bilgisayardaki farklı disklerde) depolanmasına, ayrı olarak değiştirilmesine ve daha sonra her bir çoğaltmadaki değişiklikleri diğerine geçirerek güncellenmesine olanak tanır.

Unison, yapılandırma yönetimi paketleri (CVS, PRCS, Subversion, BitKeeper, vb.), Dağıtılmış dosya sistemleri (Coda, vb.), Tek yönlü yansıtma yardımcı programları (rsync, vb.) Ve diğer senkronizatörler gibi araçlarla birçok özelliği paylaşır. (Intellisync, Reconcile, vb.) Ancak, farklı olduğu birkaç nokta var:


1
+1: İki yönlü senkronizasyon gerektiğinde, bu özellik tüm harika özelliklerine sahipken açıkça rsync'i kazanıyor.
ojdo

1

GoodSync ile aynı LAN'daki iki PC'de iyi şanslar elde ettim, ancak durumunuzda hala iyi çalışacağına bahse girerim.

İşte ürün açıklaması:

  • GoodSync, bilgisayarınız, mobil cihazlar, FTP, SFTP, Amazon S3, Google Drive, SkyDrive, WebDAV, Azure arasında dosyaları senkronize eder.
  • GoodSync, dosyaları taşınabilir sürücülere, mobil cihazlara ve FTP, S3, GDocs, SkyDrive, DAV veya başka bir bilgisayara yedekler.
  • Doğrudan P2P Senkronizasyonu: GoodSync Connect, 3. taraf sunucular arasında senkronizasyon yapıldığında yavaşlama olmadan dosyaları doğrudan bilgisayarınız arasında senkronize eder.
  • GoodSync çok hızlıdır ve komutunuzdaki dosyaları periyodik olarak, bir programa göre veya gerçek zamanlı olarak (dosya değişikliğinde) senkronize eder.

GoodSync'in yalnızca PC'nizden birinde kurulması gerekir; iki yönlü senkronizasyonu gerçekleştirir ve yaptığı senkronizasyon türü özelleştirilebilir. Ayrıca, CNet tarafından şiddetle tavsiye edilir.


Merhaba Jon, GoodSync'in neden OP için ideal bir çözüm olduğunu açıklamak için cevabınızı düzenleyebilir misiniz ? Şu anda, çok düşük kaliteli cevaptır ve aslında vermez cevap how soru. Teşekkürler
Kanadalı Luke MONICA REINSTATE

1

Başka bir olası çözüm AeroFS .

AeroFS iki yönlü olarak cihazlarınız arasında veri senkronize ederken, yalnızca cihazlarınızı cihazınıza kaydetmez - verileriniz asla sunucularına yaklaşmaz. AeroFS, dosyalarınızın revizyon geçmişini korur, böylece gerektiğinde önceki sürümlere geri dönebilirsiniz ve çakışmaları çözmek için bir araç sunar.

AeroFS, Windows, Mac, Linux, iOS ve Android'de çalışır, bu yüzden sizi kapsamalıdır.


0

Bu nedenle, ilke olarak bulut depolamasına karşı değilseniz, harici sürücüler için iki donanım çözümü vardır:

Uzay maymunu ilginç bir paradigma kullanır. Diskinizin bir bölümünü diğer kişilerin verilerinin küçük parçalarını depolamaya ayırır ve ayrıca verilerinizi birçok başka kişinin sürücüsünde (şifrelenmiş) depolar. Bu şekilde, felaket durumunda çok fazla fazlalık söz konusudur ve makinelerinizin birbirlerini görmesi, hatta aynı anda bağlanmasına gerek yoktur.

Dosya taşıyıcı biraz daha basittir, çünkü veriler yalnızca senkronize etmek için kurduğunuz diğer dosya taşıyıcı sürücülerinde senkronize edilir.

Her iki seçenek de büyük miktarda veri için iyidir ve bir abonelik ücreti olmadan sadece bir kez donanım satın alırsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.