web-dev-qa-db-ja.com

ISOがUSBスティックにエラーなしで書き込まれたかどうかを確認するにはどうすればよいですか?

私は、Debian Wikiで theseDebianEeePC HowTo InstallUsingStandardInstallerの指示に従って、USBにDebian ISOを書き込みました。

dd if=debian-*-netinst.iso of=/dev/sdX

sha1sumを使用して、ダウンロードしたISOファイルのチェックサムを確認できます。 USBスティックデバイスのチェックサムをチェックして、USBスティックに問題がなく、ISOが完全にコピーされたことを確認するにはどうすればよいですか?

10
Village

cmpを使用して、すべてが正常にコピーされたかどうかを確認できます。

$ cmp -n `stat -c '%s' debian-X-netinst.iso` debian-X-netinst.iso /dev/sdX

このソリューションでは、/dev/sdXのチェックサムを明示的に計算しません。ただし、比較のソース(つまり、debian-X-netinst.iso)に対してすでに計算を行っているので、計算する必要はありません。

単にdd if=/dev/sdX | sha1sumを実行すると、後続のブロックが取得されるために、一致しないチェックサムが生成される可能性があります(/dev/sdXは、isoファイルよりも大きい可能性があります)。

cmp -nを使用して、/dev/sdXの後続バイトが比較されないようにします。

USBマスストレージデバイスの品質について偏執的である場合は、syncを呼び出して取り出し、再度挿入してから比較してください。そうでない場合、すべてのブロックまたは一部のブロックがカーネルから取得される可能性がありますVM(キャッシュ)-実際にはおそらくハードウェアのビットがおかしくなっています。

17
maxschlepzig

ddmd5sum/sha1sumを使用するだけで十分ですが、前述のとおり、デバイスのサイズはファイルのサイズと同じではないため、合計が異なります。

ここでまだそれを行う方法

まず、ファイルのサイズを知る必要があります。

$ stat -c '%s' debian-live-8.2.0-AMD64-lxde-desktop.iso
1003487232

次に、syscallでクールにするには、これを4096のような2のべき乗の倍数として取得することをお勧めします。2つのHAVE TOを乗算すると、ファイルのサイズが正確に得られます。他の方法では、チェックする数が少なすぎますまたはバイト数が多すぎて、チェックサムが間違っています。

$ bc
bc 1.06.95
scale = 9
1003487232 / 4096
244992.000000000

うれしいです、4096 × 244992 = 1003487232なので、4096は私にとっては良いでしょう(そしておそらくあなたにとってもそうです)ので、4096(標準)のブロックサイズと244992のブロックカウントを使用できます。

USBキーにファイルを書き込むことを忘れないでください...

$ dd if=debian-live-8.2.0-AMD64-lxde-desktop.iso of=/dev/sd? && sync

また、既知のブロックサイズとブロックカウントを使用して、キーから正確なバイト数を読み取り、それらを確認できます。

$ dd if=/dev/sdb bs=4096 count=244992 | sha1sum
b0dbe4ca8f526d1e43555459c538607d4a987184

(はいmd5sumsha1sumよりも高速ですが、これは明らかにボトルネックではありません。ボトルネックはUSBのスループットです。

または、要するに:

dd if=/dev/sdb bs=4096 count=$(($(stat -c '%s' the.iso) / 4096)) | sha1sum
3
Julien Palard

ジュリアンの答えはうまくいきますが、これを行うためのより簡単で高速な方法があります。

Sudo head -c <image size> /dev/sdX | sha1sum
3
Lucas

@Kyle Jonesの回答に基づく

diff <(md5sum debian-XYZ-netinst.iso | awk '{print $1}') <(dd if=/dev/sdX | md5sum | awk '{print $1}')

md5sumより高速であるため、sha1sumを使用する必要があります(これにより、大きなファイルをチェックするときに時間を節約できます)

0
HVNSweeting