为什么 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给出结果<栏>

所以看来复制失败了。

A随后的 sudo dd if=/dev/sdc bs=4096 | md5sum

再次给出结果 < foo > !!!什么?

事实证明 dd (和 ddrescue)生成一致的图像,所有图像都具有相同的 md5sum,但如果我直接 md5sum 设备文件,我会得到不同的 md5sum 结果。

我错过了一些明显的事情吗?大多数howtos建议在设备文件上使用md5sum,所以我想我要么发现了一个错误/功能,要么是愚蠢的并且错过了一些非常明显的东西。有什么线索吗?

(请注意,我正在生成 USB 驱动器的映像,因为其中一些是可引导的,并且上面有一组有用的工具。这会占用空间,因此对于较大的驱动器,我将通过使用 mksquashfs 来减少存储需求(mksquashfs sdx.img sdx.squash.img),只要我在 mksquashfs 之前将图像文件的所有权从 root 更改为我的用户名,这意味着我可以获得可安装的压缩图像,因此浏览内容可能很容易。

[编辑添加:看过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 相同的答案。

因为我可以使用catddddrescuepv将设备的内容复制到磁盘映像,这是“正确的”吗?]

相关内容