刻录后验证光盘实际上做什么来验证数据?

刻录后验证光盘实际上做什么来验证数据?

我想象这是原始文件和已刻录到光盘上的文件之间的某种比较,但有人知道它在低级别上是如何真正完成的吗?

我的意思是,它是否会创建源内容和目标内容的哈希值,然后进行比较?如果是这样,它会将刻录内容的哈希值存储在 RAM 中吗?还是将其保存在硬盘上的临时文件中?有没有记录正在发生的事情的日志文件?

只是好奇想知道这个功能究竟如何工作:) 我指的是 Windows Image Burner。

答案1

查看 Windows API 上的 MSDN 页面IBurnVerification界面,以及IMAPI_BURN_VERIFICATION_LEVEL枚举。

对于数据磁盘,在快速模式下,它似乎不会对整个磁盘进行校验,而只是对部分扇区进行校验。然后,它会确保 API 调用READ_DISC_INFOREAD_TRACK_INFO新磁盘成功。

对于完整验证,它会执行上述检查,然后对新磁盘上的最后一个会话进行完整校验,并与正在刻录的内存流上计算的校验和进行对比。校验和必须存储在 RAM 中,但它们可能是短暂的值。请注意,比较的是 RAM 中的磁盘映像,而不是源媒体本身,因此如果源数据读取不正确,则会被错误地写入。验证不会检测到这种情况。

对于音乐磁盘,它专注于检查READ_TRACK_INFO磁盘目录,但不执行校验和计算。没有针对音乐的完整验证模式。

答案2

Frank 很好地解释了特定于 Windows 的验证。我将给出一个更通用的答案。

刻录后验证光盘实际上做什么来验证数据?

我的意思是,它是否会创建源内容和目标内容的哈希值,然后进行比较?如果是这样,它会将刻录内容的哈希值存储在 RAM 中吗?还是将其保存在硬盘上的临时文件中?有没有记录正在发生的事情的日志文件?

这当然是实现比较的一种方式:对一个文件进行哈希处理(希望使用足够大(即低碰撞概率)算法),对另一个文件重复此操作,然后比较哈希值。如果这是实现验证的方式,那么您将能够看到驱动器 LED 闪烁一段时间,然后 CD/DVD LED 闪烁一段时间。

实现验证的另一种方法是读取一个文件的一个块,然后读取另一个文件的相同块,比较它们,然后重复,直到到达文件末尾。在这种情况下,您将看到两个驱动器的 LED 来回交替。

当然,如果硬盘驱动器和光驱没有 LED,那么它就不会那么明显,但您仍然可以使用 ProcessMonitor 之类的工具看到它,因为它会记录从一个驱动器到另一个驱动器的一系列读取,每个驱动器以单个大突发或交替的小突发形式记录。

我想象这是原始文件和已刻录到光盘上的文件之间的某种比较,但有人知道它在低级别上是如何真正完成的吗?

实际上,它所做的只是刷新驱动器缓存,以便比较函数从实际磁盘而不是内存缓存中读取数据。显然,这是一个关键步骤,因为如果验证是从缓存中进行的,那么它就不能代表磁盘上的实际内容,因此损坏很容易被忽略。

您可以通过比较的速度来判断比较是从驱动器还是从 RAM 中的缓存进行的。如果您手动进行简单比较(例如,使用 WinDiff 或 WinMerge 或使用哈希工具对它们进行哈希处理),您会注意到比较发生的速度比预期的要快得多,因为它正在从内存缓存中读取文件。您必须刷新缓存以强制它从实际光盘读取。对于光盘驱动器(以及闪存驱动器和存储卡等其他可移动媒体,只需弹出驱动器就足以刷新缓存,但对于硬盘驱动器,这并不那么简单(尽管这通常无关紧要,因为新副本是您要测试的副本)。

相关内容