如何根据ISO映像验证CD?


10

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


您的意思是在CD刻录后立即检查CD上的数据吗?因为大多数刻录软件工具都可以选择检查写入的数据(例如Nero)。
西尔维(Silviu),2012年

我知道,但是我需要在刻录过程之后立即进行检查,而是需要一段时间(在刻录程序已经关闭之后),甚至可能是在另一台PC上。据我所知,Nero不提供独立于刻录程序启动验证程序的权限-它的验证功能只是刻录的附加组件,只能在刻录后立即发生。我想要的是插入CD,选择一个ISO文件,然后单击以进行验证...另一个限制是,我怀疑我的Windows CD / IDE驱动程序不正常,因此我不想在Linux下执行此操作。
伊万

这真的很困难,您要刻录可引导CD还是纯数据?
雏菊

可启动的CD ..
Ivan

仅供参考,某些Linux ISO具有内置的引导选项来验证其内容。您可以使用该选项,它将针对包含校验和的文件检查光盘的所有文件。md5sum如果您不想引导CD / DVD,也可以自己运行并进行比较。
Skylar Ittner

Answers:


5

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

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

然后检查是否copy.isoorig.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

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


+1为校验和。通常,这是比较文件(或目录)并且不关心知道差异的实际标准(与diff一样):更小。
nikitautiu 2012年

或者您head -c $(stat -c %s /path/to/master.iso) /dev/sr0 | sha1sum可以避免制作已刻录CD的映像。
Hitechcomputergeek

4

如果您仍然有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映像之间有一些意外的差异。

当diff报告“ differ”时,您的cmp方法很棒!
qrtLs

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}

3
cmp [-l]更适合二进制文件。Diff在文本上效果最好。
derobert 2012年

2

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

因此,您只能使用某种目录比较工具来装载CD,装载ISO映像并在文件系统级别进行比较(对不起,我在Linux上还没有使用过)。


diff -r将递归比较目录内容。
凯文

5
由于cd是从已经准备好的iso映像刻录的,因此刻录时没有任何不同的构造,因此您可以直接将cd与iso映像进行比较。
psusi

0

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


Brasero是(Gnome)图形应用程序,可在任何Linux发行版中使用。安装它,然后进入“编辑”->“插件”并检查“文件校验和”(默认情况下处于选中状态)。见这里
米兰Kerslager
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.