如何根据 ISO 映像验证 CD?

如何根据 ISO 映像验证 CD?

我有一张物理刻录的 CD 及其原始 ISO 映像。没有为 CD 内容提供参考校验和文件。如何检查实际 CD 是否正确(对应于原始映像)并且完全可读?

答案1

如果您仍然有 ISO,则可以使用 逐字节比较它们cmp。这是一个足够简单的命令,它会在发现第一个差异时退出,因此如果早期确实存在错误,那么它比进行校验和要快得多。

cmp /dev/cdrom /path/cdrom.iso

成功的可能结果:

  • 没有输出:它是相同的并且一切正常。&& echo OK如果缺少输出让您感到困惑,您可以附加到该命令。
  • cmp: EOF on cdrom.iso:它是相同的,但 cdrom 的字节数比您的 iso 文件多。这通常是由于 cdrom 末尾的零填充造成的。由于这在实践中并不重要,所以它仍然是成功的。

失败的可能结果:

  • cmp: EOF on /dev/cdrom:由于某种原因,您的 CDROM 上的数据不完整。也许您的 ISO 太大而无法容纳真正的 CD。
  • /dev/cdrom cdrom.iso differ: byte 18296321, line 71780:您的 CDROM 和 ISO 映像之间存在一些意想不到的差异。

答案2

首先,将 CD 翻录到临时文件:

dd if=/dev/sr0 of=copy.iso

然后检查copy.iso和是否orig.iso具有相同的大小,例如:

stat -c '%s %n' orig.iso copy.iso

如果大小相同,那就很简单:

sha1sum orig.iso copy.iso

但我注意到,在某些情况下,大小可能会略有不同,因为副本或原始图像中都有尾随零。例如,如果copy.iso小于orig.iso

sha1sum copy.iso
head -c $(stat -c %s copy.iso) orig.iso | sha1sum

当然,您还应该检查尾随字节是否为零:

od -j $(stat -c %s copy.iso) orig.iso

第一行,除了偏移量之外,应该只为零。第二行应该是一个星号。星号是为了避免显示连续的相同行。

答案3

如果 ISO 文件与用于刻录 CD 的文件相同,那么以下是我最喜欢的两个:

diff /dev/sr0 /tmp/file.iso

将记录的图像与图像文件进行比较。如果你感觉有点受虐狂,你可以尝试这样的事情:

sha1sum /dev/sr0 /tmp/file.iso

并比较签名。如果您已经在某处拥有 SHA1 总和,那么这个会更有用。这两个命令都会读取介质到底。

如果您想按照@Marki555 建议的方式进行操作,则需要首先安装光驱和映像。这是一个完整的脚本:(当然,sudo如果您是 root,则可以省略 - 一般来说,这是一个坏主意)

sudo mkdir /tmp/{a,b}
sudo mount /dev/sr0 /tmp/a -o ro # or whatever
sudo mount /tmp/file.iso /tmp/b -o loop,ro
diff -dur /tmp/{a,b}
sudo umount /tmp/a
sudo umount /tmp/b
sudo rmdir /tmp/{a,b}

答案4

Brasero 可以做到这一点:工具 -> 检查完整性...

相关内容