FAT32 was the filesystem introduced with Windows 95 OSR2 to replace the old FAT filesystem (now known as FAT16). There is also FAT12 which is used for floppy disks - you'll understand why shortly.

What do the 32, 16 and 12 mean in the names? They are the number of bits allocated to the file allocation table (also known as the FAT!) FAT16 allows up to 2^16 entries, and FAT32 allows up to 2^32 (although this is reduced to 2^28 on Windows 2000 due to the first 4 bits being reserved - but if you're running Windows 2000, you should be using NTFS). So how many entries can we have?

  • FAT12 - 2^12 = 4096
  • FAT16 - 2^16 = 65535
  • FAT32 - 2^32 = 4294967296
  • FAT32 - 2^28 = 268435456 (on Windows 2000)

Standard sectors are 512 bytes (0.5K) long. This means that if we allocated every sector individually, as is done with floppy disks, we would have the following maximum sizes.

  • FAT12 - 2^12 = 4096 x 0.5 = 2048K / 2 MB
  • FAT16 - 2^16 = 65535 x 0.5 = 32768K = 32 MB
  • FAT32 - 2^32 = 4294967296 x 0.5 = 2147483648 = 2 TB (Terabytes)
  • FAT32 - 2^28 = 268435456 (on Windows 2000) = 128 GB

So we can see that FAT12 is fine for normal floppy disks. However, FAT16 was running out of space on hard disks with hundreds of megabytes capacity long before FAT32 came on the scene, so clusters were used. Put simply, a cluster is a group of sectors that are considered atomic - they are allocated and de-allocated as one unit. This means that fewer FAT entries are needed, but on the other hand, there's more wastage. If you group, say, 4 sectors together as a single 2K cluster, and save a 512 byte file, you're wasting 75% of the space.

Cluster sizes varied as follows.

Disk Size     |   FAT16   |   FAT32   |
--------------+-----------+-----------+
260 MB–511 MB |   8 KB 	  |    N/A    |
512 MB–1 GB   |  16 KB    |    4 KB   |
1 GB–2 GB     |  32 KB    |    4 KB   |
2 GB–8 GB     |  N/A      |    4 KB   |
8 GB–16 GB    |  N/A      |    8 KB   |
16 GB–32 GB   |  N/A      |    16 KB  |
>32 GB        |  N/A      |    32 KB  |

So FAT32 made for much more efficient disk usage on larger disks.

The other big advantage of FAT32 is that on FAT16 the root directory is limited to 512 entries (which can be significantly lower if using long filenames). FAT32 has no limit.

On the other hand, FAT16's advantage is that everything can read it - in the early days of FAT32, only Windows 95 OSR2 and Windows 98 could read it. Now, however, it can be read by Windows 2000 and Windows XP, and also most recent versions of Linux (where it's referred to as VFAT).

In summary, FAT32 isn't a bad system, and is far superior to FAT16. But unless you're using Windows 95/98/ME, stick to NTFS (for Windows 2000/XP/2003) or an appropriate native filesystem if you're using Linux (eg ext3, reiserfs etc).

ariels also said "The problem with FAT is that it stores file blocks essentially as linked lists -- no more random access for you". This means that each sector (cluster) of a file on FAT has a pointer at the end of it to the next cluster - so to find a certain point in the file, you have to read the whole way through it. Most other filesystems have a sector map for each file, which lists all the sectors (or cluster) that comprise the file, at the start of the file, so you can quickly work out where a particular part of the file is.

RPGeek also points out that "The Linux 'vfat' driver is actually distinguished from the 'msdos' driver by long filename support, not fat32 support (though only vfat supports fat32)"