web-dev-qa-db-ja.com

中央サーバーなしのDropboxのようなファイル同期

2台のMacのセカンダリドライブをインターネット経由で同期する方法を探しています。 2つのMac間のVPN接続は一貫しており、まるで隣り合っているかのようにアクセスできます。

Dropboxのようなエクスペリエンスを実装する方法を探しています。あるMacでファイルを変更すると、ファイルは他のMacにプッシュされます(逆も同様です)。また、帯域幅を調整する機能も必要です(1メガビットのアップロードパイプが過負荷にならないように)。助言がありますか?

私のドライブは500GBなので、Dropboxを使用することは今のところ問題外です。ありがとう!

22
muncherelli

チェックアウト Bittorrent Sync 。 Dropboxのような同期機能がありますが、クラウドはありません。

30
Oskar Persson

ハードコアに行きたい場合は、*-nixスタッフのようにOsXでネイティブにrsyncコマンドを使用できます。

すべての前に、sshによるリモートホストへのアクセス許可が必要です。 OpenSSHサーバーはMac OsXにプリインストールされており、追加のパッケージをインストールする必要はありません。いくつかのシステム設定を行う必要があるだけです。 Mac OS XでOpenSSHサーバーを有効にするには、システム環境設定を開き、[共有]をクリックします。次に、リモートログインボックスをオンにしてSSHを有効にし、All Usersというラベルの付いたラジオボタンをから選択しますアクセスセクション。

これで、sshを使用してリモートホストにアクセスできます。

次に、sshを介してローカルゲストマシンからリモートホストにパスワードなしでアクセスするための公開アクセスキーを作成する必要があります。そのためには少し手を汚さなければなりません。 :)

まず、認証キーがすでにあるかどうかを確認します。 Terminalで、以下を実行します。

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: [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()
16
Sencer H.

Owncloud は、Webベースのアクセスが必要な場合に考えられる解決策です。

Owncloudをホストするには独自のサーバーが必要ですが、2つのクライアントが必要なものに自由にアクセスできるサーバーベースのソリューションですが、問題のファイルのコピーは1つしかなく、 Owncloudサーバー。

8
Lawrence

最近Syncthingを見つけました。クールな機能がたくさん。

http://syncthing.net/

4
user5522

Windowsの場合、3つのステップで実行する SyncToy ツールがあります。 Macの場合、約 ChronSync ツールまたは tri-backup ツール

2

Unisonを検討してください。双方向のファイル同期を処理します。 cronまたはその他のスケジューリングアプリを使用して、スケジュールに基づいて設定できます。

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

Unisonは、UnixおよびWindows用のファイル同期ツールです。これにより、ファイルとディレクトリのコレクションの2つのレプリカを異なるホスト(または同じホスト上の異なるディスク)に格納し、個別に変更して、各レプリカの変更を他のレプリカに伝達することで最新の状態にすることができます。

Unisonは、構成管理パッケージ(CVS、PRCS、Subversion、BitKeeperなど)、分散ファイルシステム(Codaなど)、単方向ミラーリングユーティリティ(rsyncなど)、およびその他のシンクロナイザなどのツールと多数の機能を共有しています(Intellisync、Reconcileなど)。ただし、異なる点がいくつかあります。

2
Chloe

同じLAN上の2台のPCで GoodSync を使ってうまくいきましたが、あなたの状況ではそれでもうまくいくと思います。

ここに彼らの製品の説明があります:

  • GoodSyncは、コンピューター、モバイルデバイス、FTP、SFTP、Amazon S3、Googleドライブ、SkyDrive、WebDAV、Azure間でファイルを同期します。
  • GoodSyncは、ポータブルドライブ、モバイルデバイス、およびFTP、S3、GDocs、SkyDrive、DAVまたは別のコンピューターにファイルをバックアップします。
  • ダイレクトP2P同期:グッドシンクコネクトは、サードパーティのサーバーを介して同期することによる低速化を招くことなく、コンピューター間でファイルを直接同期します。
  • GoodSyncは非常に高速で、コマンドのファイルを定期的に、スケジュールに従って、またはリアルタイムで(ファイルの変更時に)同期します。

必要なのは、お使いのPCのいずれかにGoodSyncをセットアップすることだけです。双方向の同期を処理し、同期の種類はカスタマイズ可能です。また、CNetでも強く推奨されています。

1
Jon Onstott

別の可能な解決策は AeroFS です。

AeroFSは、デバイス間でデータを双方向に同期し、デバイスにデータを保存するだけです。データがサーバーの近くに移動することはありません。 AeroFSはファイルのリビジョン履歴を維持するため、必要に応じて以前のバージョンに戻すことができ、競合を解決するためのツールを提供します。

AeroFSはWindows、Mac、Linux、iOS、Androidで動作するため、カバーする必要があります。

1
chritohnide

したがって、原則としてクラウドストレージに反対していない場合は、外部ドライブ用の2つのハードウェアソリューションがあります。

スペースモンキー は、興味深いパラダイムを使用しています。他の人のデータの小さな断片を保存するためにディスクの一部を割り当て、他の多くの人のドライブ(もちろん暗号化)にデータを保存します。こうすることで、災害発生時の冗長性が大幅に向上し、マシンがお互いを認識したり、同時に接続したりする必要がなくなります。

ファイルトランスポーター は、データが同期するように特別に設定した他のファイルトランスポータードライブでのみ同期されるという点で、少し単純です。

どちらのオプションも大量のデータに適しています。サブスクリプション料なしでハードウェアを1回購入するだけです。

0
tfinniga