我想我应该回去自己回答这个问题,因为我在这个问题上经验丰富。事实上,我在原始问题中想到的两个想法确实有效!
发出一些低级ATA命令来禁用CRC /强制驱动器进入音频CD模式?
这确实可以在某些驱动器上实现(我测试过的2个驱动器中有1个支持这个)。您需要能够将通用数据包发送到驱动器。这可以通过使用CDROM_SEND_PACKET ioctl调用(可能)在任何Linux发行版中完成。首先,您需要向页面代码为1的驱动器发出MODE_SENSE_10命令(读写错误恢复)。使用页面控制值0(当前值),您将能够看到驱动器对坏扇区的行为,并使用页面控制值1(可更改的值)查看哪些可以更改。如果您的驱动器支持更改该页面的TB(传输块)设置,则应将TB设置为1并使用MODE_SELECT_10命令将修改后的设置发送到驱动器。 Et voila - 即使存在EDC / ECC / CIRC错误,您现在也可以从驱动器中取回扇区!最好的部分是驱动器在向您发送扇区之前执行扇区解扰以及它可以进行的任何纠错。 (未经测试:还有一个DCR设置,可能完全禁用纠错尝试。)
如果你觉得这很有意思,可以去linux livecd和Mt.富士规格!以上信息可在Mt.第752页找到。富士规范v.9修订版1.00。
Bonus:现在您可以将通用数据包发送到驱动器,您应该使用READ CD(0xBE)命令自己获取原始扇区。然后,您可以自己检查所有标题,EDC / ECC数据甚至子通道数据,如果您正在进行此类操作。当驱动器为您提供损坏的扇区时,您可以使用EDC / ECC数据来检查扇区的损坏程度,并在重新读取时确定要保留的两次尝试中的哪一种。
插入音频CD然后交换到所需的数据CD而不打开托盘?
信不信由你真的有效! (至少在我曾经测试的一些非常老的cdrom驱动器上)。您可以从字面上获得一个音频CD播放器来“播放”您的数据,记录它,并在纠正任何扇区漂移(通过查找数据扇区的同步头)和解扰数据(查看ECMA 130加扰查找表)后,获取原始数据,无需任何纠错。我很确定上面的第一种方法已经废弃了这种方法,但是时间会证明 - 我仍然只是开始实际的数据恢复。
我正在开发一些软件来自动化我刚写的东西,并且完美地(意思是包括任何控制头和子通道数据)归档旧的,损坏的CD。如果有人对这项工作感兴趣,请告诉我。另外,请告诉我,如果这种软件已经存在 - AFAIK它没有。