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

时间:2020-03-06 14:52:45  来源:igfitidea点击:

我有在光学媒体(CD和DVD)中存档的文件的备份。这些文件都有par2恢复文件,分别存储在单独的介质上。即使没有par2文件,在一个光驱上读取时出现的小错误也可以在另一个光驱上读取。

问题是,当读取有故障的媒体时,读取时间非常非常长,因为设备倾向于多次重试。

问题是:如何控制重试次数(即设置为不重试或者仅尝试一次)?一些系统调用?我可以下载图书馆吗?我必须在SCSI层上工作吗?

问题主要是关于Linux的,但是任何Win32指针也将受到欢迎。

解决方案

dd(1)是朋友。

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

该驱动器可能仍会重试,但我认为不修改固件就不会有任何改善。

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

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

编辑

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

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

在这里,/ dev / sr0是光驱的设备。

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

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实用程序读取数据。

-亚当

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.

看一下ASPI接口。在Windows和Linux上均可用。

最好的工具是dd_rhelp。只是

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

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

dd_rhelp rpm软件包信息:

dd_rhelp uses ddrescue on your entire disc, and attempts to gather the maximum
  valid data before trying for ages on badsectors. If you leave dd_rhelp work
  for infinite time, it has a similar effect as a simple dd_rescue. But because
  you may not have this infinite time, dd_rhelp jumps over bad sectors and rescue
  valid data. In the long run, it parses all your device with dd_rescue.
  
  You can Ctrl-C it whenever you want, and rerun-it at will, dd_rhelp resumes the
  job as it depends on the log files dd_rescue creates. In addition, progress
  is shown in an ASCII picture of your device being rescued.

我本人已经使用了很多,并且非常,切实可行。

我们可以将其从DAG安装到发行版之类的Red Hat。