如何根据 ISO 映像验证 CD?

Iva*_*van 12 burning data-cd

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

fro*_*utz 9

如果您还有 ISO,则可以使用cmp. 这是一个足够简单的命令,它在它找到的第一个差异时退出,因此如果早期确实存在错误,它比进行校验和快得多。

cmp /dev/cdrom /path/cdrom.iso
Run Code Online (Sandbox Code Playgroud)

成功的可能结果:

  • 没有输出:它是相同的,一切正常。&& 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 映像之间存在一些意外差异。


小智 5

首先,您将 CD 翻录到一个临时文件中:

dd if=/dev/sr0 of=copy.iso
Run Code Online (Sandbox Code Playgroud)

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

stat -c '%s %n' orig.iso copy.iso
Run Code Online (Sandbox Code Playgroud)

如果大小相同,则很容易:

sha1sum orig.iso copy.iso
Run Code Online (Sandbox Code Playgroud)

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

sha1sum copy.iso
head -c $(stat -c %s copy.iso) orig.iso | sha1sum
Run Code Online (Sandbox Code Playgroud)

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

od -j $(stat -c %s copy.iso) orig.iso
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*555 2

dd您可以使用(例如)检查 CD 是否完全可读dd if=/dev/cdrom of=/dev/null。但您无法将其直接与 ISO 映像进行比较。每个软件都会创建略有不同的 ISO 文件(可能有一些不同的标头或填充),尽管这些不同的 ISO 映像都将提供相同的 CD 内容(目录结构、文件属性和文件内容)。

所以你只能挂载 CD,挂载 ISO 映像并使用某种目录比较工具在文件系统级别进行比较(抱歉,我在 Linux 上还没有使用任何工具)。

  • 由于 CD 是从已准备好的 ISO 映像刻录的,因此刻录时无需进行任何不同的构建,因此您可以直接将 CD 与 ISO 映像进行比较。 (5认同)