从光学介质恢复而忽略读取错误
我有在光学媒体(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。