web-dev-qa-db-ja.com

切断された操作でホームディレクトリを相互同期する(Linux / Ubuntu)

これが私が仕事をしようとしているシナリオです。最終的に同じデータを取得する必要があるJ、T、Rの3台のマシンがあります(わずかな一時的な違いは問題ありません)。 JとTは、毎日オンとオフが切り替わるデスクトップです。 Rはリモートファイルサーバーです。 JとTのユーザーは、1つのディレクトリ(グループのアクセス許可を介して共有)および自分のホームディレクトリの共有データに変更を加えることができます。 2台のJマシンとTマシンのうち1台だけが一度に実行されることはかなり一般的です。 Rへのインターネット接続はかなり信頼できますが、Rは遠く離れており、待ち時間のためにメインファイルサーバーとして使用することは望ましくありません。 NFSを試してみましたが、かなり苦痛でした。接続は、常にアクセスするために接続に依存するほど信頼性が高くありません。

現時点では、ローカルサーバーを配置し、NFSまたはCIFSを介して共有ドライブを提供することはできません。それははるかに簡単になりますが、それはオプションではありません。

クロスマウントされたNFSエクスポートを試し、ドライブなどをマウントするためのいくつかの簡単なシェルスクリプトを取得できましたが、JがTからドライブをマウントし、それをベースファイル共有として使用し、Tをオフにすると、データが変更されます。失われました。したがって、データを常に同期する方法が必要です。

Rsyncを調べたところ、最終的にcsyncが見つかりました(まったく異なるプロジェクトであるcsync2ではありません)。これにより、マシン間で定期的な同期を実行できます。ただし、これはcronであり、オンデマンドでは実行されません。また、lsyncdは、両方のワークステーションが稼働しているときに変更をコピーするのに適しているように見えますが、ローカルシステムがダウンしていて、他のワークステーションが変更を加えているときに何が変更されたかを把握するのは得意ではありません。

Ubuntu One、Dropboxなどを見ましたが、空きファイルの制限が問題です。予算は非常に限られており、繰り返し発生するコストは避けなければなりません。 iFolderはオプションかもしれませんが、どこかにサーバーが必要なようです。

私が好むのは次のようなものです:

  • リモートコピーとローカルコピーの両方を作業ディレクトリにマウントします。そこで変更を加え、ファイルシステムにそれらを他の場所にプッシュさせます。

  • ログイン時に、他の両方のマシンとの再同期を開始して、マシンの電源がオフのときに行われた変更に追いつきます。

2つのワークステーションの1つが一度に数日間オフになる可能性があるため、多くの変更が蓄積される可能性があります。通常のユーザーは2人しかないため、変更率はそれほど高くありませんが、1週間後には増加します。

ファイルシステム上のRAID1のようなものを備えたFuseモジュールはありますか?切断の可能性が長いため、Gluster FS、AFS、NBDなどは適切ではないようです。

NFSクライアントフェイルオーバーを実行する方法がある場合(他のワークステーションがダウンした場合は、代わりにローカルコピーを使用してください)、それも機能します。私はそれについていくつかの調査を行いましたが、「autofsはそれをサポートする必要がありますが、サポートしない」といういくつかの言及を除いて、私はあまり見つけていません。

NFS/CIFSベースのソリューションを好むのは、ファイルロックを取得でき、ユーザーが同じファイルを同時に変更しようとしても問題が発生しないためです。しかし、クライアント側のフェイルオーバーを解決する方法がわかりません。

これをどのように解決しますか?繰り返しになりますが、ローカルファイルサーバーを持つことは現在のところオプションではありません。

3
Kyle

Coda 要件を満たす必要があります。これは、ローカルキャッシュと切断されたクライアント操作を強力にサポートするネットワークファイルシステムです。

1
ephemient

同期ツールにフォールバックする必要がある場合は、必ず nison を確認してください。これはrsyncライブラリに基づく双方向同期であり、変更されるものを処理できます。競合があった(両側で更新された)ファイルをバックアップフォルダーに保存できます。

同期は、ユーザー、cron、または何らかの起動スクリプトのいずれかによって開始される必要があります。

0
Zoredache