Ced*_*tin 8 linux dd devices checksum
我只是尝试从他们的.iso文件中刻录 Debian CD和Debian DVD,但我有一个奇怪的行为:CD 的校验和是正确的,但 DVD 的校验和不正确。
这是有效的:
通过发出以下命令验证 CD 是否正确:
dd if=/dev/sr0 | md5sum(或 sha-1 或 sha-256)
这工作正常:我通过使用dd和管道输入 md5、sha-1 或 sha-256从 CD 获得的校验和与官方校验和匹配。
现在我不明白的是,我确实从 DVD .iso刻录了一张DVD——并且我知道该文件已正确下载,因为.iso 文件校验和是正确的。
但是,如果我将 DVD 放入驱动器并发出相同的命令:
dd if=/dev/sr0 | md5sum (or sha-1 or sha-256)
Run Code Online (Sandbox Code Playgroud)
然后我得到一个伪造的校验和。
DVD看起来仍然正确,因为文件似乎都在那里。
所以这是我的问题:我可以通过使用dd并将其输出通过管道传输到 md5sum(或 sha-1 或 sha-256)来验证 DVD 是否已正确刻录,或者是否有一些“特殊”可以使dd用于验证刻录的 CD但不是刻录的 DVD?
*(请注意,我在 OS X 上使用了磁盘工具来刻录 CD 和 DVD)*
除了吉尔斯的回答,
如果您仍然拥有 ISO 映像,则可以使用cmp而不是校验和。它会告诉您差异发生在哪个字节。它还可以使检查更快,就像早期出现错误一样,它会立即告诉您,而校验和始终必须读取整个媒体。
$ cmp /dev/cdrom /path/to/cdrom.iso
Run Code Online (Sandbox Code Playgroud)
如果出现错误,它应该打印这样的东西
/dev/cdrom /path/to/cdrom.iso differ, byte 123456789, line 42
Run Code Online (Sandbox Code Playgroud)
如果它是正确的,它应该什么都不打印,或者这样:
cmp: EOF on /path/to/cdrom.iso
Run Code Online (Sandbox Code Playgroud)
这意味着有/dev/cdrom比 ISO 中更多的数据,很可能是零填充。
即使在开始任何比较之前,您也可以检查大小。
$ blockdev --getsize64 /dev/cdrom
123456999
$ stat -c %s /path/to/cdrom.iso
123456789
Run Code Online (Sandbox Code Playgroud)
如果相同,校验和也应该匹配。如果/dev/cdrom较大,则应在末尾补零。你可以用hexdump. 使用 ISO 大小作为-s参数。
$ hexdump -s 15931539256 -C /dev/cdrom
3b597ff38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
3b597fff8 00 00 00 00 00 00 00 00 |........|
Run Code Online (Sandbox Code Playgroud)
hexdump 对于查看文件中任何其他位置的差异也很有用,以防损坏是由某些故意造成的。
据我所知,CD 和 DVD 都由一定数量的固定大小的块组成。您正在刻录的图像可能不是块大小的倍数,在这种情况下,最后一个块将包含一些尾随垃圾。所以当你运行时dd if=/dev/sr0(这是一种混淆的写作方式md5sum </dev/sr0),尾随的垃圾包含在哈希中。
您需要跟踪图像的大小。然后对有效负载(即 ISO 文件)的字节数应用哈希实用程序。
</dev/sr0 head -c "$size" | md5sum
Run Code Online (Sandbox Code Playgroud)