我跟着这些 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
只需使用dd
and 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
(这会在你检查大文件时节省时间)更快