FatFuse is a linux fuse implementation capable of reading FAT16 and FAT32 filesytems. It is written in python, and uses the bdec binary decoding library to decode the on-disk filesystem. The actual code dealing with the conversion of the decoded structures is only a few hundred lines long, and the fuse filesystem code only a few hundred more (much of which is placeholder code).
where the block device could be, for example, /dev/sda1/.
The directory structure and cluster chain lists are cached in memory; this can lead to excessive memory consumption when a large amount of the filesystem is traversed.
Copying a 20MB file from a fatfuse mount takes 1.3 seconds; copying the same file using the in-kernel fat driver takes 0.2 seconds.
One of my USB disks became corrupted, and I wanted to recover the data. The bootsector and the first allocation table got wiped, while the second allocations table got corrupted. Neither the Windows chkdisk nor the linux fsck.vfat utilties were able to recover the data. From the development of this program I was able to recover most of the data from the disk.
That, and the geek cred :-).
Version 0.4.0 22 March 2007
Cache cluster chains so we don't have to iterate through all the previous entries in the cluster list to get to the one we want. Improved time to copy sample 20MB file from 4 seconds to 1.3 seconds.
For larger files the improvement would be more pronounced, as the algorithmic complexity changed from O(N!) to O(N).
Version 0.3.0 19 March 2007
Initial public release of 'fatfuse'. It is capable of mounting a read only FAT16/FAT32 image, and correctly handles long filenames.