A friend has seen his FAT partition in his USB key become unmountable. Here's how I recovered it.
Analysis:
-
Make a dump:
dd if=/dev/sdb1 of=partition.img
-
Have a look. I like
mc
for this, as it has a nice hex viewer and editor (F3
to view, thenF4
for hex view;F2
would then allow hex edit, if needed). -
Turns out that the initial part of the partition has been completely overwritten by
0xff
bytes. After some point (around block 224), the0xff
bytes end and there seems to be a FAT structure (easy to identify because it contains sequences of increasing 16bit values).
It seems that the damage is only limited to filesystem structures. I should be able to recover most data by regenerating the filesystem data and hoping that at least the second FAT is still intact.
Solution:
# Make a copy of the partition cp partition.img partition1.img # Reformat it: that gives us the bits of filesystem structures we need mkdosfs partition1.img # Graft together the two parts dd if=partition1.img of=partition2.img count=224 dd if=partition.img of=partition2.img seek=224 skip=224 # Tidy up the result, telling dosfsck to use the 2nd FAT. dosfsck -rw partition2.img # Mount and check what's available mount -o loop,ro partition2.img /mnt
Yo! Everything was there again.
When I teach about standard Unix commands, it takes a while for people to realise all the powerful things you can easily do with them.