중앙 서버없이 Dropbox와 같은 파일 동기화 [닫기]


22

인터넷을 통해 두 Mac의 보조 드라이브를 동기화하는 방법을 찾고 있습니다. 두 Mac간에 일관된 VPN 연결이 있으며 마치 서로 옆에 앉아있는 것처럼 액세스 할 수 있습니다.

한 Mac에서 파일을 수정하면 파일이 다른 Mac으로 푸시되고 그 반대의 경우 Dropbox와 같은 환경을 구현하는 방법을 찾고 있습니다. 또한 대역폭을 조절할 수있는 기능이 필요합니다 (따라서 1 메가 비트 업로드 파이프에 과부하가 걸리지 않습니다). 어떤 제안?

아, 그리고 내 드라이브가 500GB이므로 드롭 박스를 사용하는 것은 현재 문제가 아닙니다. 감사!


Linux 도구 인 "rsync"포트를 확인하십시오. 각 실행에서 파일을 동기화 할 수 있습니다. 그런 다음 SG가 변경 될 때마다 이것을 트리거하는 방법 만 있으면됩니다.
dkellner

500GB를 모두 동기화 하시겠습니까?
cubuspl42

5
소프트웨어 권장 사항에 대한 주제입니다. (맥 특정되지 않음)이 질문을 참조하십시오 softwarerecs.stackexchange.com/questions/129/...
니콜라스 라울

이것도 필요합니까? "한 컴퓨터에서 파일을 삭제하면 다시 만드는 대신 다른 컴퓨터에서도 파일을 삭제해야합니다."
Patrick M

이것이 iCloud가 아닌 것입니까? hints.macworld.com/article.php?story=20120803092156975
Blazemonger

답변:


30

Bittorrent Sync를 확인하십시오 . Dropbox와 같은 동기화 기능이 있지만 클라우드는 없습니다.


단점 : 동기화하려면 두 컴퓨터가 동시에 온라인 상태 여야합니다.
제랄드 슈나이더

18
@GeraldSchneider이 제한이없는 것을 알고 있습니까?
Shelvacu

2
@shelvacu, 불가능합니다. 두 컴퓨터를 모두 온라인 상태로 동기화하지 않고 동기화하려면 클라우드 스토리지가 필요합니다 (OP 요청에 대한 카운터).
HalosGhost

5
반드시 클라우드 스토리지 일 필요는 없습니다. 항상 온라인 상태 인 하나의 노드가 필요합니다. 이는 Lawrence 또는 기타 유사한 솔루션에서 제안한 컴퓨터, NAS, 클라우드 서비스, 자체 호스팅 OwnCloud 인스턴스 일 수 있습니다. 그러나 항상 온라인 상태 인 하나의 노드가없는 한이 제한 사항이 항상 적용됩니다.
제랄드 슈나이더

3
나는 BitTorrent Sync를 사용하고 그것을 강력히 추천 할 수 있습니다-Dropbox와 함께 너무 커서 공간을 차지할 가치가없는 파일을 사용합니다. 한 가지 고려해야 할 사항은 파일의 동시 편집을 잘 처리하지 못한다는 것입니다-Dropbox와 같은 충돌 처리가 없습니다-마지막으로 편집 된 파일이 단순히 승리합니다. 반드시 문제는 아니지만 요구 사항에 따라 다릅니다.
zelanix

16

하드 코어로 가고 싶다면 * nix staff와 같이 OsX 에서 기본적으로 rsync 명령을 사용할 수 있습니다 .

무엇보다 먼저 ssh로 원격 호스트에 액세스 할 수있는 권한이 있어야합니다. OpenSSH 서버 는 Mac OsX에 사전 설치되어 있으므로 추가 패키지를 설치할 필요가 없습니다. 일부 시스템 설정 만하면됩니다. Mac OS X에서 OpenSSH 서버를 활성화하려면 시스템 환경 설정 을 열고 공유를 클릭하십시오. 그리고, 원격 로그인 상자를 체크하여 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

30 분마다 동기화가 실행됩니다.

다음은 샘플 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 사용을 고려했지만 문제는 여기에 있습니다. "30 분 후에 rsync가 완전히 완료되지 않으면 어떻게됩니까?" 두 개의 rsync가 동시에 발생하는 것을 원하지 않습니다. 이 주위에 어떤 방법이 있습니까?
muncherelli

1
@muncherelli : 동시 동기화를 방지하기 위해 rsync 주위에 작은 "잠금"메커니즘을 작성하는 것은 비교적 고통스럽지 않습니다. 기본적으로 rsync 호출을 bash 스크립트로 래핑하면 원하는 것을 자유롭게 할 수 있습니다.
unperson325680

샘플 스크립트를 추가했습니다. 도움이 되길 바랍니다.
Sencer H.

이것은 훌륭한 스크립트입니다. 도움을 주셔서 대단히 감사합니다. 단순성과 대역폭 조절로 인해 BitTorrent Sync를 사용하기로 결정했습니다. (rsync로 최대 대역폭 사용량을 설정할 수 있지만 BTS가 훨씬 직관적이라는 것을 알고 있습니다.)
muncherelli

8

웹 기반 액세스를 원하는 경우 Owncloud 가 가능한 솔루션입니다.

Owncloud를 호스팅하려면 자체 서버가 필요하지만 2 명의 클라이언트가 원하는대로 액세스 할 수있는 서버 기반 솔루션이 더 많지만 해당 파일의 사본은 1 개뿐입니다. Owncloud 서버


하나의 owncloud에만 연결할 수 있습니까? 예를 들어, 나는 내 자신의 것을 가질 수없고 내 동생과 다른 것을 공유 할 수 있습니까?
Thomas Weller

최소한 데스크톱 동기화 클라이언트는 이제 여러 개의 동시 클라우드 연결을 지원합니다. 그러나 하나의 서버 내에서 모든 파일이 아닌 특정 파일 / 디렉토리 만 공유 할 수 있습니다.
ojdo


2

Windows의 경우 3 단계로 수행 하는 SyncToy 도구가 있습니다. Mac의 경우 ChronSync 도구 또는 트라이 백업 도구에 관한 것입니다


Ruslan, ChronSync 또는 Tri-Backup이 왜 OP에 이상적인 솔루션인지 설명하기 위해 답변을 편집 할 수 있습니까? 지금, 그것은 매우 낮은 품질의 대답은, 실제로하지 않는 대답 방법 질문입니다. 감사합니다
Canadian Luke REINSTATE MONICA

안녕하세요, 질문 해 주셔서 감사합니다. 글쎄, 나는이 프로그램들이 이상적인 해결책이라고 말하지는 않지만 GUI를 가지고 있기 때문에 충분히 쉽다고 생각한다. 즉, 많은 명령 줄 마법 철자를 깊이 이해하지 않고도 누구나 할 수 있음을 의미한다. 또한 나열된 프로그램을 사용하는 데 문제가있는 경우 자신이 한 일, 잘못된 일과 같은 별도의 질문을해야한다고 생각합니다. 특별한 질문을받지 않고 문서를 복사하는 것이 아닙니다.
Ruslan Gerasimov

2

유니슨을 고려하십시오. 양방향 파일 동기화를 처리합니다. 일정 cron또는 다른 일정 예약 앱 으로 일정을 설정할 수 있습니다 .

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

Unison은 Unix 및 Windows 용 파일 동기화 도구입니다. 파일 및 디렉토리 모음의 두 복제본을 다른 호스트 (또는 동일한 호스트의 다른 디스크)에 저장하고 개별적으로 수정 한 다음 각 복제본의 변경 사항을 다른 복제본으로 전파하여 최신 상태로 유지할 수 있습니다.

Unison은 구성 관리 패키지 (CVS, PRCS, Subversion, BitKeeper 등), 분산 파일 시스템 (Coda 등), 단방향 미러링 유틸리티 (rsync 등) 및 기타 동기화 도구와 같은 여러 기능을 공유합니다. (Intellisync, Reconcile 등). 그러나 몇 가지 차이점이 있습니다.


1
+1 : 양방향 동기화가 필요한 경우, 모든 멋진 기능을 갖춘 상태에서 rsync보다 분명히 승리합니다.
ojdo

1

같은 LAN에 두 대의 PC가 있는 GoodSync를 사용 하여 행운을 빕니다 . 그러나 여전히 귀하의 상황에서 잘 작동 할 것입니다.

제품 설명은 다음과 같습니다.

  • GoodSync는 컴퓨터, 모바일 장치, FTP, SFTP, Amazon S3, Google Drive, SkyDrive, WebDAV, Azure간에 파일을 동기화합니다.
  • GoodSync는 휴대용 드라이브, 모바일 장치 및 FTP, S3, GDocs, SkyDrive, DAV 또는 다른 컴퓨터에 파일을 백업합니다.
  • 직접 P2P 동기화 : GoodSync Connect는 타사 서버를 통한 동기화로 인한 속도 저하없이 컴퓨터간에 파일을 직접 동기화합니다.
  • GoodSync는 매우 빠르며 일정에 따라 또는 실시간으로 (파일 변경시) 명령 파일을 정기적으로 동기화합니다.

PC 중 하나에 만 GoodSync를 설정하면됩니다. 양방향 동기화를 처리하며 동기화 유형을 사용자 정의 할 수 있습니다. 또한 CNet에서 권장합니다.


Jon, 왜 GoodSync가 OP에 이상적인 솔루션인지 설명하기 위해 답변을 편집 할 수 있습니까? 지금, 그것은 매우 낮은 품질의 대답은, 실제로하지 않는 대답 방법 질문입니다. 감사합니다
Canadian Luke REINSTATE MONICA

1

또 다른 가능한 솔루션은 AeroFS 입니다.

AeroFS는 데이터를 장치에 저장하는 동안 장치간에 데이터를 양방향으로 동기화합니다. 데이터는 서버 근처에 가지 않습니다. AeroFS는 파일의 개정 내역을 유지하므로 필요할 때 이전 버전으로 되돌릴 수 있으며 충돌을 해결하기위한 도구를 제공합니다.

AeroFS는 Windows, Mac, Linux, iOS 및 Android에서 작동하므로 다루어야합니다.


0

따라서 클라우드 스토리지를 원칙적으로 반대하지 않는 경우 외부 드라이브를위한 두 가지 하드웨어 솔루션이 있습니다.

Space monkey 는 흥미로운 패러다임을 사용합니다. 디스크의 일부를 다른 사람의 작은 데이터 조각에 저장하고 다른 많은 사람들의 드라이브에 데이터를 저장합니다 (물론 암호화 됨). 이렇게하면 재난이 발생할 경우 중복성이 많이 발생하므로 시스템이 서로를 보거나 동시에 연결할 필요가 없습니다.

파일 전송기 는 동기화하기 위해 특별히 설정 한 다른 파일 전송기 드라이브에서만 데이터가 동기화되므로 조금 더 간단합니다.

두 옵션 모두 대량의 데이터에 적합하며 가입비없이 하드웨어를 한 번만 구매하면됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.