从光学介质中恢复,忽略读取错误

时间:2008-09-29 15:10:37

标签: windows linux recovery system-calls optical-drive

我备份了以光学媒体(CD和DVD)存档的文件。这些都有par2恢复文件,存储在不同的媒体上。即使在没有par2文件的情况下,在一个光驱上读取时的轻微错误也可以在另一个驱动器上正常读取。

问题是,当读取错误的媒体时,读取时间非常长,因为设备往往会多次重试。

问题是:我如何控制重试次数(即设置为不重试或只尝试一次)?一些系统调用?我可以下载的库吗?我是否必须处理SCSI层?

问题主要在于Linux,但任何Win32指针都非常受欢迎。

7 个答案:

答案 0 :(得分:6)

man readom,cdrecord附带的程序:

   -noerror
          Do not abort if the high level error checking in readom found an
          uncorrectable error in the data stream.

   -nocorr
          Switch  the  drive  into  a mode where it ignores read errors in
          data sectors that are a result of uncorrectable  ECC/EDC  errors
          before reading.  If readom completes, the error recovery mode of
          the drive is switched back to the remembered old mode.
   ...

   retries=#
          Set the retry count for high level retries in readom to #.   The
          default  is  to do 128 retries which may be too much if you like
          to read a CD with many unreadable sectors.

答案 1 :(得分:4)

可用的最佳工具是dd_rhelp。刚

dd_rhelp /dev/cdrecorder /home/myself/DVD.img

,喝一杯茶,看看漂亮的图形。

dd_rhelp rpm包信息:

  

dd_rhelp在整张光盘上使用ddrescue,并尝试收集最大值   在badsectors上尝试年龄之前的有效数据。如果你让dd_rhelp工作   对于无限时间,它具有与简单dd_rescue类似的效果。但是因为   你可能没有这个无限的时间,dd_rhelp跳过坏道并拯救   有效数据。从长远来看,它会使用dd_rescue解析您的所有设备。

     

您可以随时按Ctrl-C,并随意重新运行,dd_rhelp恢复   作业因为它取决于dd_rescue创建的日志文件。另外,进步   显示在被拯救设备的ASCII图片中。

我自己经常使用它,非常非常可靠。

您可以将其从DAG安装到Red Hat,就像发行版一样。

答案 2 :(得分:1)

在检查hdparm是否可以修改重试次数时(似乎不是这样),我认为,根据错误的类型,降低CD-ROM速度可能会减少读取错误的数量,这实际上可以提高平均阅读速度。但是,如果某些扇区完全不可读,那么即使降低CD-ROM速度也无济于事。

答案 3 :(得分:1)

由于建议使用dd,我应该注意到我知道存在并使用了sg_dd,但我的问题不是关于命令(1)或(1m),而是关于系统调用(2)或库(3)。

修改

另一个有帮助的linux命令行实用程序是sdparm。以下标志似乎禁用硬件重试:

sudo sdparm --set=RRC=0 /dev/sr0

其中/dev/sr0是我的光驱设备。

答案 4 :(得分:1)

由于您要询问驱动程序级别的访问权限,因此您应该查看SCSI命令,或者可能是ASPI之类的API。在Windows VSO软件(下面的blindread / blindwrite的开发人员)开发了一个更好的API,Patin-Couffin,提供锁定的低级访问:

http://en.wikipedia.org/wiki/Patin-Couffin

这可能会让你开始。但是,在一天结束时,驱动器与SCSI命令接口,即使它实际上是USB,SATA,ATA,IDE或其他。您还可以查找与ATAPI相关的术语,这是此CD-ROM SCSI层接口的首批规范之一。

如果您找不到合适的linux库或使用上述搜索术语和概念处理较低级别命令的示例,我会感到惊讶。


旧答案:

Blindread/blindwrite是在CD-ROM保护方案的全盛时期开发的,通常使用故意坏扇区或错误信息来验证原始CD。

它允许您设置一大堆参数,包括重试。请记住,CD-ROM驱动器本身决定了重试的次数,我不确定这是否可以通过软件为许多(大多数?)CD-ROM驱动器设置。

您可以将磁盘复制到ISO格式,忽略错误,然后使用ISO实用程序读取数据。

- 亚当

答案 5 :(得分:0)

查看ASPI界面。可在Windows和Linux上使用。

答案 6 :(得分:-1)

dd(1)是你的朋友。

dd if = / dev / cdrom of = image bs = 2352 conv = noerror,notrunc

驱动器可能仍然会重试一下,但我认为如果不修改固件,你会更好。