为什么 dd 似乎提供损坏的副本?

为什么 dd 似乎提供损坏的副本?

在运行 Centos 和 Ubuntu 的不同机器上尝试过此操作,使用不同的 USB 闪存驱动器,但 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以获取文件长度。)

相关内容