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