
以下は、私が整理したいLinuxでのファイル管理の問題です。完全にバージョン管理の問題ではなく、コンピュータ間の同期の問題です。
状態
3台のコンピュータ(A、B、Cなど)があります。
このコンピュータは常に同時にオンになるわけではありません。
これらのコンピュータは、NFS プロトコルを使用して互いに素早く接続できます。
一般に、厳密に言えば、コンピュータは様々な目的に使用されます。
私は多くのファイル(バイナリとプレーンテキスト)をdir-A、dir-B、dir-Cの3つのディレクトリツリーにソートしました。出発点としてこの3本の木が位置しています。各コンピューターの世代の中。詳しくは
- dir-Aには、コンピュータAを使用するときに通常作業する文書が含まれています。
- dir-A はコンピュータ A にのみバックアップします。
- バージョンコンピュータAのdir-A「マスターコピー」でなければなりません。利便性と冗長性のために、異なるコンピュータに同じ名前のコピーが存在します。
- 他の2組のディレクトリとコンピュータも同様です。
ところで、コマンドラインからディレクトリとファイルをすばやく検索できるので、文書の分類が優れています。したがって、ライブラリを管理するためにパッケージングソフトウェアに頼るのではなく、コマンドラインとスクリプトに固執したいと思います。
意図
時には状況がより複雑になるためBとCがオフになっているときにコンピュータAで作業しているとき、
- dir-Bとdir-Cのカテゴリに一致する新しい文書を受け取ったので、それをローカルコピーに保存します。
- ソートを改善するために、dir-Bとdir-Cの内容をローカルでオンまたはオフにするように並べ替えることができます。これは、サブディレクトリの作成、削除、名前変更、マージ、ファイルの移動、不要なアイテムの削除などに起因します。
ただし、目的は、dir-B(dir-C)の「マスターコピー」をコンピュータB(C)に配置する必要があることです。したがって、選択した瞬間にコンピュータAで変更した内容をコンピュータB(C)に転送する必要があります。
最後に、これはBとCでdir-Aの便利なコピーを編集するときにも適用する必要があります。
質問
制約がある状況で、最大限の柔軟性を備えた最善の戦略に悩んでいます。タスク1は単純な同期問題です(私は使用していますrsync
)が、タスク2はより複雑です。
だから私は知りたいです。
- タスク1と2を実行するために使用できるLinuxのツール/ユーティリティはありますか?
- この問題をどのように解決しますか?
- 問題は本当に解決できますか?
- 有効にするには制限を削除する必要がありますか?
答え1
これはUnix / Linuxの問題ではなく、複雑さのレベルに関係なく、すべてのオペレーティングシステムでこれを行うことができます。
質問をもう一度申し上げます。
- {1特定の瞬間に互いに接続することも接続しない場合もあるN台のコンピュータがあります。通常、1つのマスターと複数のスレーブが含まれていると見なされます。
- {2時間が経つにつれて、これらのコンピュータのリソースは同期されないか、名前が変更される可能性があります。
- {サム一度に1台のコンピュータで作業します。
- {4コンピュータを再同期したい。
解決策:
{1これは、複数のコンピュータが接続されているときに定期的にバッチ調整ジョブを実行する必要があることを意味します。
{2一致するリソースを見つけるには、名前の変更、再分類などを追跡する必要があることを意味します。
{サムコンピュータ間の修正時間を比較して、信頼できるレコードを見つけたと結論付けます。
信頼できる最新のレコードを見つけるために取引時間を比較するための重要な前提条件は、すべてのNコンピュータに正確な時計が必要であることです。
NTP
あなたの友人ですか?修正履歴はメカニズムによって提供されます
inotify
。N個のファイルのリストで競合するレコードを識別したら、何をどこに移動するかを決定できます。私は
datamash
このタスクの初期候補としてGNUをお勧めします。ファイルの移動は最も簡単な作業です。
rsync
十分に汎用性があります。
最後に、私はこれに支払うことはないので、スクリプトを書くための日常的な作業を読者の練習として残します。