我有存档在光学媒体(CD 和 DVD)中的文件的备份。这些都有 par2 恢复文件,存储在单独的媒体上。即使在没有 par2 文件的情况下,在一个光驱上读取时的小错误也可以在另一个驱动器上正常读取。
问题是,当读取有故障的媒体时,读取时间非常非常长,因为设备往往会重试多次。
问题是:如何控制重试次数(即设置为不重试或只试一次)?一些系统调用?可以下载的库吗?我必须在 SCSI 层上工作吗?
这个问题主要是关于 Linux 的,但任何 Win32 指针也将受到欢迎。
我有存档在光学媒体(CD 和 DVD)中的文件的备份。这些都有 par2 恢复文件,存储在单独的媒体上。即使在没有 par2 文件的情况下,在一个光驱上读取时的小错误也可以在另一个驱动器上正常读取。
问题是,当读取有故障的媒体时,读取时间非常非常长,因为设备往往会重试多次。
问题是:如何控制重试次数(即设置为不重试或只试一次)?一些系统调用?可以下载的库吗?我必须在 SCSI 层上工作吗?
这个问题主要是关于 Linux 的,但任何 Win32 指针也将受到欢迎。
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.
可用的最佳工具是 dd_rhelp。只是
dd_rhelp /dev/cdrecorder /home/myself/DVD.img
,喝杯茶,看漂亮的图形。
dd_rhelp rpm 包信息:
dd_rhelp 在整个磁盘上使用 ddrescue,并在尝试对坏扇区进行长时间尝试之前尝试收集最大有效数据。如果您让 dd_rhelp 无限工作,它的效果与简单的 dd_rescue 类似。但是因为您可能没有这个无限的时间,dd_rhelp 会跳过坏扇区并挽救有效数据。从长远来看,它会使用 dd_rescue 解析您的所有设备。
您可以随时按 Ctrl-C 并随意重新运行,dd_rhelp 会恢复作业,因为它取决于 dd_rescue 创建的日志文件。此外,进度会显示在您的设备被救出的 ASCII 图片中。
我自己用过很多次,非常非常可靠。
您可以将它从 DAG 安装到类似 Red Hat 的发行版中。
由于建议使用 dd,我应该注意我知道存在并使用了 sg_dd,但我的问题不是关于命令 (1) 或 (1m),而是关于系统调用 (2) 或库 (3)。
另一个有用的 linux 命令行实用程序是sdparm
. 以下标志似乎禁用了硬件重试:
sudo sdparm --set=RRC=0 /dev/sr0
/dev/sr0
就我而言,光驱的设备在哪里。
在检查是否hdparm
可以修改重试次数时(似乎不是这样),我认为,根据错误的类型,降低 CD-ROM 速度可能会减少读取错误的数量,这实际上可能会增加平均读取速度。但是,如果某些扇区完全无法读取,那么即使降低 CD-ROM 速度也无济于事。
由于您要询问驱动程序级别的访问权限,因此您应该查看 SCSI 命令,或者可能是 ASPI 之类的 API。在 windows VSO 软件(下面的盲读/盲写开发人员)开发了一个更好的 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 实用程序读取数据。
-亚当
看一下ASPI接口。在 windows 和 linux 上都可用。
dd(1) 是你的朋友。
dd if=/dev/cdrom of=image bs=2352 conv=noerror,notrunc
该驱动器可能仍会重试一次,但我认为如果不修改固件,您不会变得更好。