读取损坏的 CD 时,有没有什么方法可以绕过扇区级 CRC?

读取损坏的 CD 时,有没有什么方法可以绕过扇区级 CRC?

我正在尝试对损坏的 CD 进行映像处理,其中一些 CD 在重要区域有坏扇区。我知道有很多软件即使遇到坏扇区也能创建磁盘映像。我的问题是这些坏扇区会被跳过(复制为零)。有没有办法指示或强制驱动器返回它在损坏扇区中读取的内容,而不管扇区的 CRC 是否正常 - 几乎强制它表现得像在读取音频 CD 一样?我没有找到任何相关信息,所以如果有人有这方面的信息,我将不胜感激。我也不怕写一些汇编代码或做一些焊接,所以欢迎任何提示。

以下是我已经尝试过的一些方法:

  • 使用不同的映像/复制软件,包括 ddrescue、im​​gburn 和 winhex。CD 被读取为数据盘,驱动器不会返回坏扇区。
  • 以原始访问模式读取 CD。

一些想法(如果您知道其中任何一个会起作用/不会起作用,请发表):

  • 发出一些低级 ATA 命令来禁用 CRC/强制驱动器进入音频 CD 模式?
  • 自定义固件?
  • 插入音频 CD 然后换成所需的数据 CD 而不打开托盘?

欢迎任何其他想法,无论多么疯狂:)

答案1

我觉得我应该回去自己回答这个问题,因为我对这个问题已经有了经验。我最初提出的问题中提到的两个想法确实有效!

发出一些低级 ATA 命令来禁用 CRC/强制驱动器进入音频 CD 模式?

在某些驱动器上确实可以实现这一点(我测试的 2 个驱动器中 1 个支持此功能)。您需要能够向驱动器发送通用数据包。这可以在(可能)任何 Linux 发行版中通过使用 CDROM_SEND_PACKET ioctl 调用来完成。首先,您需要向页面代码为 1(读写错误恢复)的驱动器发出 MODE_SENSE_10 命令。使用页面控制值 0(当前值),您将能够看到驱动器对坏扇区的行为,使用页面控制值 1(可更改值)查看哪些可以更改。如果您的驱动器支持更改该页面的 TB(传输块)设置,则应将 TB 设置为 1,并使用 MODE_SELECT_10 命令将修改后的设置发送到驱动器。瞧 - 即使存在 EDC/ECC/CIRC 错误,您现在也可以从驱动器中取回扇区!最好的部分是,驱动器在向您发送扇区之前确实会执行扇区解扰和任何可以执行的错误更正。 (未经测试:还有一个 DCR 设置,它可能完全禁用错误纠正尝试。)

如果您觉得这很有趣,那就获取一张 linux livecd 和一份富士山规范吧!上述信息可以在富士山规范 v.9 修订版 1.00 的第 752 页找到。

额外好处:既然您可以将通用数据包发送到驱动器,那么您应该使用 READ CD (0xBE) 命令自己获取原始扇区。然后,如果您感兴趣的话,您可以自己检查所有标头、EDC/ECC 数据,甚至子通道数据。当驱动器给您一个损坏的扇区时,您可以使用 EDC/ECC 数据来检查扇区的损坏程度,并在重新读取时决定保留两次尝试中的哪一次。

插入音频 CD 然后换成所需的数据 CD 而不打开托盘?

信不信由你,这确实有效!(至少在我曾经测试过的一些非常旧的 cdrom 驱动器上)。你可以让音频 CD 播放器“播放”你的数据,录制它,在纠正任何扇区漂移(通过查找数据扇区的同步头)并解扰数据(查看 ECMA 130 扰乱查找表)后,你就可以得到原始数据,而无需任何类型的错误纠正。我很确定上面的第一种方法已经淘汰了这种方法,但时间会证明一切——我仍然只是开始实际的数据恢复。

我目前正在开发一些软件,用于自动执行我刚刚编写的内容,以及完美地(包括任何控制标题和子通道数据)存档旧的、损坏的 CD。如果有人对这项工作感兴趣,请告诉我。另外,如果这种软件已经存在,请告诉我 - 据我所知,它不存在。

答案2

我没有当前的规格,但较旧的 ATA 文档提到没有获取不可读扇区的能力。

请注意,您无法无条件检索磁盘数据的经历驳斥了一个普遍存在的误解,即磁盘数据直接从读取头传输到驱动器接口,然后传输到主机 PC。如果这个误解是真的,那么在应用任何错误检测和纠正之前,PC 内存缓冲区就会拥有“原始”数据。

这种误解通常用于“证明”读取头的“慢”比特率会减慢 SATA 总线上的数据比特率,然后错误地得出结论,快速的 SATA 传输速率几乎没有好处(除非扇区数据来自驱动器缓存)。

但是扇区数据总是从头部读入扇区缓冲区。
一旦读入整个扇区,扇区数据就会被验证。
只有当扇区数据被视为“良好”(或可纠正)时,才会开始传输到 PC 主机。
如果命令允许,检测到无法纠正的读取错误将触发重试。
否则,主机 PC 将收到命令中止状态。

请注意,“无法读取的扇区”还包括控制器无法“找到”该扇区(实际上是其 ID 记录)的情况。

答案3

ddrescue是一款数据恢复工具。它将数据从一个文件或块设备(硬盘、光驱等)复制到另一个文件或块设备,在发生读取错误时尽力挽救数据。

据我所知,它只适用于 Linux

答案4

如果损坏的是划痕,那么通过给 CD 打蜡(而不是抛光)可以更容易地减轻这些划痕。如果您有这样做的良好经验。对于反射光线不足的 CD(RW),您应该尝试几种不同的驱动器。有些驱动器和品牌比其他驱动器和品牌更敏感。这也适用于划痕。

相关内容