[TAG] Photo recovery from a formatted flash memory card

Neil Youngman ny at youngman.org.uk
Mon Jul 5 11:02:06 MSD 2010


Recently I've needed to recover photos from 2 compact flash cards, one of 
which was accidentally formatted and one of which was faulty. Subsequently I 
have used the "expertise" acquired to recover photos from a formatted SD card 
as a favour to a random stranger on the internet.

The first thing I did was backup the card, using a simple dd if=/dev/sdX1 
of=/path/to/data

The first time I did this, I was in a hurry. I had seen a lot of 
recommendations for a Windows tool called Recuva and I didn't want to spend 
much time on research, so I just grabbed a copy of that. It seemed to work 
just fine "recovering" 1045 files, but on closer inspection, none of them 
were complete. They should have been 3-5 MB jpegs, but they were all about 
1.5MB and only the thumbnails were viewable. I messed about with the 
settings, to no effect and looked at a couple of other Windows tools, before 
I saw a recommendation for photorec, which is part of Christophe Grenier's 
testdisk suite. http://www.cgsecurity.org/wiki/PhotoRec

Photorec looked like a Unix native tool, so I downloaded the appropriate 
tarball, unpacked it and ran it. It took the file name of my backup as an 
argument, so I didn't even need to have the card handy. I walked  through a 
few simple menu options and it recovered just over 1000 photos. This time 
they all appeared to complete, full resolution photos. As far as I could tell 
there was nothing missing.

Reading through the instructions, I found that there was probably junk data at 
the end of the photos, which could be removed by running convert (from the 
ImageMagick suite) on the jpeg.

The sequence of commands below is how I recovered the photos from the SD card.

$ dd if=/dev/sdd1 of=/tmp/sdcard.bin
$  ~/testdisk-6.11.3/linux/photorec_static /tmp/sdcard.bin 
$ mkdir /tmp/recovered
$ for file in /tmp/recup_dir.1/*.jpg; do 
convert "$file" "/tmp/recovered/$(basename $file)"; done

The first command is just a binary copy of the raw data from the SD card to a 
file.

The next command obviously runs photorec itself. In the menus, just accepting 
the defaults is usually sufficient, but you have to select a directory in 
which to store the results. Photorec actually creates subdirectories under 
that directory, called recup_dir.N. In this case I selected /tmp/ to store 
the recovered photos in.

Having recovered the photos, I created the directory /tmp/recovered and ran a 
loop, calling convert on the files, as explained above. That directory, 
containing the final results was then burned to a CD, which was sent to the 
owner of the photos. 

As you can see photorec is a very simple tool to use and as far as I could, it 
recovered all the files that we expected to find on the various flash cards. 
I would recommend it to anyone who has a need to recover photos from a 
corrupt, defective or formatted flash card.

Neil Youngman



More information about the TAG mailing list