ディレクトリ全体を入れるには、小さすぎるUSBデバイスを使用して、切断された2つのサーバー間で大きなディレクトリを同期させたいと思います。各サーバーはほとんどのデータを保持しており、変更されたファイルはUSBデバイスに入るのに十分小さいです。
次の手順を実行するために使用できるツールはありますか?
- デバイスB:ディレクトリDのハッシュを計算してUSBデバイスに保存します。
- デバイスA:ハッシュを計算して比較します。同期されていないファイルをUSBデバイスに追加し、削除されたファイルを書き留めます。
- デバイス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/dir
CWD
ソースディレクトリの変更tar cJvpf - --files-from -
複数のアーカイブを作成し、--files-from -
アーカイブするファイルのリストを読みstdin
、アーカイブを書き込むようにf -
指示し、圧縮してアーカイブし、アーカイブするファイルのリストを印刷します。tar
stdout
J
xz
v
tar
stderr
split -b 3500MB -d
アーカイブを3500MBのチャンクに分割します。 (4GBのフラッシュがあり、一度にすべてのデータを保存できないとします。おそらくまったくこれを行う必要はありません。)cat $( ls -1 x* | sort )
x*
ファイルのリンクsort
が正しい順序で行われることを確認できますか?cd /some/dir
CWD
宛先ディレクトリの変更tar xJvpf -
ファイルを保存します。J
解凍を表示しxz
、p
権限の復元を表示し、ジョブをv
詳細にし、アーカイブから読み取るようにf -
指示します。tar
stdin
tar
最後に、@Stéphane Chazelasの免責事項:これは、(1)両方のコンピュータのファイル名に改行文字が含まれておらず、(2)ミラーリングされるディレクトリが深すぎないと仮定します(ファイルの最大パス長に制限があります)。アーカイブであり、非常に高くはありません - 200文字IIRC)。
答え2
tar
パラメータを組み合わせると役に立ち-N | --newer | --after
ますか?指定した日以降に変更されたすべてのファイルをバックアップできます。
各実行前にファイルのリストを作成する場合(find
例:この出力を使用すると、ターゲットサーバーから追加のファイルを削除できます。