md5sumがデバイスファイルに対して一貫性のない結果を提供するのはなぜですか?

md5sumがデバイスファイルに対して一貫性のない結果を提供するのはなぜですか?

Lubuntu 16.04.3 LTSから一部のUSBフラッシュドライブをバックアップします。

USBドライブをラップトップに接続します。サイレントインストーラはそのタスクを実行します。すべてのパーティションを読み取り専用で再マウントしました。

sudo mount -o remount,ro /dev/sdxn

ddrescueを使用してUSBドライブをハードドライブのイメージファイルにコピーする(再起動可能)

sudo ddrescue -b 4096 /dev/sdx sdx.img sdx.log

(注:ブロックサイズはによって決まりますsudo blockdev --getbsz /dev/sdx。)

md5sum sdx.img結果を提供します<foo>

明らかディスクバッファ: sudo blockdev --flushbufs /dev/sdx

  • それ以外の場合、後続のコマンドは物理ディスクの代わりにディスクキャッシュを読み込みます。 USBドライブのアクティビティインジケータと後続のコマンドがどれだけ早く完了するかを確認してください。

sudo md5sum /dev/sdx結果<列>提供

だからコピーが失敗したようです。

しかし、

フォロー sudo dd if=/dev/sdc bs=4096 | md5sum

再び<foo>結果を提供します!何ですか?

dd(およびddrescue)は両方とも同じmd5sumを使用して一貫した画像を生成しますが、デバイスファイルを直接md5sumすると他のmd5sum結果が得られます。

私は明らかなものを見逃していますか?ほとんどのハウツーではデバイスファイルにmd5sumを使用することをお勧めします。どんな手がかりがありますか?

(USBドライブのいくつかは起動可能で便利なツールセットを持っているため、USBドライブイメージを作成しています。スペースを消費するため、より大きなドライブの場合はmksquashfs(mksquashfs sdx.img sdx.squash.img)を使用して保存要件を減らします。mksquashfsの前にイメージファイルの所有権をルートから自分のユーザー名に変更すると、圧縮されたイメージをインストールできるため、コンテンツの検索が容易になります。

[追加編集:確認済みHDD イメージファイルのチェックサムがデバイスのチェックサムと一致しません。sudo blockdev --getsize64 /dev/sdxこれはディスクのイメージファイルとまったく同じサイズであると言えます。 ]

[追加アップデート:

$ sudo cat /dev/sdx | md5sum a4db504f408c139cd2517b4038dfdb2f - $ sudo dd if=/dev/sdx | md5sum 2038272+0 records in 2038272+0 records out 1043595264 bytes (1.0 GB, 995 MiB) copied, 105.895 s, 9.9 MB/s e6174ed97f010cc7aa2ea9669cd85c50 - $ sudo md5sum /dev/sdx 823b619d439fbb0abde5841097c76e72 /dev/sdx

それから繰り返し

$ sudo cat /dev/sdx | md5sum a4db504f408c139cd2517b4038dfdb2f - $ sudo dd if=/dev/sdx | md5sum 2038272+0 records in 2038272+0 records out 1043595264 bytes (1.0 GB, 995 MiB) copied, 105.747 s, 9.9 MB/s e6174ed97f010cc7aa2ea9669cd85c50 - $ sudo md5sum /dev/sdx 823b619d439fbb0abde5841097c76e72 /dev/sdx

したがって、動作は反復可能です。 cat、dd、および直接 md5sum を使用すると他の回答が提供されますが、明らかに cat は毎回 dd および md5sum と同じ回答を提供します。

cat、を使用したり、デバイスの内容をディスクイメージにコピーしたりできるので、ddこれは「正しい」ですかddrescuepv]

関連情報