viernes, mayo 07, 2010

Recuperar los datos de un CD/DVD rayado sin usar la refrigeradora o hielera!


He escuchado de muchos métodos para intentar recuperar los datos de un medio óptico (CD o DVD) rayado o dañado en parte, todo lo que había escuchado era muy mítico y confirmo que poco efectivo, hasta que conocí: GNU ddrescue.

Los métodos para intentar recuperar total o parcialmente los datos de un CD/DVD podrían clasificarse en dos categorías:
  1. Métodos por hardware
  2. Métodos por software
Los más populares son los métodos por hardware, entre estos el que muchos amigos me han sugerido es colocar un CD en la refrigeradora, congelar el disco y después alguna acción "mágica" que desconozco sucede y el disco debería poder ser leído... pero confirmo que no es cierto.

Recuerdo de otro método por hardware que popularizó un compañero en los tiempos universitarios... era un aparato que en teoría pulía la superficie de los discos, lo suficiente como para que los rayones desaparecieran, recuerdo que dicho compañero luego nos comentó (quejándose) que finalizó de usar el limpiador o pulidor de discos cuando notó que tenía discos con más rayas que al principio...


Al parecer usar una tela fina con algún líquido como alcohol tiene la misma efectividad (y es más barato).

Estos métodos por hardware supongo quizás podrían ayudar un poco, pero siempre es costoso sacar los datos del disco para quemarlos o respaldarlos en nuevo medio.

Es entonces que llega al rescate un software libre excelente que acabo de probar no hace mucho, se llama: ddrescue, el cual no sólo ayuda a recuperar un CD o DVD, sino también puede asistir en la recuperación de datos de discos duros.

Evidentemente no recuperará lo imposible de leer, pero permite obtener del medio dañado de manera automática sin estar reintentado manualmente y sin reiniciar el proceso después de cada error.

La explicación de su funcionamiento está muy bien detallada en su sitio Web:

http://www.gnu.org/software/ddrescue/ddrescue_es.html

"GNU ddrescue es una herramienta de recuperación de datos. Copia los datos de un fichero o un dispositivo de bloques (disco duro, cdrom, etc) a otro, intentando recuperar los datos en caso de producirse errores de lectura.

Ddrescue no trunca el fichero de salida si no se le pide. De este modo cada vez que es ejecutado sobre el mismo fichero de salida, intenta rellenar los huecos.

La operación básica de ddrescue es totalmente automática. Es decir, no es necesario esperar a que se produzca un error, parar el programa, leer las anotaciones, ejecutarlo en modo inverso, etc.

Si se usa el fichero de anotaciones (logfile) de ddrescue, los datos son recuperados muy eficientemente. Además se puede interrumpir el rescate en cualquier momento y reanudarlo después en el mismo punto.

Combinación automática de copias de seguridad: Si se tienen dos o más copias dañadas de un mismo fichero, cdrom, etc, y se ejecuta ddrescue en todas ellas, una cada vez, sobre el mismo fichero de salida, se obtendrá probablemente un fichero completo y libre de errores. Esto es así porque la probabilidad de que existan áreas dañadas en los mismos lugares de diferentes ficheros de entrada es muy baja. Usando el fichero de anotaciones (logfile), sólo se intentan leer los bloques que se necesiten de la segunda copia y sucesivas. "

Unas monjitas de la casa de retiro El Tepeyac me solicitaron les ayudara a sacar unos datos de un CD que al ser introducido en la lectora e intentar observar su contenido, pegaba la computadora por los intentos fallidos del sistema operativo en leer su contenido.

En disco presentaba rayones circulares concéntricos hacia la parte más externa de su circunferencia.

Esto fue lo que hice: (el manual de ddrescue puede ayurar mucho: http://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html#Examples)

Instalar GNU ddrescue en GNU/Linux Debian:

debdenis:/home/denis# apt-get install gddrescue


Crear un folder donde almacenar los datos recuperados

debdenis:/home/denis# mkdir rescatar
debdenis:/home/denis# cd rescatar/


Introducir el CD en la unidad lectora. Y poner el programa a trabajar. El programa trabaja a nivel de bloques no por archivos, así que el resultado final va a ser un archivo ISO el cual después de puede montar o quemar en otro CD para usar los archivos. En mi caso el archivo iso a generar se llama cd.iso y el archivo log que usa el programa se llamará log.txt, con lo cual luego se puede parar el programa y continuar luego.

debdenis:/home/denis/rescatar# ddrescue -d -b2048 /dev/cdrom cd.iso log.txt

Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued:         0 B,  errsize:       0 B,  errors:       0
Current status
rescued:   304492 kB,  errsize:    249 kB,  current rate:      227 B/s
ipos:   304742 kB,   errors:       5,    average rate:     438 kB/s
opos:   304742 kB
Copying data...


Al inicio la copia avanzó bastante rápido, pero luego al llegar a las partes rayadas la tasa de transferencia bajo drásticamente. No medí la cantidad de horas usadas, fueron como dos noches seguidas, hasta que terminó así:

Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued:   487026 kB,  errsize:  80318 kB,  errors:     387
Current status
rescued:   522086 kB,  errsize:  84451 kB,  current rate:     393 kB/s
ipos:   606535 kB,   errors:     460,    average rate:     4434 B/s
opos:   606535 kB


Según esto aproximadamente 82 Mb fueron los que no se pudieron recuperar, pero OJO, la recuperación es por bloque NO por archivo, por lo tanto a pesar de eso hay algunos archivos "rellenados" por lo cual probablemente no podrán ser leídos (así me pasó con unos cuantos pocos PDF del CD).

Desde antes de que el programa finalizara ya podía montar el ISO y revisar el contenido de lo rescatado hasta el momento:

debdenis:/home/denis/rescatar# mount -o loop -t iso9660 /home/denis/rescatar/cd.iso /home/denis/mnt/



Al final K3B hizo el resto, para quemar el ISO en un CD nuevo.