代码之家  ›  专栏  ›  技术社区  ›  tzot

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

  •  5
  • tzot  · 技术社区  · 17 年前

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

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

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

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

    7 回复  |  直到 17 年前
        1
  •  7
  •   derobert    17 年前

    man readom

       -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.
    
        2
  •  5
  •   motobói    17 年前

    可用的最佳工具是dd_rhelp。只是

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

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

    dd_rhelp在整个光盘上使用ddrescue,并尝试收集最大值 有效数据。从长远来看,它使用dd_rescue解析您的所有设备。

    作业,因为它取决于dd_rescue创建的日志文件。此外,进展

    您可以将其从DAG安装到Red Hat-like发行版。

        3
  •  2
  •   Community Mohan Dere    6 年前

    自从dd被提出以来,我应该注意到我知道它的存在并使用过sg_dd,但我的问题不是关于命令(1)或(1m),而是关于系统调用(2)或库(3)。

    sdparm . 以下标志似乎禁用硬件重试:

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

    哪里 /dev/sr0

        4
  •  1
  •   Alexander    17 年前

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

        5
  •  1
  •   Adam Davis    17 年前

    因为您询问的是驱动程序级访问,所以应该研究SCSI命令,或者类似ASPI的API。在windows VSO软件上(下面是blindread/blindwrite的开发人员),他们开发了一个更好的API Patin Couffin,它提供锁定的低级别访问:

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

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


    旧答案:

    Blindread/blindwrite

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

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

        6
  •  0
  •   bang    17 年前

    看一看 ASPI

        7
  •  -1
  •   Daniel Papasian    17 年前

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