Volcando / reparando discos con ddrescue

Taller de hardware y cacharreo general de aparatos eléctricos y electrónicos que no tengan un sitio propio.
Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 2970
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 68 veces
Gracias recibidas: 326 veces
Contactar:

Volcando / reparando discos con ddrescue

Mensajepor zup » 13 Ene 2022, 08:45

Creo que esto debería ir de entrada en mi blog, pero bueno...

He estado experimentando un poco con ddrescue, y creo que tiene posibilidades interesantes para hacer imágenes ISO. De momento, voy a poner un par de casos en los que es útil.

CASO 1: Volcando discos en general
El comando a utilizar:

Código: Seleccionar todo

ddrescue -b 2048 -d /dev/cdrom fichero.iso fichero.map

Con este comando leeremos una ISO desde el lector -optico (/dev/cdrom), con tamaño de bloque de 2048 bytes (el habitual para un CD o DVD, -b 2048), leyendo mediante acceso directo (-b, así evitamos que Linux haga reintentos) y generaremos dos ficheros: fichero.iso que contiene la imagen ISO y un fichero de mapa (fichero.map) que contiene... cosas interesantes.

El fichero de mapa contiene un mapa de los sectores que no se han leído y los que se han leído erróneamente. Esto nos puede permitir interrumpir y continuar el proceso en cualquier momento, y podría permitirnos (pendiente de averiguar cómo) saber qué ficheros tienen datos erróneos.

Ventajas: En el caso de discos con muchos sectores erróneos, se puede cortar el volcado con Ctrl+C y luego seguir donde lo dejó repitiendo exactamente la misma orden. Esto es útil en discos como los de FX Interactive que pueden contener hasta 20000 (sí, ahí dice veinte mil) bloques erróneos, ya que te permite interrumpir la operación, apagar el ordenador y continuar en otro momento. Creo que es el único programa que permite hacerlo (también puedes hacerlo con dd, pero dd se interrumpe cuando encuentra datos erróneos).

El proceso habrá terminado cuando ddrescue vuelva a la línea de comandos por causas naturales. En ese momento, la pantalla debería mostrar non-trimmed = 0k, non-scraped = 0k (ya no le queda nada pendiente de leer). Si esto no está a 0 es que otra cosa ha ido mal, como que ya no le queda espacio en disco para grabar los datos. Rescued indica cuánto se ha leído correctamente, errors cuantos bloques de errores se han encontrado y errsize el tamaño total de lo que no se ha podido leer.

Limitaciones:
- Desgraciadamente, ddrescue solo lee la primera pista del disco. En discos con múltiples pistas (p.ej.: ISO + audio) tendrás que hacer algún tipo de "arreglo", como volcar el audio por separado para crear un conjunto BIN/CUE.
- No estoy seguro de que pueda volcar imágenes de discos en modo 2 (usan 2352 bytes por sector), o leer bloques de 2352 bytes para leer también los subcódigos. Si usamos -b 2352, los bloques de 2352 bytes leídos contendrán datos de dos sectores de 2048 bytes.

Notas:
- Esto genera una imagen ISO bastante normalita sin sectores erróneos. Todos los ficheros serán legibles/extraíbles, aunque sus contenidos estén corruptos.
- Si los sectores erróneos son debidos a algún tipo de protección, es muy probable que la protección "salte" (spoiler: eso no pasa con los discos de FX / Dinamic).
- Un posible siguiente paso (si los sectores son debidos a una protección) podría ser extraer los ficheros ahora legibles, copiar algún tipo de crack y regenerar una ISO que se instale con el crack ya puesto.
Última edición por zup el 14 Ene 2022, 07:53, editado 4 veces en total.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 2970
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 68 veces
Gracias recibidas: 326 veces
Contactar:

Re: Volcando / reparando discos con ddrescue

Mensajepor zup » 13 Ene 2022, 09:12

CASO 2: Generando una ISO válida a partir de dos discos defectuosos
Parece un caso poco probable, pero me ha pasado. La historia es así... a mi hijo le dieron en un pendrive un programa educativo que fallaba (varios ficheros de audio medían 0k), así que me fuí a la biblioteca de mi pueblo (biblioteca B) y descubrí que el disco de ese programa estaba rallado. Como ese disco lo tenían en varias bibliotecas, me fui a la del barrio de al lado (biblioteca M)... y su disco también estaba rallado en sitios diferentes.

Así que con esos dos discos defectuosos he podido generar una ISO completa. El procedimiento:
Paso 1: Insertamos el disco B y creamos una imagen:

Código: Seleccionar todo

ddrescue -b2048 -d /dev/cdrom disco_B.iso disco_B.map


Paso 2: Insertamos el disco M y creamos una imagen:

Código: Seleccionar todo

ddrescue -b2048 -d /dev/cdrom disco_M.iso disco_M.map


Paso 3: ¡Fuuuu... sión!

Código: Seleccionar todo

ddrescue -b2048 -r1 -d disco_B.iso disco_M.iso disco_M.map

Aquí está el meollo. Cuando se usa -r1, le decimos a ddrescue que tiene que volver a leer los sectores erróneos que le marque el fichero mapa. Como origen de esos datos, vamos a usar la imagen disco_B.iso y como destino disco_M.iso. En definitiva, vamos a rellenar los "huecos" de disco_M.iso con los datos de disco_B.iso.

Si todo va bien, lo hará rápidamente y nos marcará errors=0 y errsize=0k. Si no va tan bien... al menos acabaremos con una ISO con menos errores, lo que puede ser suficiente. Ojo que la imagen "buena" es disco_M.iso... es fácil confundirse.

Limitaciones: Obviamente, hay que tener una razonable seguridad de que ambos discos de origen son exactamente iguales (o lo eran antes de dañarse). En cualquier otro caso la ISO generada seguirá siendo errónea.

Notas:
- Los más aventureros se pueden preguntar por qué no hice esto en el paso 2 (con el disco M insertado) y acabo en solo dos pasos:

Código: Seleccionar todo

ddrescue -b2048 -r1 -d /dev/cdrom disco_B.iso disco_B.map

Bueno, es una opción válida, pero generar dos imágenes tiene la ventaja de que puedo compararlas para saber si la cosa va a ir bien. Puedo mirar si son exactamente del mismo tamaño; también puedo extraer los primeros 10 megas (suponiendo que no tengan errores ahí) y compararlos. Si alguna de estas cosas sale mal, no tiene sentido intentar fusionarlas.

- El parámetro -r indica el número de relecturas que debe hacer antes de volver a la línea de comandos, y ddrescue solo relee las partes que tienen defectos. Si nuestra imagen tiene pocos sectores defectuosos, podemos crear la imagen y luego relanzar ddrescue con -r3 para ver si podemos eliminar los errores a base de relecturas (incluso cambiando de ordenador/lector). Esta es otra opción que no se da en programas de volcado de discos.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 2970
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 68 veces
Gracias recibidas: 326 veces
Contactar:

Re: Volcando / reparando discos con ddrescue

Mensajepor zup » 13 Ene 2022, 09:24

Más allá de ddrescue...

Como ya he dicho, cada vez que se vuelca una imagen con ddrescue obtenemos un fichero mapa con los sectores erróneos. Hay un paquete (desgraciadamente, no mantenido) que se llama ddrutility (requiere sleuthkit) y tiene utilidades que leen ese mapa y nos pueden decir qué ficheros están afectados por estos sectores erróneos.

Las buenas noticias es que, de esta manera, podemos saber si están afectados ficheros imprescindibles (p.ej.: suponiendo que en vez de ISOs estemos trabajando con un disco duro defectuoso y vemos que solo están afectados ficheros DLL de windows, hemos esquivado una bala).

Las malas noticias (al menos para esto) es que se soportan sistemas de ficheros NTFS, ext2/3/4, FAT y HFS... me encantaría tener un programa que hiciera lo mismo para ISOs. Otra cuestión es que ddrutility está "abandonado", así que no está disponible para la mayoría de las distribuciones y habrá que compilarlo a manija. ¿Sugerencias?

Notas:
- Si bien ddrutility está bastante automatizado, creo que todas las funciones que tiene están ya incluídas en sleuthkit (de nuevo, solo disponible determinados sistemas de ficheros).
- También podemos optar por hacer un volcado de imagen usando imgburn. Es el único programa que he probado que, además de generar una lista de sectores erróneos, genera una lista de ficheros afectados. El problema es que volvemos al caso 1: si hay pocos sectores erróneos, nos llevará poco tiempo; si tienes un disco con muchos sectores erróneos puede que no puedas terminar el proceso de una vez y no hay manera de continuarlo.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!


Volver a “Taller general”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados