Recuperando datos e imágenes de una tarjeta SD que falla

Este verano nos hemos encontrado que una tarjeta mini SD antigua ha empezado a fallar. La información aparentemente está ahí pero cuando se intentan ver algunas fotos la tarjeta deja de funcionar. Si se saca la tarjeta y se vuelve a insertar, funciona un rato de nuevo.

Para rescatar la mayoría de las fotos, hemos hecho lo siguiente en Ubuntu GNU/Linux:

  1. Con el adaptador, insertarla en el ordenador (intentar rescatarla con el móvil conectado al ordenador no es aconsejable ya que Android interferiría). Conviene activar el LOCK del adaptador para evitar que el intento de rescate borre datos de la tarjeta.
  2. Averiguar el dispositivo donde está la tarjeta mirando con mount. Aparecerá como /media/UNA-SERIE-DE-NUMEROS o su ETIQUETA (es lo mismo que en el explorador de archivos):
    $ mount
    /dev/sda5 on / type ext4 (rw,errors=remount-ro)
    proc on /proc type proc (rw,noexec,nosuid,nodev)
    ...
    /dev/mmcblk0 on /media/0000-7708 type vfat (ro,nosuid,nodev,uid=1000,...

    Es este caso es /dev/mmcblk0. Luego, desmontarla con:

    sudo umount /media/LA-SERIE-DE-NUMEROS
  3. Instalamos el paquete gddrescue.
  4. Rescatar una imagen de la tarjeta con: (más información de como funciona con: info ddrescue)
    sudo ddrescue -dr3 /dev/mmcblk0 copiaSDcard.img logfile
  5. Intentar montar lo recuperado (total o parcialmente) con:
    sudo mount -o loop,ro -t vfat copiaSDcard.img pru

Se puede ejecutar varias veces la orden ddrescue. En nuestro caso, cuando detectaba un error ya no recuperaba nada, así que: lo cortaba con Ctrl-C, extraía e insertaba la tarjeta de nuevo y volvía a lanzar ddrescue. Para evitar que la abra automáticamente cada vez que se inserta y tener que desmontarla, podemos desactivar el automount: Abrimos dconf-editor y en org.gnome.desktop.media-handling desactivamos automount. Hay que acordarse de volverlo a activar cuando terminemos.

Lo anterior no nos sirvió porque la carpeta de las imágenes, que es la que más interesaba, no se podía abrir en la imagen. Como sí se podía montar y leía algunas fotos, el siguiente script rescató casi todo en varias pasadas. Lo dejo por si a alguien le sirve, aunque habría que adaptar todas las rutas. En ImgMovilNokia-1 estaban puestas manualmente algunas fotos que ya había podido rescatar y en ImgMovilNokia-4 las que iba rescatando ddrescue.

#!/bin/bash

for f in pru/Imágenes/*.jpg; do
    if [[ -f Desktop/ImgMovilNokia-1/${f##*/}  ]]; then
        echo ${f##*/} ya de antes
    else
        echo ${f##*/}
        ddrescue -r3 $f Desktop/ImgMovilNokia-4/${f##*/} Desktop/ImgMovilNokia-4/${f##*/}.log
        sleep 2
        umount pru
        echo "Pulsa enter cuando reinsertes la tarjeta"
        read IGNORAME
        mount -o ro,utf8=1 /dev/mmcblk0 pru
    fi
done

Finalmente, tuve que usar la orden convert de ImageMagick para arreglar los ficheros JPG que tenían segmentos erróneos y no se podían abrir con Shotwell ni con GIMP:

convert Imagen0120.jpg Imagen0120-fixed.jpg