如何检查 ISO 是否已正确写入我的 U 盘?

如何检查 ISO 是否已正确写入我的 U 盘?

我跟着这些 DebianEeePC 如何使用标准安装程序进行安装Debian Wiki 上的说明,将 Debian ISO 写入我的 USB。

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

使用sha1sum,我可以检查下载的 ISO 文件的校验和。如何检查 USB 记忆棒设备的校验和,以确保 USB 记忆棒没有任何问题并且 ISO 已完美复制?

答案1

您可以使用它cmp来检查所有内容是否都复制正常:

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

该解决方案不会显式计算 - 的校验和/dev/sdX,但您不需要这样做,因为您已经为比较源(即debian-X-netinst.iso)执行了此操作。

仅执行 add if=/dev/sdX | sha1sum可能会产生不匹配的校验和,只是因为您得到了尾随块(/dev/sdX很可能比 iso 文件大)。

通过cmp -n确保没有/dev/sdX比较您的尾随字节。

如果您对您所调用的 USB 大容量存储设备的质量感到偏执blockdev --flushbufs /dev/sdX,请将其弹出,重新插入,然后进行比较 - 否则所有或某些块可能仅来自内核 VM(缓存) - 而实际上可能是位硬件上都搞砸了。

答案2

Julien 的答案可以完成这项工作,但有一种更简单、更快的方法可以做到这一点:

sudo head -c <image size> /dev/sdX | sha1sum

答案3

只需使用ddand md5sum/sha1sum就足够了,但如前所述,请小心,您的设备与文件的大小不同,因此总和会有所不同。

在这里你仍然可以做到这一点

首先,您需要知道文件的大小:

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

然后,为了让您的系统调用更酷,您最好将其作为 2 的幂的倍数,例如4096,两者的乘积必须精确地产生文件的大小,在其他方面,您将检查太少或字节太多,产生错误的校验和。

$ 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

(是的,md5sum比这快得多,sha1sum但这显然不是你的瓶颈,瓶颈是 USB 吞吐量,感谢您的注意)。

或者,简而言之:

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

答案4

基于@Kyle Jones 的回答

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

你应该使用,md5sum因为它比sha1sum(这会在你检查大文件时节省时间)更快

相关内容