7

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

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

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

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

4

7 回答 7

7

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.
于 2009-02-16T08:24:07.397 回答
5

可用的最佳工具是 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 的发行版中。

于 2009-02-17T13:50:40.550 回答
2

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

编辑

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

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

/dev/sr0就我而言,光驱的设备在哪里。

于 2008-09-29T19:24:14.650 回答
1

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

于 2008-09-29T18:50:30.283 回答
1

由于您要询问驱动程序级别的访问权限,因此您应该查看 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 实用程序读取数据。

-亚当

于 2009-02-12T16:11:44.900 回答
0

看一下ASPI接口。在 windows 和 linux 上都可用。

于 2009-02-16T08:37:43.213 回答
-1

dd(1) 是你的朋友。

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

该驱动器可能仍会重试一次,但我认为如果不修改固件,您不会变得更好。

于 2008-09-29T17:46:41.140 回答