
-------
FatFuse
-------

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).

.. _bdec: ../bdec/
.. _fuse: http://fuse.sourceforge.net
.. _python: http://www.python.org


Capabilities
============

* FAT16
* FAT32
* Long filename support
* Read only


Usage
=====

Run
    mount.fat /path/of/mount/point /path/of/block/device [options]

where the block device could be, for example, /dev/sda1/.


Performance
===========

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.


Questions
=========

Q. When every operating system under the sun already implements a FAT 
   filesystem driver, why create another?

A. 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 :-).


Download
========

* `Version 0.4.0`_
  22 March 2007

  Changes:
    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

  Changes:
    Initial public release of 'fatfuse'. It is capable of mounting a read only
    FAT16/FAT32 image, and correctly handles long filenames.

.. _Version 0.4.0: files/fatfuse-0.4.0.tar.gz
.. _Version 0.3.0: files/fatfuse-0.3.0.tar.gz

