Vil*_*age 14 filesystems usb checksum
我按照Debian Wiki 上的这些 DebianEeePC HowTo InstallUsingStandardInstaller说明,将 Debian ISO 写入我的 USB。
dd if=debian-*-netinst.iso of=/dev/sdX
Run Code Online (Sandbox Code Playgroud)
使用sha1sum
,我可以检查我下载的 ISO 文件的校验和。如何检查 U 盘设备的校验和,以确保 U 盘没有任何问题并且 ISO 已被完美复制?
max*_*zig 21
您可以cmp
用于检查是否所有内容都被正确复制:
$ cmp -n `stat -c '%s' debian-X-netinst.iso` debian-X-netinst.iso /dev/sdX
Run Code Online (Sandbox Code Playgroud)
此解决方案不会显式计算您的校验和/dev/sdX
- 但您不需要这样做,因为您已经为比较源(即debian-X-netinst.iso
)执行了此操作。
仅执行 add if=/dev/sdX | sha1sum
可能会产生不匹配的校验和,因为您得到尾随块(/dev/sdX
很可能比 iso 文件大)。
通过cmp -n
您确保没有/dev/sdX
比较您的尾随字节。
如果您对所调用的 USB 大容量存储设备的质量感到偏执sync
,请将其弹出,重新插入,然后进行比较 - 否则所有或某些块可能仅来自内核 VM(缓存) - 而实际上可能是位在硬件上搞砸了。
仅使用dd
和md5sum
/sha1sum
就足够了,但如前所述,请注意,您的设备与文件的大小不同,因此总和会有所不同。
在这里你仍然可以做到
首先,您需要知道文件的大小:
$ stat -c '%s' debian-live-8.2.0-amd64-lxde-desktop.iso
1003487232
Run Code Online (Sandbox Code Playgroud)
然后,为了让你的系统调用很酷,你最好把它作为一个很好的 2 次幂4096
的倍数,比如,两者的乘法必须产生文件的大小,在其他方面,你会检查太少或字节太多,产生错误的校验和。
$ bc
bc 1.06.95
scale = 9
1003487232 / 4096
244992.000000000
Run Code Online (Sandbox Code Playgroud)
我很高兴,4096 × 244992 = 1003487232
所以 4096 对我有好处(并且可能对你有用)所以我可以使用4096
(典型)的块大小和244992
.
不要忘记将文件写入USB密钥...
$ dd if=debian-live-8.2.0-amd64-lxde-desktop.iso of=/dev/sd? && sync
Run Code Online (Sandbox Code Playgroud)
并且知道,使用已知的块大小和块数,您可以从密钥中读取确切的字节数并检查它们:
$ dd if=/dev/sdb bs=4096 count=244992 | sha1sum
b0dbe4ca8f526d1e43555459c538607d4a987184
Run Code Online (Sandbox Code Playgroud)
(是的,md5sum
比sha1sum
这快得多,但这显然不是您的瓶颈,瓶颈是 USB 吞吐量,感谢您的注意)。
或者,简而言之:
dd if=/dev/sdb bs=4096 count=$(($(stat -c '%s' the.iso) / 4096)) | sha1sum
Run Code Online (Sandbox Code Playgroud)
小智 5
朱利安的回答可以完成这项工作,但有一种更简单、更快捷的方法来做到这一点:
sudo head -c <image size> /dev/sdX | sha1sum
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17956 次 |
最近记录: |