Dropbox-Like File Sync โดยไม่มีเซิร์ฟเวอร์กลาง [ปิด]


22

ฉันกำลังมองหาวิธีซิงค์ไดรฟ์รองใน Mac สองเครื่องของฉันผ่านอินเทอร์เน็ต ฉันมีการเชื่อมต่อ VPN ที่สอดคล้องกันระหว่างแม็คสองเครื่องและฉันสามารถเข้าถึงได้ราวกับว่าพวกเขานั่งอยู่ข้างๆกัน

ฉันกำลังมองหาวิธีที่จะนำประสบการณ์การใช้งานแบบ Dropbox มาใช้ซึ่งหากฉันแก้ไขไฟล์ใน Mac เครื่องหนึ่งไฟล์จะถูกผลักไปยัง Mac เครื่องอื่น (และในทางกลับกัน) ฉันยังต้องการความสามารถในการ จำกัด ความเร็วแบนด์วิดท์ (ดังนั้นการอัปโหลด 1 เมกกะบิตขนาดเล็กของเราจึงไม่ได้รับการโอเวอร์โหลด) ข้อเสนอแนะใด ๆ

โอ้และการใช้ดรอปบ็อกซ์นั้นเป็นคำถามที่เกิดขึ้นในขณะนี้เนื่องจากไดรฟ์ของฉันมีขนาด 500GB ขอบคุณ!


ตรวจสอบพอร์ตของ "rsync" ซึ่งเป็นเครื่องมือ Linux สำหรับสิ่งนั้น มันสามารถซิงโครไนซ์ไฟล์ของคุณในการวิ่งแต่ละครั้ง; จากนั้นคุณต้องการวิธีที่จะทริกเกอร์สิ่งนี้เมื่อใดก็ตามที่มีการเปลี่ยนแปลง sg
dkellner

คุณต้องการซิงค์ 500GB ทั้งหมดหรือไม่
cubuspl42

5
นี่จะเป็นหัวข้อที่แนะนำเกี่ยวกับซอฟต์แวร์ ดูคำถามนี้ (ไม่เฉพาะเจาะจงกับ Mac): softwarerecs.stackexchange.com/questions/129/…
Nicolas Raoul

คุณต้องการสิ่งนี้ด้วยหรือไม่ "ถ้าฉันลบไฟล์ในเครื่องใดเครื่องหนึ่งก็ควรจะลบออกจากเครื่องอื่นเช่นกันแทนที่จะสร้างขึ้นใหม่"
Patrick M

นี่ไม่ใช่สิ่งที่เป็น iCloud ใช่หรือไม่ hints.macworld.com/article.php?story=20120803092156975
Blazemonger

คำตอบ:


30

ตรวจสอบBittorrent ซิงค์ มันมีฟังก์ชั่นการซิงค์เช่น Dropbox แต่ไม่มีระบบคลาวด์


ข้อเสีย: ทั้งสองเครื่องจะต้องออนไลน์พร้อมกันเพื่อให้สามารถซิงค์ได้
Gerald Schneider

18
@GeraldSchneider คุณรู้จักสิ่งที่ไม่มีข้อ จำกัด นี้หรือไม่?
Shelvacu

2
@shelvacu เป็นไปไม่ได้ หากคุณต้องการซิงค์โดยไม่ต้องใช้ทั้งสองเครื่องออนไลน์คุณจำเป็นต้องใช้ที่เก็บข้อมูลบนคลาวด์
HalosGhost

5
ไม่จำเป็นต้องเป็นที่เก็บข้อมูลบนคลาวด์ คุณต้องมีหนึ่งโหนดที่ออนไลน์อยู่เสมอ นี่อาจเป็นคอมพิวเตอร์, NAS, บริการคลาวด์, โฮสต์อินสแตนซ์ OwnCloud ของคุณที่เสนอโดยลอเรนซ์หรือโซลูชั่นอื่น ๆ ที่คล้ายกัน แต่ตราบใดที่คุณไม่มีโหนดหนึ่งออนไลน์ข้อ จำกัด นี้จะมีผลเสมอ
เจอรัลด์ชไนเดอร์

3
ฉันใช้ BitTorrent Sync และฉันขอแนะนำเป็นอย่างยิ่ง - ฉันใช้ร่วมกับ Dropbox สำหรับไฟล์ที่มีขนาดใหญ่เกินไปและไม่คุ้มค่ากับการใช้พื้นที่ สิ่งหนึ่งที่ควรพิจารณาคือมันไม่สามารถจัดการกับการแก้ไขไฟล์พร้อมกันได้ดี - ไม่มีการจัดการความขัดแย้งเช่นเดียวกับ Dropbox - ไฟล์ที่แก้ไขล่าสุดเพียงแค่ชนะ ไม่ได้เป็นปัญหา แต่ขึ้นอยู่กับความต้องการของคุณ
zelanix

16

หากคุณต้องการที่จะไม่ยอมใครง่ายๆคุณสามารถใช้คำสั่งrsyncได้ในOsXเช่น * nix staff

ก่อนทุกอย่างคุณต้องมีสิทธิ์ในการเข้าถึงรีโมตโฮสต์โดย ssh เซิร์ฟเวอร์ OpenSSH ได้รับการติดตั้งล่วงหน้าบน Mac OsX และคุณไม่จำเป็นต้องติดตั้งแพ็คเกจเพิ่มเติม เพียงแค่ต้องทำการตั้งค่าระบบบางอย่าง หากต้องการเปิดใช้งานเซิร์ฟเวอร์ OpenSSH บน Mac OS X ให้เปิดการตั้งค่าระบบและคลิกเพื่อแชร์ และกว่าตรวจสอบระยะไกลกล่องเข้าสู่ระบบเพื่อเปิดใช้งาน SSH แล้วเลือกปุ่มตัวของผู้ใช้ทั้งหมดจากอนุญาตการเข้าถึงสำหรับส่วน

ตอนนี้คุณสามารถเข้าถึงรีโมตโฮสต์โดย ssh

ตอนนี้คุณต้องสร้างคีย์การเข้าถึงสาธารณะสำหรับการเข้าถึงแบบไม่ใช้รหัสผ่านจากเครื่องผู้เยี่ยมชมท้องถิ่นไปยังโฮสต์ระยะไกลผ่าน ssh เพื่อที่คุณจะต้องทำให้มือของคุณสกปรกไปหน่อย :)

ก่อนอื่นให้ตรวจสอบว่าคุณมีคีย์การตรวจสอบสิทธิ์อยู่แล้วหรือไม่ ในเทอร์มินัลให้เรียกใช้:

sudo ls -la /var/root/.ssh

หากคุณเห็น "id_dsa" และid_dsa.pubคุณสามารถข้ามส่วนที่เหลือของส่วนนี้ได้

บนเครื่องไคลเอนต์เรียกใช้ต่อไปนี้ในเทอร์มินัล:

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

หลังจากสร้างรหัสการเข้าถึงในเครื่องแขกท้องถิ่นคุณต้องคัดลอกกุญแจสาธารณะของผู้เยี่ยมชมไปยังไฟล์ authorized_keys ของโฮสต์ คุณสามารถทำได้ด้วยคำสั่งเทอร์มินัลอย่างง่ายที่ผนวกคีย์สาธารณะเข้ากับรายการของคีย์ที่ได้รับอนุญาต:

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

คำสั่งด้านล่างที่จะทำการสำรองข้อมูลที่เพิ่มขึ้นของระบบไฟล์รูทของคุณในเครื่องแขกท้องถิ่นไปยังโฮสต์ระยะไกลของคุณ:

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

คุณสามารถเปลี่ยนพารามิเตอร์ของ rsync เพื่อเปลี่ยนพฤติกรรมการซิงโครไนซ์ หากคุณเพิ่มคำสั่งนี้ลงในcrontab การซิงโครไนซ์สามารถเรียกใช้ในรอบเวลาใดก็ได้ ตัวอย่างเช่น:

sudo crontab -e

ต่อท้ายบรรทัดด้านล่างเพื่อ 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

นี่จะใช้การซิงโครไนซ์ทุกครึ่งชั่วโมง

นี่คือสคริปต์ Python ตัวอย่าง:

#!/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 แต่ปัญหาอยู่ที่นี่: "จะเป็นอย่างไรถ้า rsync ไม่เสร็จสมบูรณ์หลังจาก 30 นาที" ฉันไม่ต้องการ rsyncs สองอันที่เกิดขึ้นในเวลาเดียวกัน มีวิธีแก้ไขไหม?
muncherelli

1
@uncherelli: มันค่อนข้างเจ็บปวดที่จะเขียนกลไก "ล็อค" เล็ก ๆ รอบ ๆ rsync เพื่อป้องกันการซิงค์พร้อมกัน โดยทั่วไปให้ตัดการเรียก rsync ในสคริปต์ทุบตีและคุณมีอิสระที่จะทำสิ่งที่คุณต้องการ
unperson325680

ฉันเพิ่มสคริปต์ตัวอย่าง ฉันหวังว่ามันจะช่วย
Sencer H.

นี่เป็นสคริปต์ที่ยอดเยี่ยม ขอบคุณมากสำหรับความช่วยเหลือ ฉันตัดสินใจไปกับ BitTorrent Sync เนื่องจากความเรียบง่ายและการควบคุมปริมาณแบนด์วิธ (ฉันรู้ว่าคุณสามารถตั้งค่าการใช้แบนด์วิดธ์สูงสุดด้วย rsync ได้ แต่ BTS นั้นใช้งานง่ายกว่า)
muncherelli

8

Owncloudเป็นทางออกที่เป็นไปได้หากคุณต้องการเข้าถึงผ่านเว็บ

คุณจะต้องมีเซิร์ฟเวอร์ของตัวเองเพื่อโฮสต์ Owncloud บน แต่มันเป็นโซลูชันที่ใช้เซิร์ฟเวอร์มากกว่าที่ลูกค้า 2 รายของคุณสามารถเข้าถึงสิ่งที่พวกเขาต้องการได้ แต่จะมี 1 สำเนาของไฟล์ที่เป็นปัญหาซึ่งจะอยู่บน เซิร์ฟเวอร์ Owncloud


มันยังคงเป็นกรณีที่คุณสามารถเชื่อมต่อกับหนึ่งของตัวเองได้ไหม? เช่นฉันไม่มีของตัวเองและแบ่งปันอีกอันกับพี่ชายของฉันได้ไหม
Thomas Weller

อย่างน้อยตอนนี้ไคลเอ็นต์การซิงค์เดสก์ท็อปสนับสนุนการเชื่อมต่อคลาวด์หลายรายการพร้อมกัน แต่ภายในเซิร์ฟเวอร์เดียวคุณสามารถแชร์เฉพาะไฟล์ / ไดเรกทอรีเฉพาะทุกอย่าง
ojdo


2

หาก Windows มีเครื่องมือSyncToyซึ่งทำในสามขั้นตอน ถ้าเป็น Mac มันเป็นเรื่องเกี่ยวกับเครื่องมือChronSyncหรือเครื่องมือสำรองไตร


สวัสดี Ruslan คุณสามารถแก้ไขคำตอบของคุณเพื่ออธิบายว่าทำไม ChronSync หรือ Tri-Backup จึงเป็นโซลูชั่นที่สมบูรณ์แบบสำหรับ OP ตอนนี้ก็เป็นคำตอบที่มีคุณภาพต่ำมากและไม่จริงตอบวิธีของคำถาม ขอบคุณ
ลุคแคนาดาติดตั้ง MONICA ใหม่

สวัสดีขอบคุณสำหรับคำถามของคุณ ดีฉันไม่ได้บอกโปรแกรมเหล่านี้เป็นทางออกที่ดี แต่ฉันคิดว่ามันง่ายพอเพราะพวกเขามี GUI นั่นก็หมายความว่าทุกคนสามารถทำได้โดยไม่ต้องมีความเข้าใจอย่างลึกซึ้งเกี่ยวกับการสะกดคำวิเศษ นอกจากนี้ฉันเชื่อว่าหากมีปัญหาในการใช้โปรแกรมที่ระบุไว้ควรถามคำถามแยกต่างหากเช่นสิ่งที่เขาทำสิ่งที่ผิดปกติ \ มันเป็นมากกว่าการคัดลอกเอกสารที่นี่สำหรับพวกเขาโดยไม่ต้องถามคำถามใด ๆ
Ruslan Gerasimov

2

พิจารณาพร้อมเพรียง มันจัดการการซิงโครไนซ์ไฟล์แบบสองทาง คุณสามารถตั้งค่าตามกำหนดเวลาด้วยcronหรือแอปการตั้งเวลาอื่น ๆ

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

Unison เป็นเครื่องมือซิงโครไนซ์ไฟล์สำหรับ Unix และ Windows อนุญาตให้เก็บแบบจำลองสองชุดของไฟล์และไดเรกทอรีที่จะจัดเก็บในโฮสต์ที่แตกต่างกัน (หรือดิสก์ที่แตกต่างกันในโฮสต์เดียวกัน), แก้ไขแยกต่างหากและนำมาถึงวันที่โดยการเผยแพร่การเปลี่ยนแปลงในแต่ละแบบจำลองอื่น ๆ

พร้อมเพรียงแบ่งปันจำนวนของคุณสมบัติที่มีเครื่องมือเช่นแพคเกจการจัดการการกำหนดค่า (CVS, PRCS, การโค่นล้ม, BitKeeper, ฯลฯ ), ระบบไฟล์แบบกระจาย (Coda, ฯลฯ ), ยูทิลิตี้การมิเรอร์แบบทิศทางเดียว (rsync เป็นต้น) และ synchronizer อื่น ๆ (Intellisync, กระทบยอด, ฯลฯ ) อย่างไรก็ตามมีหลายจุดที่แตกต่าง:


1
+1: เมื่อต้องการซิงค์แบบสองทิศทางสิ่งนี้จะชนะได้อย่างชัดเจนในขณะที่มีคุณสมบัติเจ๋ง ๆ ทั้งหมด
ojdo

1

ฉันโชคดีกับGoodSyncกับพีซีสองเครื่องใน LAN เดียวกัน แต่ฉันคิดว่ามันจะยังคงทำงานได้ดีในสถานการณ์ของคุณ

นี่คือคำอธิบายผลิตภัณฑ์ของพวกเขา:

  • GoodSync ซิงค์ไฟล์ระหว่างคอมพิวเตอร์อุปกรณ์มือถือ FTP, SFTP, Amazon S3, Google Drive, SkyDrive, WebDAV, Azure
  • GoodSync สำรองไฟล์ไปยังไดรฟ์พกพาอุปกรณ์พกพาและ FTP, S3, GDocs, SkyDrive, DAV หรือคอมพิวเตอร์เครื่องอื่น
  • Direct P2P Sync: GoodSync Connect ซิงค์ไฟล์โดยตรงระหว่างคอมพิวเตอร์ของคุณโดยไม่ต้องมีความช้าโดยการซิงค์ผ่านเซิร์ฟเวอร์บุคคลที่สาม
  • GoodSync นั้นรวดเร็วและซิงค์ไฟล์ในคำสั่งของคุณเป็นระยะตามกำหนดเวลาหรือตามเวลาจริง (ตามการเปลี่ยนไฟล์)

คุณต้องติดตั้ง GoodSync ไว้ในพีซีเครื่องใดเครื่องหนึ่งของคุณเท่านั้น มันจัดการการซิงโครไนซ์แบบสองทางและชนิดของการซิงค์ที่สามารถปรับแต่งได้ นอกจากนี้ขอแนะนำโดย CNet


สวัสดีจอนคุณสามารถแก้ไขคำตอบของคุณเพื่ออธิบายว่าทำไม GoodSync จึงเป็นโซลูชั่นที่สมบูรณ์แบบสำหรับ OP ตอนนี้ก็เป็นคำตอบที่มีคุณภาพต่ำมากและไม่จริงตอบวิธีของคำถาม ขอบคุณ
ลุคแคนาดาติดตั้ง MONICA ใหม่

1

อีกวิธีที่เป็นไปได้คือAeroFS

AeroFS ซิงค์ข้อมูลระหว่างอุปกรณ์ของคุณแบบสองทิศทางในขณะที่จัดเก็บข้อมูลบนอุปกรณ์ของคุณเท่านั้นข้อมูลของคุณจะไม่เข้าใกล้เซิร์ฟเวอร์ของพวกเขา AeroFS รักษาประวัติการแก้ไขสำหรับไฟล์ของคุณเพื่อให้คุณสามารถเปลี่ยนกลับเป็นเวอร์ชันก่อนหน้าเมื่อจำเป็นและเป็นเครื่องมือสำหรับการแก้ไขข้อขัดแย้ง

AeroFS ทำงานได้บน Windows, Mac, Linux, iOS และ Android ดังนั้นคุณควรจะครอบคลุม


0

ดังนั้นหากคุณไม่ได้ต่อต้านการจัดเก็บบนคลาวด์โดยหลักการแล้วมีวิธีแก้ไขปัญหาฮาร์ดแวร์สองอย่างสำหรับไดรฟ์ภายนอก:

Space Monkeyใช้กระบวนทัศน์ที่น่าสนใจ .. มันจัดสรรส่วนหนึ่งของดิสก์ของคุณเพื่อเก็บข้อมูลชิ้นเล็ก ๆ ของคนอื่นและยังเก็บข้อมูลของคุณบนไดรฟ์ของผู้อื่นจำนวนมาก (เข้ารหัสแน่นอน) ด้วยวิธีนี้มีความซ้ำซ้อนจำนวนมากในกรณีที่เกิดภัยพิบัติและเครื่องของคุณไม่จำเป็นต้องเห็นกันและกันหรือแม้แต่เชื่อมต่อในเวลาเดียวกัน

ตัวส่งไฟล์เป็นบิตที่ง่ายกว่าเนื่องจากข้อมูลจะถูกซิงค์บนไดรฟ์ตัวส่งไฟล์อื่นที่คุณตั้งค่าให้ซิงค์โดยเฉพาะเท่านั้น

ตัวเลือกทั้งสองนั้นดีสำหรับข้อมูลจำนวนมากและคุณเพียงซื้อฮาร์ดแวร์ครั้งเดียวโดยไม่เสียค่าธรรมเนียมการสมัครสมาชิก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.