web-dev-qa-db-ja.com

未加工ブロックデバイスの比較

2つのブロックデバイスを比較できるユーティリティ(またはシェルマジック)はありますか?

詳細:ddを使用して少し大きいSATAデバイスにバックアップした1つの大きな(0.5 TB)RAIDデバイスがあります。デバイスにはいくつかのパーティションがありますが、パーティション化されたデバイスノードではなく、「親」デバイスからコピーします(たとえば、/ dev/hda1ではなく/ dev/hdaをコピーします)。

バックアップが適切/正しいことを確認したいと思います。

各デバイスでmd5sumを実行することを検討しましたが、2番目のデバイスが最初のデバイスよりわずかに大きいため、余分なバイトによってハッシュが変更されるため、正確な結果は得られません。

12
alanxz

コマンドを使用します

cmp /dev/hda /dev/hdb

最初の異なるバイトで停止し、そのオフセットを書き込むか、短い方のEOFで停止します。

13
enzotib

バイナリ差分ソフトウェアを探しています

rdiff
はバックアップとネットワーク送信用に設計されています。バックアップの提案については、rdiff-backupとduplicityを参照してください

xdelta
は、オープンソースのバイナリ差分、差分圧縮ツール、VCDIFF(RFC 3284)デルタ圧縮です。

bsdiff
すぎます!!メモリ不足のため、ブロックデバイスには適していません。

2

ドライブの実際の容量によっては、ファイルシステムをマウントして実行するのが最も速い場合があります。

diff -qr /mnt/root1 /mnt/root2

そうでなければ、私はこのようなことを言うでしょう:

diff -q <(dd bs=1M count=500K if=/dev/sda) <(dd bs=1M count=500K if=/dev/sdb)

明らかに、bscountを、より小さなドライブの終わりで(または、はるかに便利な場合は直前に)停止させるために、どれだけ大きくする必要があるかを理解してください。

または、enzotibのコメントのおかげで、cmpを使用できるように見えますが、-nフラグを使用して、2つのドライブの短い方のバイト数を制限する必要があります。

cmp /dev/sda /dev/sdb -n 500GB
2
Kevin

次のようにmd5sumを使用して、2つの異なるサイズのブロックデバイスを比較できます。

(より小さいデバイスが/dev/sdaであると想定)

# md5sum /dev/sda && head -c $(blockdev --getsize64 /dev/sda) /dev/sdb | md5sum
1
EmmaV

bsdiff と呼ばれるユーティリティがあり、まさにこの種のことを行います。非常に高速で、必要に応じてバイナリパッチを生成できます。

それに関するいくつかの説明については この投稿 を参照してください。

1
Coren

バックアップでfsckを実行することを検討してください。バックアップに埋め込まれたパーティションにループバックデバイスを設定するには、losetupを使用していくつかのトリックを実行する必要がある場合がありますが、ファイルチェックでファイル構造が一貫している場合、データ自体は適切である可能性があります。

完全なチェックサムが必要な場合は、オフセット付きのループバックデバイスを使用して、バックアップの内部「パーティション」とmd5sumをそれぞれ個別に調べることができますが、強制fsckを使用すると、バイト比較またはチェックサム計算。

0
Evan Langlois