我有一张物理刻录的 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 可以做到这一点:工具 -> 检查完整性...