Pregunta

Tengo copias de seguridad de archivos archivados en medios ópticos (CD y DVD). Todos estos tienen archivos de recuperación par2, almacenados en medios separados. Incluso en los casos en que no hay archivos par2, los errores menores al leer en una unidad óptica se pueden leer bien en otra unidad.

La cosa es que, cuando se leen medios defectuosos, el tiempo de lectura es muy, muy largo, porque los dispositivos tienden a reintentar varias veces.

La pregunta es: ¿cómo puedo controlar el número de reintentos (es decir, configurar en ningún reintento o solo un intento)? ¿Alguna llamada al sistema? ¿Una biblioteca que puedo descargar? ¿Tengo que trabajar en la capa SCSI?

La pregunta es principalmente sobre Linux, pero cualquier puntero de Win32 será más que bienvenido también.

¿Fue útil?

Solución

man readom , un programa que viene con 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.

Otros consejos

La mejor herramienta disponible es dd_rhelp. Solo

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

, toma una taza de té y mira los buenos gráficos.

La información del paquete dd_rhelp rpm:

  

dd_rhelp usa ddrescue en todo el disco e intenta reunir el máximo   Datos válidos antes de intentar durante años en badsectors. Si dejas trabajo dd_rhelp   Durante un tiempo infinito, tiene un efecto similar al de un simple dd_rescue. Pero porque   puede que no tengas este tiempo infinito, dd_rhelp salta sobre sectores defectuosos y rescata   Datos válidos. A largo plazo, analiza todos sus dispositivos con dd_rescue.

     

Puede presionar Ctrl-C cuando lo desee, y volver a ejecutarlo a voluntad, dd_rhelp reanuda el   trabajo, ya que depende de los archivos de registro que dd_rescue crea. Además, el progreso.   se muestra en una imagen ASCII de su dispositivo que se está rescatando.

Lo he usado mucho y es muy, muy confiable.

Puede instalarlo desde DAG a Red Hat como distribuciones.

Al comprobar si hdparm podría modificar el número de reintentos (no lo parece), pensé que, dependiendo del tipo de error, reducir la velocidad del CD-ROM podría reducir el número de errores de lectura, que en realidad podrían aumentar la velocidad de lectura promedio. Sin embargo, si algunos sectores son completamente ilegibles, incluso reducir la velocidad del CD-ROM no ayudará.

Desde que se sugirió dd, debo tener en cuenta que conozco la existencia y he usado sg_dd, pero mi pregunta no fue sobre los comandos (1) o (1m), sino sobre las llamadas al sistema (2) o las bibliotecas (3).

EDITAR

Otra utilidad de línea de comandos de Linux que es de ayuda, es sdparm . El siguiente indicador parece deshabilitar los reintentos de hardware:

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

donde / dev / sr0 es el dispositivo para la unidad óptica en mi caso.

Ya que está preguntando sobre el acceso a nivel de controlador, debe buscar comandos SCSI, o quizás una API similar a ASPI. En el software de Windows VSO (los desarrolladores de blindread / blindwrite a continuación) han desarrollado una API mucho mejor, Patin-Couffin, que proporciona acceso de bajo nivel bloqueado:

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

Eso podría ayudarte a empezar. Sin embargo, al final del día, la unidad se interconecta con los comandos SCSI, incluso si en realidad es USB, SATA, ATA, IDE u otro. También puede buscar términos relacionados con ATAPI, que fue una de las primeras especificaciones para esta interfaz de capa SCSI en CD-ROM.

Me sorprendería si no pudiera encontrar una biblioteca de Linux adecuada o un ejemplo de cómo manejar los comandos de nivel inferior utilizando los términos y conceptos de búsqueda anteriores.


Respuesta anterior:

Blindread / blindwrite se desarrolló en el apogeo de los esquemas de protección de CD-ROM que a menudo usan sectores intencionalmente malos o Información de error para verificar el CD original.

Le permitirá establecer una gran cantidad de parámetros, incluidos los reintentos. Tenga en cuenta que la unidad de CD-ROM determina cuántas veces debe reintentar y no estoy seguro de que esto se pueda configurar a través del software para muchas (¿la mayoría?) Unidades de CD-ROM.

Puede copiar el disco a formato ISO, ignorando los errores y luego usar las utilidades ISO para leer los datos.

-Adam

Eche un vistazo a la interfaz ASPI . Disponible en Windows y Linux.

dd (1) es tu amigo.

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

La unidad aún puede volver a intentarlo un poco, pero no creo que vayas a mejorar sin modificar el firmware.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top