中央サーバーを使用しないDropboxのようなファイル同期[終了]


22

インターネット上の2台のMacのセカンダリドライブを同期する方法を探しています。2台のMac間に一貫したVPN接続があり、それらが隣接しているかのようにアクセスできます。

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

ああ、私のドライブは500GBなので、Dropboxを使用することは現時点ではちょっとした論外です。ありがとう!


そのためのLinuxツールである「rsync」のポートを確認してください。実行ごとにファイルを同期できます。sgが変更されるたびにこれをトリガーする方法のみが必要です。
dkellner

500GBすべてを同期しますか?
cubuspl42

5
これは、ソフトウェアの推奨事項に関するトピックです。:(Macに固有ではない)、この質問を参照してくださいsoftwarerecs.stackexchange.com/questions/129/...
ニコララウル

これも必要ですか?「どちらかのマシンでファイルを削除した場合、再作成するのではなく、他のマシンからも削除する必要があります。」
パトリックM

これはiCloudの目的ではありませんか?hints.macworld.com/article.php?story=20120803092156975
Blazemonger

回答:


30

Bittorrent Syncをご覧ください。Dropboxのような同期機能がありますが、クラウドはありません。


欠点:同期するには、両方のマシンを同時にオンラインにする必要があります。
ジェラルドシュナイダー

18
@GeraldSchneiderこの制限がないものをご存知ですか?
Shelvacu

2
@shelvacu、できません。両方のマシンをオンラインにせずに同期したい場合は、クラウドストレージが必要です(OPリクエストに反する)。
HalosGhost

5
必ずしもクラウドストレージではありません。常にオンラインである1つのノードが必要です。これには、コンピューター、NAS、クラウドサービス、Lawrenceが提案する自己ホスト型のOwnCloudインスタンスなどのソリューションを使用できます。ただし、1つのノードが常にオンラインでない限り、この制限は常に適用されます。
ジェラルドシュナイダー

3
私はBitTorrent Syncを使用していますが、それを強くお勧めします-大きすぎてそこにスペースをとる価値のないファイルにはDropboxと組み合わせて使用​​します。考慮すべきことの1つは、ファイルの同時編集をうまく処理できないことです-Dropboxのような競合処理はありません-最後に編集されたファイルが単に勝ちます。必ずしも問題ではありませんが、要件によって異なります。
ゼラニクス

16

筋金入りになりたい場合は、* nixスタッフのように、OsXrsyncコマンドをネイティブに使用できます。

すべてを実行する前に、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が完全に終了しない場合はどうなりますか?2つのrsyncが同時に発生するのは望ましくありません。これを回避する方法はありますか?
muncherelli

1
@muncherelli:同時同期を防ぐために、rsyncの周りに小さな「ロック」メカニズムを記述するのは比較的簡単です。基本的に、bsyncスクリプトでrsync呼び出しをラップすると、自由に何でもできます。
unperson325680

サンプルスクリプトを追加しました。私はそれが役立つことを願っています。
センサーH.

これは素晴らしいスクリプトです。助けてくれてありがとう。シンプルさと帯域幅の調整のため、BitTorrent Syncを使用することにしました。(rsyncを使用して最大帯域幅使用率を設定できることは知っていますが、BTSはより直感的です)。
muncherelli

8

Owncloudは、Webベースのアクセスが必要な場合に可能なソリューションです。

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


1つの所有クラウドにしか接続できないということはまだありますか?例えば、私は自分のものを持って、別のものを私の兄弟と共有することはできませんか?
トーマスウェラー

少なくともデスクトップ同期クライアントは、複数の同時クラウド接続をサポートするようになりました。しかし、1つのサーバー内でも、必ずしもすべてではなく、特定のファイル/ディレクトリのみを共有できます。
ojdo


2

Windowsの場合、3つのステップでそれを行うSyncToyツールがあります。Macの場合、ChronSyncツールまたはトライバックアップツールについてです


こんにちはRuslan、ChronSyncまたはTri-BackupがOPにとって理想的なソリューションになる理由を説明するために回答を編集できますか?今のところ、それは非常に質の低い回答であり、実際には質問方法答えていません。ありがとう
カナダのルーク州立モニカ

こんにちは、ご質問ありがとうございます。これらのプログラムが理想的なソリューションであるとは言っていませんが、GUIを備えているので十分簡単だと思います。また、リストされたプログラムの使用に問題がある場合は、別の質問(彼が何をしたか、何が間違っているか、奇妙なこと)で尋ねるべきだと思います。特定の質問をせずにそれらのドキュメントをここにコピーするのではありません。
ルスランジェラシモフ

2

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

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

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

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


1
+1:双方向の同期が必要な場合、これはrsyncに勝りますが、すべての優れた機能を備えています。
ojdo

1

同じLAN上にある2台のPC でGoodSyncを使用して幸運に恵まれましたが、あなたの状況でもうまく機能するはずです。

製品の説明は次のとおりです。

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

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


こんにちはJon、GoodSyncがOPにとって理想的なソリューションになる理由を説明するために回答を編集できますか?今のところ、それは非常に質の低い回答であり、実際には質問方法答えていません。ありがとう
カナダのルーク州立モニカ

1

別の可能なソリューションはAeroFSです。

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

AeroFSはWindows、Mac、Linux、iOS、Androidで動作しますので、カバーしてください。


0

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

Space monkeyは興味深いパラダイムを使用します。ディスクの一部を他の人のデータの小さな断片の保存に割り当て、データを他の人の多くのドライブに保存します(もちろん暗号化されています)。このように、災害の場合には多くの冗長性があり、マシンはお互いを見る必要がなく、同時に接続する必要さえありません。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.