USBを使用して切断された2つのサーバー間の大きなディレクトリ同期

USBを使用して切断された2つのサーバー間の大きなディレクトリ同期

ディレクトリ全体を入れるには、小さすぎるUSBデバイスを使用して、切断された2つのサーバー間で大きなディレクトリを同期させたいと思います。各サーバーはほとんどのデータを保持しており、変更されたファイルはUSBデバイスに入るのに十分小さいです。

次の手順を実行するために使用できるツールはありますか?

  1. デバイスB:ディレクトリDのハッシュを計算してUSBデバイスに保存します。
  2. デバイスA:ハッシュを計算して比較します。同期されていないファイルをUSBデバイスに追加し、削除されたファイルを書き留めます。
  3. デバイスB:同期がUSBデバイスからDに変わり、デバイスAと同じバージョンを持ちます。

私が知っている限り、rsync、rdiff-backup、unisonなどのツールはそれをサポートしていないので、これに対する最善の解決策はこれを行ういくつかの簡単なスクリプトを書くことです。

答え1

最も簡単な方法は、クロスオーバーケーブルを使用して両方のシステムを接続することです。 :) しかし、必ずフラッシュとテープを使用する必要がある場合は、次のようにすることができます。

存在する目的地機械:

  • find /some/dir -type f -print0 | xargs -0 sha1sum -b | sort >dst.txt
  • dst.txtファイルを次の場所にコピーします。源泉機械

存在する源泉機械:

  • find /some/dir -type f -print0 | xargs -0 sha1sum -b | sort >src.txt
  • comm -23 src.txt dst.txt | cut -b 43- | (cd /some/dir; tar cJvf - --files-from -) | split -b 3500MB -d
  • x*ファイルを1つずつコピーします。目的地機械
  • rm -f x* src.txt dst.txt

存在する目的地機械を再度:

  • cat $( ls -1 x* | sort ) | (cd /some/dir; tar xJvpf -)
  • rm -f x*

仕組み:

  • dst.txtファイルには、src.txt両方のコンピューター上のファイルのSHA-1合計が含まれています。
  • comm -23 src.txt dst.txt選択項目は次にのみ存在します。源泉マシンまたは両方が存在しますが異なります。
  • cut -b 43-ファイル名のみを保持してください。これはコピーする必要があるファイルのリストです。
  • cd /some/dirCWDソースディレクトリの変更
  • tar cJvpf - --files-from -複数のアーカイブを作成し、--files-from -アーカイブするファイルのリストを読みstdin、アーカイブを書き込むようにf -指示し、圧縮してアーカイブし、アーカイブするファイルのリストを印刷します。tarstdoutJxzvtarstderr
  • split -b 3500MB -dアーカイブを3500MBのチャンクに分割します。 (4GBのフラッシュがあり、一度にすべてのデータを保存できないとします。おそらくまったくこれを行う必要はありません。)
  • cat $( ls -1 x* | sort )x*ファイルのリンクsortが正しい順序で行われることを確認できますか?
  • cd /some/dirCWD宛先ディレクトリの変更
  • tar xJvpf -ファイルを保存します。J解凍を表示しxzp権限の復元を表示し、ジョブをv詳細にし、アーカイブから読み取るようにf -指示します。tarstdin

tar最後に、@Stéphane Chazelasの免責事項:これは、(1)両方のコンピュータのファイル名に改行文字が含まれておらず、(2)ミラーリングされるディレクトリが深すぎないと仮定します(ファイルの最大パス長に制限があります)。アーカイブであり、非常に高くはありません - 200文字IIRC)。

答え2

tarパラメータを組み合わせると役に立ち-N | --newer | --afterますか?指定した日以降に変更されたすべてのファイルをバックアップできます。

各実行前にファイルのリストを作成する場合(find例:この出力を使用すると、ターゲットサーバーから追加のファイルを削除できます。

関連情報