web-dev-qa-db-ja.com

ddバックアップの整合性をチェックする方法は?

次の方法で、sshを介してハードドライブ全体(50GB)のバックアップを作成しました。

dd if=/dev/hda | buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"

ファイルの整合性をチェックする最良の方法は何ですかimage.img、つまり、すべてが正しくコピーされていることを確認するにはどうすればよいですか?

11
student

コマンドが正常に終了した場合、バックアップは正しく、ハードウェア障害(実行するすべての検証に等しく影響する可能性があります)を除きます。ハードウェアに障害があると、後で正しくなくなる可能性がありますが、ほとんどのストレージハードウェアが破損を検出します。

ここで注意点が1つあります。パイプラインでは、シェルは左側からエラーを報告しません。 (これは、右側がすべてのデータを読み取る必要がないかなり一般的なシナリオ、たとえばsome_command | headが原因であり、左側は出力が不要になったために死にます。) ddからの読み取りエラーは無視されます。 bashで、pipefailオプションを設定して、パイプラインのすべての部分からのエラーを報告します。

また、 dd bs=…はいくつかのエラーを無視する および ddは多くの場合、他の方法よりも遅い であることに注意してください。 ddは使用しないことをお勧めします。ファイル全体をコピーするだけではメリットはありません。どこかで読んだかもしれないこととは逆に、ddは特別なプロパティを持つ低レベルのディスクアクセスコマンドではありません。ddにはまったく魔法はなく、魔法は/dev/hdaにあります。

shopt -s pipefail
set -e
</dev/hda buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"

それでも、バックアップをチェックしたい場合、最善の方法は、両側で暗号チェックサムを取り、それらを比較することです。例えば:

ssh myuser@myhost "sha1sum image.img" &
Sudo sha1sum /dev/hda

2つのチェックサムが同一であることを確認します。

これは、チェック時にバックアップとオリジナルが同一であるかどうかをテストすることに注意してください。 /dev/hdaで変更を加えると、変更を加えなくてもファイルシステムのマウントやマウント解除(多くのファイルシステムの最終マウント日が更新されます)を行うと、チェックサムが変更されます。後で整合性を検証する場合は、バックアップ時のディスクのチェックサムをどこかにメモしてください。

Darnir&Gilesが述べたように、最善の方法は、バックアップの直後に暗号化ハッシュを実行してから、ソースディスクに変更が加えられる前です。ただし、それ以降ディスクを使用した場合は、ハッシュが一致しない可能性が高くなります。ディスク上の1バイトを変更しても、完全に異なるハッシュになります。

理想的とは言えませんが、マウントして画像をスポットチェックできます。ディスクイメージがあるシステムで、次のコマンドを実行します(作成/mnt/disk存在しない場合、または別の場所にある場合):

mount -o loop image.img /mnt/disk

その後、/mnt/diskとすべてのファイルを参照してください。イメージ内の重要なファイルのsha1ハッシュをオリジナルと照合して、整合性を確認します。

5
bahamat

コマンドqemu-imgを使用します

qemu-img check image.img
0
PolkaRon