ddが破損したコピーを提供しているように見えるのはなぜですか?

ddが破損したコピーを提供しているように見えるのはなぜですか?

別のUSBフラッシュドライブを使用してCentosとUbuntuを実行している別のコンピュータでこれを試しましたが、ddは起動できないフラッシュドライブを作成し続けます。

$ sudo dd if=foo.iso of=/dev/sdb bs=1M status=progress && sync
548****** bytes (548 MB, 523 MiB) copied, 7 s, 78.3 MB/s
551+1 records in
551+1 records out
577****** bytes (578 MB, 551 MiB) copied, 8.70126 s, 66.4 MB/s
$ sudo md5sum /dev/sdb
****************************ef59  /dev/sdb
$ sudo md5sum foo.iso
****************************21ce  foo.iso

MD5は違います。

sudo dd if=/dev/sdb of=bar.iso bs=1M status=progress &&sync の結果は、バイト間比較ツールの foo.iso とはまったく異なります。

もう一つのことは、インストール後にフラッシュドライブがよく読み取られないことです。

この問題を解決する理由と方法は何ですか?

答え1

保存するデータ/dev/sdbはそれより長い場合がありますfoo.iso。ディスクドライブは特定の長さに切り捨てることができないため、ddコピーする必要のあるデータのみをコピーし、残りはそのまま残します。読めばmd5sum尾部分も読んでくれます。尾がゼロであっても、ハッシュ値は変わります。

長さを確認foo.isoしたら、最初の部分のハッシュのみをインポートする必要があります。

たとえば、GNUシステムの場合:

len=$(stat -c %s foo.iso)
sudo head -c "$len" /dev/sdb | md5sum

(または出力を確認してls -lファイルの長さを取得します。)

関連情報