このツールを使用すると、8 GBのSDカードに書き込んでいる約1 GBの画像がありますdd
。もう一度読んで、そのハッシュを元のハッシュと比較して、損傷なしで作成されたことを確認したいと思います。
dd
明らかに、結果の画像のサイズで再度読み取ると、私のSDカードのサイズと一致するので、ハッシュをチェックすることは役に立ちません。
私は何とか出力を解釈する必要があると思います。書く正しく読み取るには、設定skip
/パラメータを呼び出してください。count
イメージの作成に使用するコマンドは次のとおりです。
> sudo dd if=my.img of=/dev/sdc bs=1M
8+50581 records in
8+50581 records out
3947888640 bytes (3.9 GB) copied, 108.701 s, 36.3 MB/s
画像を読み取るために使用するコマンドは次のとおりです。
> sudo dd if=/dev/sdc of=same_as_my.img
15523840+0 records in
15523840+0 records out
7948206080 bytes (7.9 GB) copied, 285.175 s, 27.9 MB/s
答え1
\ls -l my.img
たとえば、(いいえls -lh
、おおよそのサイズを提供し、\ls
などのエイリアスを防ぐls='ls -h'
)、またはを使用して画像のサイズを決定しますstat -c %s my.img
。
ソースとコピーを一度だけ確認するには、ファイルを比較します。ハッシュを使用すると、ワンタイム比較には役に立たず、作業が遅くなり、より多くのコマンドが必要になります。注文するcmp
バイナリファイルを比較してみてください。イメージファイルとSDカードの対応する部分を渡す必要があります。使用head
SDカードの先頭を取り出します。
</dev/sdc head -c "$(stat -c %s my.img)" | cmp - my.img
ハッシュは、ハッシュを計算するために各インスタンスを一度だけ読み取る必要があるため、複数の比較を実行したい場合に便利です。データの破損が心配なので、どんなハッシュでも可能です。セキュリティ上の理由からファイルが変更されていないことを確認する必要がある場合やcksum
適切ではないため、代わりにまたはをmd5sum
使用する必要があります。sha256sum
sha512sum
md5sum <my.img >my.img.md5sum
</dev/sdc head -c "$(stat -c %s my.img)" | md5sum >sd-copy.md5sum
cmp my.img.md5sum sd-copy.md5sum
最初のコマンドの入力リダイレクトに注意してください。これにより、チェックサムファイルにファイル名が含まれないため、チェックサムファイルを比較できます。チェックサムファイルと確認するコピーがある場合は、直接使用できます。
</dev/sdc head -c "$(stat -c %s my.img)" | md5sum -c my.img.md5sum
ああ、そして使用しないでくださいdd
、これは遅く(またはせいぜい高速ではありません)、複製エラーを検出しません。
答え2
私たちがすることはmd5um
実際のパーティション化です。ディスクを使用して画像をチェックサムすることは正確に許可されませんが、ディスクがいくつかある場合(私たちのように)「正しい」チェックサムを設定できます。
たとえば、私たちの場合、パーティションは次のようになります。
$ sudo fdisk -l /dev/sdc
Disk /dev/sdc: 7948 MB, 7948206080 bytes
245 heads, 62 sectors/track, 1021 cylinders, total 15523840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/sdc2 122880 7710719 3793920 83 Linux
その後、単にパーティションにハッシュを作成できます。
$ sudo md5sum /dev/sdc2
しかし、これは次のことを前提としています。
- テストできるSDカードが複数あります。
- ハッシュを実行する前にSDカードをマウントしませんでした。
また、SDカードのプロパティによって異なるハッシュ値が提供されるため、ディスク全体(たとえば、上記の例では「/dev/sdc」)をチェックサムできないことに注意してください。
答え3
md5sum
イメージファイルの値とSDカードの値を比較するのは良い解決策です。
答え4
sudo sh -c '
dd bs=64k if="$1" of="$2"
! cmp -- "$1" "$2" 2>&1 |
grep -qvF "EOF on $1"
' -- my.img /dev/sdc
cmp
両方のファイルはバイト単位で比較され、同じかどうかに応じて返されます。一方が他方より短いが、2つのファイルのうち短いファイルの全長が等しい場合、1が返され、報告されますcmp
。EOF on <shorter file>...
標準エラーとして。 2つのファイルが同じ場合はcmp
0を返し、何も報告しませんが、異なる場合はcmp
1を返し、別のバイトを報告します。したがって、cmp
上記のステートメントは、stdoutまたはstderrで一致しない出力行を生成するすべての実行に対して1を返します。EOF on $1
それ以外の場合は0です。