Recientemente tuve problemas con una tarjeta Compact Flash Sandisk Extreme II de 4GB que suelo usar con mi 5D clásica y una 50D.

Antes de nada indicar que uso Linux, y los comandos que describa se ejecutan en ese sistema operativo. Para sistemas operativos Microsoft Windows o MacOS X habrá que buscar las aplicaciones equivalentes.


Los síntomas:
  • Algunas fotos después de hacerlas no las puedes abrir con DPP:
    • DPP arroja un error de decodificación al abrir el RAW, sin embargo muestra la previsualización de la toma y/o
    • DPP no muestra si quiera la previsualización

  • Algunas fotos después de hacerlas no se pueden visualizar en la cámara, otras sí pero no las puedes abrir luego con DPP.
  • Formatear la tarjeta en la cámara o en otras cámaras no resuelve el problema
  • Formatear la tarjeta en el PC no resuelve el problema
  • Borrar las particiones de la tabla de particiones no resuelve el problema


Esa la primera vez que me sucede desde la EOS 300D, la EOS 300D siempre me dió problemas con tarjetas Compact Flash de más de 1GB, siendo el síntoma idéntico al descrito. Llevo usando tarjetas Compact Flash desde finales de los '90, generalmente los problemas si no son físico vienen por la implementación y limitación del firmware/hardware del lector del dispositivo.

Pero esta vez me tenía frito el tema, la 50D aguanta todo tipo de tarjetas Compact Flash (menos las del tipo I/O) siendo más nueva que la 5D clásica, siendo además una tarjeta con un uso moderado no terminaba por creer que se hubiera estropeado.

Recuperación de fotos
En un caso así usar un software de recuperación de fotos no sirve. Las fotos que estén mal en la tarjeta continuarán están mal, el software de recuperación no hace ninguna magia, simplemente rastrea el contenido de la tarjeta y extrae la información, si puede leer la tabla de asignación de ficheros la usará y los ficheros saldrán igual de mal que antes (esa tabla se conoce como FAT y suelen grabarse 2 juegos de esas tablas en las tarjetas).

Así que simplemente copio el contenido como hago siempre y de aquellas fotos (uso RAW siempre) que puedo ver la foto en miniatura en DPP pero que no puedo abrir por estar corrompido el fichero RAW, uso DCRAW para extraer el JPG que hay incrustado en RAW. Para ello uso el siguiente comando:
dcraw -e archivo_raw.cr2

Pero claro, tan pronto volvía a usar la tarjeta volvíamos a las andadas.

La tabla de particiones
Después de probar varias cosas con la tarjeta sin éxito y que están descritas en los síntomas, caí en cuenta de que estaba olvidando un tema.
Un talón de aquiles del sistema de archivos FAT, FAT32, NTFS, HFS es que dependen de un espacio especial que hay en el medio (entiendase por medio una tarjeta, una memoria USB, un disco duro tradicional o SSD), ubicado en el primer sector y que se llama coloquialmente tabla de particiones.
Esa tabla de particiones si está mal generada o se ha corrompido puede volver a uno loco, no suele servir el borrarla o generar una nueva, por algún motivo la nueva tabla de particiones sufre de los mismos defectos que la anterior, lo cual hace que cuando se cree el sistema de archivos este contengan información incorrecta sobre el medio.
No voy a entrar en más detalles, que esto pertenece a la arqueología informática de los '80 y de largas noches de insomio.

La solución
Esos problemas con la tabla de particiones se suelen solventar borrando el sector donde se almacena esta. Cuando digo borrar me refiero a borrar a bajo nivel, quitar después el medio del sistema. Luego volvemos a insertar el medio (la tarjeta) para después crear una tabla y sistemas de archivos con los datos de configuración del medio que haya detectado el dispositivo en ese momento.
Si el medio tiene mal el sector donde se almacena la tabla de particiones, literalmente hemos perdido el medio.

El siguiente reto suele ser como borrar a bajo nivel ese setor, en Linux tenemos el comando dd, en otros sistemas operativos hay que buscarse la vida por que el fabricante suele protegernos de tener que hacer esas cosas.
El comando dd es un comando que sólo puede ejecutarse como administrador, es un comando que en malas manos puede borrar tu disco duro en menos que tardás en decir "Amen" (si tienes una SSD ni te cuento).

El formato del comando que uso para borrar el sector que contiene la tabla de particiones de la tarjeta es como sigue:
dd if=/dev/zero of=/dev/XXX count=10
dd es el comando
if=/dev/zero indica que voy a leer el dispostivo linux /dev/zero que siempre devuelve eso zeros que es lo que necesito
of=/dev/XXX es el dispositivo de la tarjeta, aquí pongo XXX por que aún no sé que dispositvo es la tarjeta, y es la parte peligrosa del asunto
count=10 indica que meteré 10 bloques (generalmente un bloque será un sector de 512 bytes o 4096 bytes, eso depende del medio)

Realmente sólo necesito borrar un sector, el primero, pero por si acaso voy a borrar 10 de una tacada.

Para averiguar el dispositivo de la tarjeta usaremos el comando dmesg de Linux, otro comando que ejecutaremos como administrador (root en Linux).
Primero retiramos la tarjeta del lector del PC, se me olvidó comentar ese detalle, necesitaremos de un lector de tarjetas.
Luego insertamos la tarjeta, esperamos unos segundos y ejecutamos el comando:
dmesg | tail

Eso mostrará las últimas lineas del comando dmesg, es decir, los mensajes más recientes:
Código:
[9200228.955847] usb-storage: device scan complete
[9200228.981970] scsi 5:0:0:0: Direct-Access     IBM-DARA -206000          0811 PQ: 0 ANSI: 0
[9200228.987960] sd 5:0:0:0: [sda] 11733120 512-byte hardware sectors (6007 MB)
[9200228.993907] sd 5:0:0:0: [sda] Test WP failed, assume Write Enabled
[9200228.999418] sd 5:0:0:0: [sda] Assuming drive cache: write through
[9200229.007352] sd 5:0:0:0: [sda] 11733120 512-byte hardware sectors (6007 MB)
[9200229.011504] sd 5:0:0:0: [sda] Test WP failed, assume Write Enabled
[9200229.015563] sd 5:0:0:0: [sda] Assuming drive cache: write through
[9200229.023206]  sda: sda1
[9200229.059349] sd 5:0:0:0: [sda] Attached SCSI disk
Como veis muestra 10 líneas con los mensajes de la inserción de un dispositivo en el sistema (es un disco duro USB en este caso).
Las líneas que nos interesan son las tres últimas, destacaré en negrita el dato que necesitamos:
[9200229.015563] sd 5:0:0:0: [sda] Assuming drive cache: write through
[9200229.023206] sda: sda1
[9200229.059349] sd 5:0:0:0: [sda] Attached SCSI disk

Nos está indicando que el dispositivo insertado se llama sda en nuestro sistema, ojito con esto, si insertas varios dispositivos habrá más líneas como esas y como sólo ves las últimas 10 no sabrás si ese es el dispositivo bueno. Conviene, retirar todos los dispostivos, esperar e insertar el que queremos borrar, hacerlo dos veces para confirmar el dispositivo correcto.

En mi caso como se que es el sda sólo me queda lanzar el comando completo sustityendo XXX por el dispostivo correcto:
dd if=/dev/zero of=/dev/sda count=10

Hecho esto hemos borrado la tabla de particiones de la tarjeta, ahora mismo es como si estuviera virgen. Retiramos la tarjeta.

Lo siguiente que tenemos que hacer es insertar esta tarjeta en la cámara. Sí has leído bien, la insertamos en la cámara. Lo hago así por que quiero que me la detecte la cámara, cree la tabla de particiones que crea conveniente y formatée la tarjeta.

He observado que cuando la cámara ha formateado la tarjeta el tamaño ocupado era distinto, me explicaré. Cuando formateas una tarjeta en la cámara nunca está libre el 100%, hay unos pocos Kilobytes ocupados, se debe a que crear las carpetas y a veces uno o dos ficheros (eso depende del modelo de la cámara) ocupan unos poco kilobytes de espacio. Cuando la tarjeta fallaba y la formateaba en la cámara observé que el espacio ocupado era mayor que cuando la formatée habiendo hecho previamente el borrado a bajo nivel.

Hecho esto mis problemas con la dichosa tarjeta Compact Flash de 4GB han desaparecido. He hecho pruebas con ella y no ha vuelto a dar problemas, sólo me queda llenar esos 4GB por completo para descartarlo, así que tardaré unas semanas en hacerlo, publicaré los resultados.
Podría probar a llenar la tarjeta en el PC y ver si se corrompen los ficheros, pero prefiero probarlo con la cámara, total soy un "amateur"...

Espero que si finalmente confirmo en unas semas los resultados, os sirva a alguno.

En cuanto a los motivos para que esto suceda, no tengo ni la menor idea.

P.D. Esto es aplicable a otros medios como tarjetas SD, MMC, Memorystick, pero como apenas uso me limito aquí a las Compact Flash.