2019/10/07

Ejemplo de rescate de memoria de cámara

Un pariente borró accidentalmente sus fotos y videos de una cámara que encima tiene rota la tapita de las pilas, detallo acá lo hecho para restaurarlas:

El camino fácil


Primero, obtener una imagen de la memoria, hay que insertarla y ver que dice dmesg cómo encontrarla:

[69.899754] sd 8:0:0:0: [sdb] 7741440 512-byte logical blocks: (3.96 GB/3.69 GiB)
[69.906898] sdb: sdb1


Para ser estrictamente forenses, debimos haber desactivado el automount, para evitar cualquier escritura sobre el disco, en particular en Mint Mate me parece que con

gsettings set org.mate.meda-handling automount false

ya estamos. Recordá que si el disco se monta automáticamente, se hace read write y algo toca, aunque en este caso no debería hacer diferencia.

Luego con fdisk explorarla, por curiosidad y costumbre:


$> sudo fdisk /dev/sdb -l
Disk /dev/sdb: 3,7 GiB, 3963617280 bytes, 7741440 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device     Boot Start     End Sectors  Size Id Type
/dev/sdb1        8192 7741439 7733248  3,7G  b W95 FAT3
2

Otro motivo para no tomar la imagen hubiese sido estar recuperando información de un almacenamiento mayor al espacio disponible.

Para buscar lo borrado, el programa photorec ha resultado muy efectivo,

sudo apt install testdisk

Puede trabajar directamente sobre la memoria con sudo o sobre la imagen, mejor sobre la imagen, de paso no le damos sudo.

photorec sd.img

Con sudo seguramente hubiese mostrado la sd.


Hay que elegir si revisar todo el disco o la partición que encuentra, en este caso la partición. Si se hubiera borrado la tabla de particiones... whole disk.


Hay que elegir el formato, en este caso sabemos


 Elegimos que busque en toda la partición


 Y finalmente donde dejar lo rescatado




En el caso de esta vieja Kodak, recuperó imágenes y videos como esperábamos y además unos xmls, .ini y sqlite que como no aportan nada los ignoré.

Las fotos que comienzan con f son fotos, las que comienzan con t son previews.

Para ver el resultado, en Mint y parecidos con abrir la primera imagen se puede ver con el visor y luego pasar a modo galería o ir avanzando con la flecha. Como detalle de calidad se pueden rotar las imágenes que lo necesiten y al salir de visor ofrecerá guardar

Como no estaba seguro del orden, ejecuté el siguiente script que extrae la fecha de la metadata y compone un nuevo nombre:



Pongo una imagen en lugar de texto en parte por que se vé mas lindo, en parte por mala gente así tenés que tipear, lo cual te ayuda a familiarizarte con bash.


Con respecto a videos rotados, se pueden corregir con:


ffmpeg -i f0316864.avi -vf "transpose=2"  fixed.avi


o mejor aún con:


mencoder -vf rotate=2 f0316864.avi -oac copy -of lavf -lavfopts format=mpeg4 -ovc lavc -lavcopts vcodec=mpeg4 -o fixed2.avi


que conserva la calidad. El format y el vcodec dependeran del formato del video.

He visto recomendado usar avidemux pero ya teniendo ffmpeg y memcoder instalados, preferí no seguir instalando cosas. Quizás avidemux resuelva automáticamente lo del formato.

El camino difícil


No me gustan mucho los hubiese, seguramente, hubiera, supongo que dejé  más arriba, así que borré la tabla de particiones de la sd y trabajé directamente sobre ésta, para recorrer el camino de sudo y la falta de espacio.

Mirando más arriba la salida de fdisk dice que la partición empieza en 8192 * 512 y mirando lo primero que encontré, la tabla de particiones está bien al comienzo.



sudo dd if=/dev/zero bs=1024 count=1 of=/dev/sdb

Ojo que si te equivocás con of podés perder el disco. Si me dedicara a esto probablemente siempre usaría una virtual o una máquina de descarte. Si te equivocás con count o bs lo suficiente, te metés con los datos, por ello es mejor trabajar sobre la imagen previamente obtenida, pero no olvidemos que esto es un ejercicio, nunca necesitaríamos borrar la tabla de particiones.

Tampoco uses if=/dev/null, ya que como input no te da nada y nada escribe, necesitás ceros.




sudo photorec /dev/sdb



Si no le decís explícitamente la ruta, te muestra lo que haya.




Le dás Search, Other... (me faltó la captura y ya me aburrí)



 y anda otra vez.




Detalles de terminación


Además, la cámara estaba un poco rota, la tapita no cerraba por que volaron las muesquitas en la bisagra y en la punta contraria.



Lo bueno es que tiene para atornillar, sólo hay que hallar la pieza apropiada y el tornillo apropiado para no usar cinta adhesiva, para algo llevo años juntando tornillos y todo tipo de basura, como un perfil de aluminio de mosquitero:




Los comandos acá utilizados y otros de utilidad los comparto en github.