Hubbry Logo
File Allocation TableFile Allocation TableMain
Open search
File Allocation Table
Community hub
File Allocation Table
logo
7 pages, 0 posts
0 subscribers
Be the first to start a discussion here.
Be the first to start a discussion here.
File Allocation Table
File Allocation Table
from Wikipedia

FAT
Developer(s)Microsoft, NCR, SCP, IBM, Compaq, Digital Research, Novell, Caldera
Full nameFile Allocation Table
Variants8-bit FAT, FAT12, FAT16, FAT16B, FAT32, exFAT, FATX, FAT+
Introduced1977 (1977) with Standalone Disk BASIC-80
Partition IDsMBR/EBR:
  • FAT12: 0x01 e.a. (Extended Attribute)
  • FAT16: 0x040x060x0E e.a.
  • FAT32: 0x0B0x0C e.a.
  • BDP: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
Structures
Directory contentsTable
File allocationLinked list
Bad blocksCluster tagging
Limits
Max volume size
  • FAT12: 32 MB (256 MB for 64 KB clusters)
  • FAT16: 2 GB (4 GB for 64 KB clusters)
  • FAT32: 2 TB (16 TB for 4 KB sectors)
Max file size4,294,967,295 bytes (4 GB − 1) with FAT16B and FAT32[1]
Max no. of files
  • FAT12: 4,068 for 8 KB clusters
  • FAT16: 65,460 for 32 KB clusters
  • FAT32: 268,173,300 for 32 KB clusters
Max filename length8.3 filename, or 255 UCS-2 characters when using LFN[nb 1]
Features
Dates recorded
  • Modified date/time, creation date/time (DOS 7.0 and higher only),
  • access date (only available with ACCDATE enabled),[2]
  • deletion date/time (only with DELWATCH 2)
Date range1980-01-01 to 2099-12-31 (2107-12-31)
Date resolution
  • 2 seconds for last modified time,
  • 2 seconds for creation time,
  • 1 day for access date,
  • 2 seconds for deletion time
ForksNot natively
AttributesRead-only, hidden, system, volume, directory, archive
File system
permissions
Transparent
compression
Transparent
encryption
  • FAT12/FAT16: Per-volume only with DR-DOS
  • FAT32: No

File Allocation Table (FAT) is a file system developed for personal computers and was the default file system for the DOS and Windows 9x operating systems.[3] Originally developed in 1977 for use on floppy disks, it was adapted for use on hard disks and other devices. The increase in disk drive capacity over time drove modifications to the design that resulted in versions: FAT12, FAT16, FAT32, and exFAT.

FAT was replaced with NTFS as the default file system on Microsoft operating systems starting with Windows XP.[4] Nevertheless, FAT continues to be commonly used on relatively small capacity solid-state storage technologies such as USB flash drives, SD cards, MultiMediaCards (MMC) and eMMC because of its compatibility across operating systems and embedded systems, and ease of implementation.[5]

Uses

[edit]

Historical

[edit]

FAT was used on hard disks throughout the DOS and Windows 9x eras. Microsoft introduced NTFS with the Windows NT platform in 1993, but FAT remained the standard for the home user until the introduction of Windows XP in 2001. Windows Me was the final version of Windows to use FAT as its default file system.

For floppy disks, FAT has been standardized as ECMA-107[6] and ISO/IEC 9293:1994[7] (superseding ISO 9293:1987[8]). These standards cover FAT12 and FAT16 with only short 8.3 filename support; long filenames with VFAT were partially patented.[9] While FAT12 is used on floppy disks, FAT16 and FAT32 are typically found on the larger media.

Modern

[edit]

FAT is used internally for the EFI system partition in the boot stage of EFI-compliant computers.[10]

FAT is still used in drives expected to be used by multiple operating systems, such as in shared Windows and Linux environments. Microsoft Windows additionally comes with a pre-installed tool to convert a FAT file system into NTFS directly without the need to rewrite all files, though this cannot be reversed easily.[11]

The FAT file system is used in removable media such as floppy disks, super-floppies, memory and flash memory cards or USB flash drives. FAT is supported by portable devices such as PDAs, digital cameras, camcorders, media players, mobile phones, game consoles, as well as embedded systems such as boomboxes and DVD players and vehicle audio systems with built-in USB ports and SD card readers.[12][13]

The DCF file system adopted by almost all digital cameras since 1998 defines a logical file system with 8.3 filenames and makes the use of either FAT12, FAT16, FAT32 or exFAT mandatory for its physical layer for compatibility.[14]

Technical details

[edit]

The file system uses an index table stored on the device to identify chains of data storage areas associated with a file, the File Allocation Table (FAT). The FAT is statically allocated at the time of formatting. The table is a linked list of entries for each cluster, a contiguous area of disk storage. Each entry contains either the number of the next cluster in the file, or else a marker indicating the end of the file, unused disk space, or special reserved areas of the disk. The root directory of the disk contains the number of the first cluster of each file in that directory. The operating system can then traverse the FAT, looking up the cluster number of each successive part of the disk file as a cluster chain until the end of the file is reached. Sub-directories are implemented as special files containing the directory entries of their respective files.

Each entry in the FAT linked list is a fixed number of bits: 12, 16 or 32. The maximum size of a file or a disk drive that can be accessed is the product of the largest number that can be stored in the entries (less a few values reserved to indicate unallocated space or the end of a list) and the size of the disk cluster. Even if only one byte of storage is needed to extend a file, an entire cluster must be allocated to it. As a result, large numbers of small files can result in clusters being allocated that may contain mostly "empty" data to meet the minimum cluster size.

Originally designed as an 8-bit file system, the maximum number of clusters must increase as disk drive capacity increases, and so the number of bits used to identify each cluster has grown. The successive major variants of the FAT format are named after the number of table element bits: 12 (FAT12), 16 (FAT16), and 32 (FAT32).

Variants

[edit]

There are several variants of the FAT file system (e.g. FAT12, FAT16 and FAT32). FAT16 refers to both the original group of FAT file systems with 16-bit wide cluster entries and also to later variants. "VFAT" is an optional extension for long file names, which can work on top of any FAT file system. Volumes using VFAT long-filenames can be read also by operating systems not supporting the VFAT extension.

Original 8-bit FAT

[edit]
8-bit FAT
Developer(s)Microsoft, NCR, SCP
Full name8-bit File Allocation Table
Introduced
Limits
Max file size8 MB
File size granularityrecord-granularity (128 bytes)[15][16]
Max filename length6.3 filename (binary files), 9 characters (ASCII files)[15][16]
Max directory depthNo sub-directories
Allowed filename
characters
ASCII (0x00 and 0xFF not allowed in first character)[15][16]
Features
Dates recordedNo
AttributesWrite protected, EBCDIC conversion, read after write, binary (random rather than sequential file)[15][16]

The original FAT file system (or FAT structure, as it was called initially) was designed and implemented by Marc McDonald,[17] based on a series of discussions between McDonald and Bill Gates.[17] It was introduced with 8-bit table elements[15][16][17] (and valid data cluster numbers up to 0xBF[15][16]) in a precursor to Microsoft's Standalone Disk BASIC-80 for an 8080-based successor[nb 2] of the NCR 7200 model VI data-entry terminal, equipped with 8-inch (200 mm) floppy disks, in 1977[18] or 1978.[nb 2] In 1978, Standalone Disk BASIC-80 was ported to the 8086 using an emulator on a DEC PDP-10,[19] since no real 8086 systems were available at this time. The FAT file system was also used in Microsoft's MDOS/MIDAS,[17] an operating system for 8080/Z80 platforms written by McDonald since 1979. The Standalone Disk BASIC version supported three FATs,[15][16][20] whereas this was a parameter for MIDAS. Reportedly, MIDAS was also prepared to support 10-bit, 12-bit and 16-bit FAT variants. While the size of directory entries was 16 bytes in Standalone Disk BASIC,[15][16] MIDAS instead occupied 32 bytes per entry.

Tim Paterson of Seattle Computer Products (SCP) was first introduced to Microsoft's FAT structure when he helped Bob O'Rear adapting the Standalone Disk BASIC-86 emulator port onto SCP's S-100 bus 8086 CPU board prototype during a guest week at Microsoft in May 1979.[19] The final product was shown at Lifeboat Associates' booth stand at the National Computer Conference in New York[19] on June 4–7, 1979, where Paterson learned about the more sophisticated FAT implementation in MDOS/MIDAS[17] and McDonald talked to him about the design of the file system.[18]

FAT12

[edit]
FAT12
Developer(s)SCP, Microsoft, IBM, Digital Research, Novell
Full name12-bit File Allocation Table
Introduced
Partition IDsMBR/EBR:
  • FAT12: 0x01 e.a.
  • BDP: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
Limits
Max volume size
  • 16 MB (with 4 KB clusters)
  • 32 MB (with 8 KB clusters)
Max file sizeLimited by volume size
File size granularity1 byte
Max no. of files4,068 for 8 KB clusters
Max filename length8.3 filename with OEM characters,
255 UCS-2 characters[nb 1] when using LFN
Max directory depth32 levels or 66 characters (with CDS),
60 levels or more (without CDS)
Features
Dates recorded
  • Modified date (not with 86-DOS before 0.42),
  • modified time (not with PC DOS 1.0 and 86-DOS), creation date/time (DOS 7.0 and higher only),
  • access date (only available with ACCDATE enabled),[2]
  • deletion date/time (only with DELWATCH 2)
Date range1980-01-01 to 2099-12-31 (2107-12-31)
Date resolution
  • 2 seconds for last modified time,
  • 10 ms for creation time,
  • 1 day for access date,
  • 2 seconds for deletion time
AttributesRead-only (since DOS 2.0), hidden, system, volume (since MS-DOS 1.28 and PC DOS 2.0), directory (since MS-DOS 1.40 and PC DOS 2.0), archive (since DOS 2.0)
File system
permissions
Transparent
compression
Per-volume, SuperStor, Stacker, DoubleSpace, DriveSpace
Transparent
encryption
Per-volume only with DR-DOS

Between April and August 1980, while borrowing the FAT concept for SCP's own 8086 operating system QDOS 0.10,[19] Tim Paterson extended the table elements to 12 bits,[21] reduced the number of FATs to two, redefined the semantics of some of the reserved cluster values, and modified the disk layout, so that the root directory was now located between the FAT and the data area for his implementation of FAT12. Paterson also increased the nine-character (6.3) filename[15][16] length limit to eleven characters to support CP/M-style 8.3 filenames and File Control Blocks. The format used in Microsoft Standalone Disk BASIC's 8-bit file system precursor was not supported by QDOS. By August 1980, QDOS had been renamed to 86-DOS.[22] Starting with 86-DOS 0.42, the size and layout of directory entries was changed from 16 bytes to 32 bytes[23] in order to add a file date stamp[23] and increase the theoretical file size limit beyond the previous limit of 16 MB.[23] 86-DOS 1.00 became available in early 1981. Later in 1981, 86-DOS evolved into Microsoft's MS-DOS and IBM PC DOS.[17][21][24] The capability to read previously formatted volumes with 16-byte directory entries[23] was dropped with MS-DOS 1.20.

FAT12 used 12-bit entries for the cluster addresses; some values were reserved to mark the end of a chain of clusters, to mark unusable areas of the disk, or for other purposes, so the maximum number of clusters was limited to 4078.[25][26] To conserve disk space, two 12-bit FAT entries used three consecutive 8-bit bytes on disk, requiring manipulation to unpack the 12-bit values. This was sufficient for the original floppy disk drives, and small hard disks up to 32 megabytes. The FAT16B version available with DOS 3.31 supported 32-bit sector numbers, and so increased the volume size limit.

All the control structures fit inside the first track, to avoid head movement during read and write operations. Any bad sector in the control structures area would make the disk unusable. The DOS formatting tool rejected such disks completely. Bad sectors were allowed only in the file data area. Clusters containing bad sectors were marked unusable with the reserved value 0xFF7 in the FAT.

While 86-DOS supported three disk formats (250.25 KB, 616 KB and 1232 KB, with FAT IDs 0xFF and 0xFE) on 8-inch (200 mm) floppy drives, IBM PC DOS 1.0, released with the original IBM Personal Computer in 1981, supported only an 8-sector floppy format with a formatted capacity of 160 KB (FAT ID 0xFE) for single-sided 5.25-inch floppy drives, and PC DOS 1.1 added support for a double-sided format with 320 KB (FAT ID 0xFF). PC DOS 2.0 introduced support for 9-sector floppy formats with 180 KB (FAT ID 0xFC) and 360 KB (FAT ID 0xFD).

86-DOS 1.00 and PC DOS 1.0 directory entries included only one date, the last modified date. PC DOS 1.1 added the last modified time. PC DOS 1.x file attributes included a hidden bit and system bit, with the remaining six bits undefined. At this time, DOS did not support sub-directories, but typically there were only a few dozen files on a diskette.

The PC XT was the first PC with an IBM-supplied hard drive, and PC DOS 2.0 supported that hard drive with FAT12 (FAT ID 0xF8). The fixed assumption of 8 sectors per clusters on hard disks practically limited the maximum partition size to 16 MB for 512 byte sectors and 4 KB clusters.

The BIOS Parameter Block (BPB) was introduced with PC DOS 2.0 as well, and this version also added read-only, archive, volume label, and directory attribute bits for hierarchical sub-directories.[27]

MS-DOS 3.0 introduced support for high-density 1.2 MB 5.25-inch diskettes (media descriptor 0xF9), which notably had 15 sectors per track, hence more space for the FATs.

FAT12 remains in use on all common floppy disks, including 1.44 MB and later 2.88 MB disks (media descriptor byte 0xF0).

Initial FAT16

[edit]
FAT16
Developer(s)Microsoft, IBM, Digital Research, Novell
Full name16-bit File Allocation Table
(with 16-bit sector entries)
Introduced1984-08-14 (PC DOS 3.0)
1984-08 (MS-DOS 3.0)
Partition IDsMBR/EBR:
  • FAT160x04 e.a.
  • BDP: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
Limits
Max file size4,294,967,295 bytes (4 GB − 1)
File size granularity1 byte
Max no. of files65,536 for 32 KB clusters
Max filename length8.3 filename with OEM characters, 255 UCS-2 characters[nb 1] when using LFN
Max directory depth32 levels or 66 characters (with CDS),
60 levels or more (without CDS)
Features
Dates recorded
  • Modified date/time, creation date/time (DOS 7.0 and higher only),
  • access date (only available with ACCDATE enabled),[2]
  • deletion date/time (only with DELWATCH 2)
Date range1980-01-01 to 2099-12-31 (2107-12-31)
Date resolution
  • 2 seconds for last modified time,
  • 10 ms for creation time,
  • 1 day for access date,
  • 2 seconds for deletion time
AttributesRead-only, hidden, system, volume, directory, archive
File system
permissions
Transparent
compression
Per-volume, SuperStor, Stacker, DoubleSpace, DriveSpace
Transparent
encryption
Per-volume only with DR-DOS

In 1984, IBM released the PC AT, which required PC DOS 3.0 to access its 20 MB hard disk.[28][29] Microsoft introduced MS-DOS 3.0 in parallel. Cluster addresses were increased to 16-bit, allowing for up to 65,526 clusters per volume. However, the maximum possible number of sectors and the maximum partition size of 32 MB did not change. Although cluster addresses were 16 bits, this format was not what today is commonly understood as FAT16. A partition type 0x04 indicates this form of FAT16 with less than 65,536 sectors (less than 32 MB for sector size 512). The benefit of FAT16 was the use of smaller clusters, making disk usage more efficient, particularly for large numbers of files only a few hundred bytes in size.

As MS-DOS 3.0 formatted all 16 MB-32 MB partitions in the FAT16 format, a 20 MB hard disk formatted under MS-DOS 3.0 was not accessible by MS-DOS 2.0.[30] MS-DOS 3.0 to MS-DOS 3.30 could still access FAT12 partitions under 15 MB, but required all 16 MB-32 MB partitions to be FAT16, and so could not access MS-DOS 2.0 partitions in this size range. MS-DOS 3.31 and higher could access 16 MB-32 MB FAT12 partitions again.

Logical sectored FAT

[edit]

MS-DOS and PC DOS implementations of FAT12 and FAT16 could not access disk partitions larger than 32 megabytes. Several manufacturers developed their own FAT variants within their OEM versions of MS-DOS.[31]

Some vendors (AST and NEC[31]) supported eight, instead of the standard four, primary partition entries in their custom extended Master Boot Record (MBR), and they adapted MS-DOS to use more than a single primary partition.

Other vendors worked around the volume size limits imposed by the 16-bit sector entries by increasing the apparent size of the sectors the file system operated on. These logical sectors were larger (up to 8192 bytes) than the physical sector size (still 512 bytes) on the disk. The DOS-BIOS or System BIOS would then combine multiple physical sectors into logical sectors for the file system to work with.

These changes were transparent to the file system implementation in the DOS kernel. The underlying DOS-BIOS translated these logical sectors into physical sectors according to partitioning information and the drive's physical geometry.

The drawback of this approach was increased memory used for sector buffering and deblocking. Since older DOS versions could not use large logical sectors, the OEMs introduced new partition IDs for their FAT variants in order to hide them from off-the-shelf issues of MS-DOS and PC DOS. Known partition IDs for logical sectored FATs include: 0x08 (Commodore MS-DOS 3.x), 0x11 (Leading Edge MS-DOS 3.x), 0x14 (AST MS-DOS 3.x), 0x24 (NEC MS-DOS 3.30[31]), 0x56 (AT&T MS-DOS 3.x), 0xE5 (Tandy MS-DOS), 0xF2 (Sperry IT MS-DOS 3.x, Unisys MS-DOS 3.3 – also used by Digital Research DOS Plus 2.1).[32] OEM versions like Toshiba MS-DOS, Wyse MS-DOS 3.2 and 3.3,[33] as well as Zenith MS-DOS are also known to have utilized logical sectoring.[34]

While non-standard and sub-optimal, these FAT variants are perfectly valid according to the specifications of the file system itself.[citation needed] Therefore, even if default issues of MS-DOS and PC DOS were not able to cope with them, most of these vendor-specific FAT12 and FAT16 variants can be mounted by more flexible file system implementations in operating systems such as DR-DOS, simply by changing the partition ID to one of the recognized types.[nb 3] Also, if they no longer need to be recognized by their original operating systems, existing partitions can be "converted" into FAT12 and FAT16 volumes more compliant with versions of MS-DOS/PC DOS 4.0–6.3, which do not support sector sizes different from 512 bytes,[35] by switching to a BPB with 32-bit entry for the number of sectors, as introduced since DOS 3.31 (see FAT16B below), keeping the cluster size and reducing the logical sector size in the BPB down to 512 bytes, while at the same time increasing the counts of logical sectors per cluster, reserved logical sectors, total logical sectors, and logical sectors per FAT by the same factor.

A parallel development in MS-DOS / PC DOS which allowed an increase in the maximum possible disk size was the extension of the number of FAT partitions on a hard disk beyond the earlier 4, and the replacement of "installable block devices" with native DOS FAT partitions. To allow the use of more FAT partitions in a compatible way, a new partition type was introduced in PC DOS 3.2 (1986), the extended partition (EBR),[17] which is a container for an additional partition called logical drive. Since PC DOS 3.3 (April 1987), there is another, optional extended partition containing the next logical drive, and so on. The MBR of a hard disk can either define up to four primary partitions, or an extended partition in addition to up to three primary partitions.

Final FAT16

[edit]
FAT16B
Developer(s)Compaq, Digital Research, IBM, Microsoft, Novell
Full name16-bit File Allocation Table
(with 32-bit sector entries)
Introduced
Partition IDsMBR/EBR:
Limits
Min volume size
  • MB (with 128 byte sectors)
  • 32 MB (with 512 byte sectors)
  • 256 MB (with 4 KB sectors)
Max volume size
  • GB (with 32 KB clusters)
  • 4 GB (with 64 KB clusters) (NT 4, PTS-DOS, EDR-DOS)
  • 8 GB (with 128 KB clusters and 1 or 2 KB sectors) (NT 4 and EDR-DOS only)
  • 8 GB (with 128 KB clusters and 512 byte sectors) (EDR-DOS only)
  • 16 GB (with 256 KB clusters and 2 or 4 KB sectors) (NT 4 only)
Max file size
  • 2,147,483,647 bytes (2 GB − 1) (without LFS)
  • 4,294,967,295 bytes (4 GB − 1) (with LFS)
  • limited by volume size only (with FAT16+[36])
File size granularity1 byte
Max no. of files65,460 for 32 KB clusters
Max filename length8.3 filename with OEM characters,
255 UCS-2 characters[nb 1] when using LFN
Max directory depth32 levels or 66 characters (with CDS),
60 levels or more (without CDS)
Features
Dates recorded
  • Modified date/time, creation date/time (DOS 7.0 and higher only),
  • access date (only available with ACCDATE enabled),[2]
  • deletion date/time (only with DELWATCH 2)
Date range1980-01-01 to 2099-12-31 (2107-12-31)
Date resolution
  • 2 seconds for last modified time,
  • 10 ms for creation time,
  • 1 day for access date,
  • 2 seconds for deletion time
AttributesRead-only, hidden, system, volume, directory, archive
File system
permissions
Transparent
compression
Per-volume, SuperStor, Stacker, DoubleSpace, DriveSpace
Transparent
encryption
Per-volume only with DR-DOS

In November 1987, Compaq Personal Computer DOS 3.31 (a modified OEM version of MS-DOS 3.3 released by Compaq with their machines) introduced what today is simply known as the FAT16 format, with the expansion of the 16-bit disk sector count to 32 bits in the BPB. Although the on-disk changes were minor, the entire DOS disk driver had to be converted to use 32-bit sector numbers, a task complicated by the fact that it was written in 16-bit assembly language. The result was initially called the DOS 3.31 Large File System. Microsoft's DSKPROBE tool refers to type 0x06 as BigFAT,[37] whereas some older versions of FDISK described it as BIGDOS. Technically, it is known as FAT16B.

Since older versions of DOS were not designed to cope with more than 65,535 sectors, it was necessary to introduce a new partition type for this format in order to hide it from pre-3.31 issues of DOS. The original form of FAT16 (with less than 65,536 sectors) had a partition type 0x04. To deal with disks larger than this, type 0x06 was introduced to indicate 65,536 or more sectors. In addition to this, the disk driver was expanded to cope with more than 65,535 sectors as well. The only other difference between the original FAT16 and the newer FAT16B format is the usage of a newer BPB format with 32-bit sector entry. Therefore, newer operating systems supporting the FAT16B format can cope also with the original FAT16 format without any necessary changes.

If partitions to be used by pre-DOS 3.31 issues of DOS need to be created by modern tools, the only criteria theoretically necessary to meet are a sector count of less than 65536, and the usage of the old partition ID (0x04). In practice however, type 0x01 and 0x04 primary partitions should not be physically located outside the first 32 MB of the disk, due to other restrictions in MS-DOS 2.x, which could not cope with them otherwise.

In 1988, the FAT16B improvement became more generally available through DR DOS 3.31, PC DOS 4.0, OS/2 1.1, and MS-DOS 4.0. The limit on partition size was dictated by the 8-bit signed count of sectors per cluster, which originally had a maximum power-of-two value of 64. With the standard hard disk sector size of 512 bytes, this gives a maximum of 32 KB cluster size, thereby fixing the "definitive" limit for the FAT16 partition size at 2 GB for sector size 512. On magneto-optical media, which can have 1 or 2 KB sectors instead of 0.5 KB, this size limit is proportionally larger.

Much later, Windows NT increased the maximum cluster size to 64 KB, by considering the sectors-per-cluster count as unsigned. However, the resulting format was not compatible with any other FAT implementation of the time, and it generated greater internal fragmentation. Windows 98, SE and ME also supported reading and writing this variant, but its disk utilities did not work with it and some FCB services are not available for such volumes. This contributes to a confusing compatibility situation.

Prior to 1995, versions of DOS accessed the disk via CHS addressing only. When Windows 95 (MS-DOS 7.0) introduced LBA disk access, partitions could start being physically located outside the first c. 8 GB of this disk and thereby out of the reach of the traditional CHS addressing scheme. Partitions partially or fully located beyond the CHS barrier therefore had to be hidden from non-LBA-enabled operating systems by using the new partition type 0x0E in the partition table instead. FAT16 partitions using this partition type are also named FAT16X.[38] The only difference, compared to previous FAT16 partitions, is the fact that some CHS-related geometry entries in the BPB record, namely the number of sectors per track and the number of heads, may contain no or misleading values and should not be used.

The number of root directory entries available for FAT12 and FAT16 is determined when the volume is formatted, and is stored in a 16-bit field. For a given number RDE and sector size SS, the number RDS of root directory sectors is RDS = ceil((RDE × 32) / SS), and RDE is normally chosen to fill these sectors, i.e., RDE × 32 = RDS × SS. FAT12 and FAT16 media typically use 512 root directory entries on non-floppy media. Some third-party tools, like mkdosfs, allow the user to set this parameter.[39]

FAT32

[edit]
FAT32
Developer(s)Microsoft, Caldera
IntroducedAugust 1996 (Windows 95 OSR2)
Partition IDsMBR/EBR:
Limits
Min volume size
  • 32 MB – 4.5 KB (with 65525 clusters and 512 byte sectors)
  • 256 MB – 36 KB (with 65525 clusters and 4 KB sectors)
Max volume size
  • TB (with 512 byte sectors)
  • 8 TB (with 2 KB sectors and 32 KB clusters)
  • 16 TB (with 4 KB sectors and 64 KB clusters)
Max file size
  • 2,147,483,647 bytes (2 GiB − 1 byte) (without LFS)
  • 4,294,967,295 bytes (4 GiB − 1 byte)[1] (with LFS)
  • 274,877,906,943 bytes (256 GiB − 1 byte) (only with FAT32+[36])
File size granularity1 byte
Max no. of files268,173,300 for 32 KB clusters
Max filename length8.3 filename with OEM characters,
255 UCS-2 characters[nb 1] when using LFN
Max directory depth32 levels or 66 characters (with CDS),
60 levels or more (without CDS)
Features
Dates recorded
  • Modified date/time, creation date/time (DOS 7.0 and higher only),
  • access date (only available with ACCDATE enabled),[2]
  • deletion date/time (only with DELWATCH 2)
Date range1980-01-01 to 2099-12-31 (2107-12-31)
Date resolution
  • 2 seconds for last modified time,
  • 10 ms for creation time,
  • 1 day for access date,
  • 2 seconds for deletion time
AttributesRead-only, hidden, system, volume, directory, archive
File system
permissions
Partial, only with DR-DOS, REAL/32 and 4690 OS
Transparent
compression
Yes

In order to overcome the volume size limit of FAT16, while at the same time allowing DOS real-mode code to handle the format, Microsoft designed a new version of the file system, FAT32, which supported an increased number of possible clusters, but could reuse most of the existing code, so that the conventional memory footprint was increased by less than 5 KB under DOS.[40] Cluster values are represented by 32-bit numbers, of which 28 bits are used to hold the cluster number.

Maximal sizes

[edit]

The FAT32 boot sector uses a 32-bit field for the sector count, limiting the maximal FAT32 volume size to 2 terabytes with a sector size of 512 bytes. The maximum FAT32 volume size is 16 TB with a sector size of 4,096 bytes.[41][42] The built-in Windows shell disk format tool on Windows NT arbitrarily only supports volume sizes up to 32 GB,[nb 4] but Windows supports reading and writing to preexisting larger FAT32 volumes, and these can be created with the command prompt, PowerShell or third-party tools,[44] or by formatting the volume on a non-Windows system or on a Windows 9x system with FAT32 support and then transferring it to the Windows NT system. In August 2024, Microsoft released an update to Windows 11 preview builds that allows for the creation of FAT32 partitions up to 2TB in size.[45]

The maximal possible size for a file on a FAT32 volume is 4 GB minus 1 byte, or 4,294,967,295 (232 − 1) bytes. This limit is a consequence of the 4-byte file length entry in the directory table and would also affect relatively huge FAT16 partitions enabled by a sufficient sector size.

Like FAT12 and FAT16, FAT32 does not include direct built-in support for long filenames, but FAT32 volumes can optionally hold VFAT long filenames in addition to short filenames in exactly the same way as VFAT long filenames have been optionally implemented for FAT12 and FAT16 volumes.

Development

[edit]

FAT32 was introduced with Windows 95 OSR2 (MS-DOS 7.1) in 1996, although reformatting was needed to use it, and DriveSpace 3 (the version that came with Windows 95 OSR2 and Windows 98) never supported it. Windows 98 introduced a utility to convert existing hard disks from FAT16 to FAT32 without loss of data.

In the Windows NT line, native support for FAT32 arrived in Windows 2000. A free FAT32 driver for Windows NT 4.0 was available from Winternals, a company later acquired by Microsoft. The acquisition of the driver from official sources is no longer possible. Since 1998, Caldera's dynamically loadable DRFAT32 driver could be used to enable FAT32 support in DR-DOS.[46][47] The first version of DR-DOS to natively support FAT32 and LBA access was OEM DR-DOS 7.04 in 1999. That same year IMS introduced native FAT32 support with REAL/32 7.90, and IBM 4690 OS added FAT32 support with version 2.[48] Ahead Software provided another dynamically loadable FAT32.EXE driver for DR-DOS 7.03 with Nero Burning ROM in 2004. IBM introduced native FAT32 support with OEM PC DOS 7.1 in 1999.

Two partition types have been reserved for FAT32 partitions, 0x0B and 0x0C. The latter type is also named FAT32X in order to indicate usage of LBA disk access instead of CHS.[46][49][50][51][52] On such partitions, CHS-related geometry entries, namely the CHS sector addresses in the MBR as well as the number of sectors per track and the number of heads in the EBPB record, may contain no or misleading values and should not be used.[53][51][52]

Extensions

[edit]

Extended attributes

[edit]

OS/2 heavily depends on extended attributes (EAs) and stores them in a hidden file called "EA␠DATA.␠SF" in the root directory of the FAT12 or FAT16 volume. This file is indexed by two previously reserved bytes in the file's (or directory's) directory entry at offset 0x14.[54] In the FAT32 format, these bytes hold the upper 16 bits of the starting cluster number of the file or directory, hence making it impossible to store OS/2 EAs on FAT32 using this method.

However, the third-party FAT32 installable file system (IFS) driver FAT32.IFS version 0.70 and higher by Henk Kelder & Netlabs for OS/2, eComStation and ArcaOS stores extended attributes in extra files with filenames having the string "␠EA.␠SF" appended to the regular filename of the file to which they belong. The driver also utilizes the byte at offset 0x0C in directory entries to store a special mark byte indicating the presence of extended attributes to help speed up things.[55][56] (This extension is critically incompatible with the FAT32+ method to store files larger than 4 GB minus 1 on FAT32 volumes.)[36]

Extended attributes are accessible via the Workplace Shell desktop, through REXX scripts, and many system GUI and command-line utilities (such as 4OS2).[57]

To accommodate its OS/2 subsystem, Windows NT supports the handling of extended attributes in HPFS, NTFS, FAT12 and FAT16. It stores EAs on FAT12, FAT16 and HPFS using exactly the same scheme as OS/2, but does not support any other kind of ADS as held on NTFS volumes. Trying to copy a file with any ADS other than EAs from an NTFS volume to a FAT or HPFS volume gives a warning message with the names of the ADSs that will be lost. It does not support the FAT32.IFS method to store EAs on FAT32 volumes.

Windows 2000 onward acts exactly as Windows NT, except that it ignores EAs when copying to FAT32 without any warning (but shows the warning for other ADSs, like "Macintosh Finder Info" and "Macintosh Resource Fork").

Cygwin uses "EA␠DATA.␠SF" files as well.

Long file names

[edit]

One of the user experience goals for the designers of Windows 95 was the ability to use long filenames (LFNs—up to 255 UCS-2 code units long),[nb 1] in addition to classic 8.3 filenames (SFNs). For backward and forward compatibility, LFNs were implemented as an optional extension on top of the existing FAT file system structures using a workaround in the way directory entries are laid out.

This transparent method to store long file names in the existing FAT file systems without altering their data structures is usually known as VFAT (for "Virtual FAT") after the Windows 95 virtual device driver.[nb 5]

Non VFAT-enabled operating systems can still access the files under their short file name alias without restrictions; however, the associated long file names may be lost when files with long filenames are copied under non VFAT-aware operating systems.

In Windows NT, support for VFAT long filenames began with version 3.5.

Linux provides a VFAT filesystem driver to work with FAT volumes with VFAT long filenames. For some time, a UVFAT driver was available to provide combined support for UMSDOS-style permissions with VFAT long filenames.

OS/2 added long filename support to FAT using extended attributes (EA) before the introduction of VFAT. Thus, VFAT long filenames are invisible to OS/2, and EA long filenames are invisible to Windows; therefore, experienced users of both operating systems would have to manually rename the files.

Human68K supported up to 18.3 filenames and (Shift JIS) Kanji characters in a proprietary FAT file system variant.

In order to support Java applications, the FlexOS-based IBM 4690 OS version 2 introduced its own virtual file system (VFS) architecture to store long filenames in the FAT file system in a backwards-compatible fashion. If enabled, the virtual filenames (VFN) are available under separate logical drive letters, whereas the real filenames (RFN) remain available under the original drive letters.[58]

Forks and alternate data streams

[edit]

The FAT file system itself is not designed for supporting alternate data streams (ADS), but some operating systems that heavily depend on them have devised various methods for handling them on FAT volumes. Such methods either store the additional information in extra files and directories (classic Mac OS and macOS), or give new semantics to previously unused fields of the FAT on-disk data structures (OS/2 and Windows NT).

Mac OS using PC Exchange stores its various dates, file attributes and long filenames in a hidden file called "FINDER.DAT", and resource forks (a common Mac OS ADS) in a subdirectory called "RESOURCE.FRK", in every directory where they are used. From PC Exchange 2.1 onwards, they store the Mac OS long filenames as standard FAT long filenames and convert FAT filenames longer than 31 characters to unique 31-character filenames, which can then be made visible to Macintosh applications.

macOS stores resource forks and metadata (file attributes, other ADS) using AppleDouble format in a hidden file with a name constructed from the owner filename prefixed with "._", and Finder stores some folder and file metadata in a hidden file called ".DS_Store" (but note that Finder uses .DS_Store even on macOS' native filesystem, HFS+).

UMSDOS permissions and filenames

[edit]

Early Linux distributions also supported a format known as UMSDOS, a FAT variant with Unix file attributes (such as long file name and access permissions) stored in a separate file called "--linux-.---". UMSDOS fell into disuse after VFAT was released and it is not enabled by default in Linux from version 2.5.7 onwards.[59] For some time, Linux also provided combined support for UMSDOS-style permissions and VFAT long filenames through UVFAT.

FAT+

[edit]

In 2007 the open FAT+ draft proposed how to store larger files up to 256 GB minus 1 byte, or 274,877,906,943 (238 − 1) bytes, on slightly modified and otherwise backward-compatible FAT32 volumes,[36] but imposes a risk that disk tools or FAT32 implementations not aware of this extension may truncate or delete files exceeding the normal FAT32 file size limit. Support for FAT32+ and FAT16+ is limited to some versions of DR-DOS and not available in mainstream operating systems.[60] (This extension is critically incompatible with the /EAS option of the FAT32.IFS method to store OS/2 extended attributes on FAT32 volumes.)

Derivatives

[edit]

Turbo FAT

[edit]

In its NetWare File System (NWFS) Novell implemented a heavily modified variant of a FAT file system for the NetWare operating system. For larger files it utilized a performance feature named Turbo FAT.

FATX

[edit]

FATX is a family of file systems designed for Microsoft's Xbox video game console hard disk drives and memory cards,[61][62] introduced in 2001.

While resembling the same basic design ideas as FAT16 and FAT32, the FATX16 and FATX32 on-disk structures are simplified, but fundamentally incompatible with normal FAT16 and FAT32 file systems, making it impossible for normal FAT file system drivers to mount such volumes.

The non-bootable superblock sector is 4 KB in size and holds an 18 byte large BPB-like structure completely different from normal BPBs. Clusters are typically 16 KB in size and there is only one copy of the FAT on the Xbox. Directory entries are 64 bytes in size instead of the normal 32 bytes. Files can have filenames up to 42 characters long using the OEM character set and be up to 4 GB minus 1 byte in size. The on-disk timestamps hold creation, modification and access dates and times but differ from FAT: in FAT, the epoch is 1980; in FATX, the epoch is 2000. On the Xbox 360, the epoch is 1980.[63]

exFAT

[edit]

exFAT is a file system introduced with Windows Embedded CE 6.0 in November 2006 and brought to the Windows NT family with Vista Service Pack 1 and Windows XP Service Pack 3 (or separate installation of Windows XP Update KB955704). It is loosely based on the File Allocation Table architecture, but incompatible, proprietary and protected by patents.[64]

exFAT is intended for use on flash drives and memory cards such as SDXC and Memory Stick XC, where FAT32 is otherwise used. Vendors usually pre-format SDXC cards with it. Its main benefit is its exceeding of the 4 GB file size limit, as file size references are stored with eight instead of four bytes, increasing the limit to 264 − 1 bytes.

Microsoft's GUI and command-line format utilities offer it as an alternative to NTFS (and, for smaller partitions, to FAT16B and FAT32). The MBR partition type is 0x07 (the same as used for IFS, HPFS, and NTFS). Logical geometry information located in the VBR is stored in a format not resembling any kind of BPB.

In early 2010, the file system was reverse-engineered by the SANS Institute.[65] On August 28, 2019, Microsoft published the technical specification for exFAT so that it can be used in the Linux kernel and other operating systems.[66]

Patents

[edit]

Microsoft applied for, and was granted, a series of patents for key parts of the FAT file system in the mid-1990s. All four pertain to long-filename extensions to FAT first seen in Windows 95: U.S. patent 5,579,517,[67] U.S. patent 5,745,902,[68] U.S. patent 5,758,352,[69] U.S. patent 6,286,013 (all expired since 2013).[70]

On December 3, 2003, Microsoft announced[71] that it would be offering licenses for use of its FAT specification and "associated intellectual property", at the cost of a US$0.25 royalty per unit sold, with a US$250,000 maximum royalty per license agreement.[72] To this end, Microsoft cited four patents on the FAT file system as the basis of its intellectual property claims.

In the EFI FAT32 specification,[10] Microsoft specifically grants a number of rights, which many readers have interpreted as permitting operating system vendors to implement FAT.[73] Non-Microsoft patents affecting FAT include: U.S. patent 5,367,671, specific to the OS/2 extended object attributes (expired in 2011).[74]

Challenges and lawsuits

[edit]

The Public Patent Foundation (PUBPAT) submitted evidence to the US Patent and Trademark Office (USPTO) in 2004 disputing the validity of U.S. patent 5,579,517,[67] including prior art references from Xerox and IBM.[75] The USPTO opened an investigation and concluded by rejecting all claims in the patent.[76] The next year, the USPTO further announced that following the re-examination process, it affirmed the rejection of '517 and additionally found U.S. patent 5,758,352[69] invalid on the grounds that the patent had incorrect assignees.

However, in 2006, the USPTO ruled that features of Microsoft's implementation of the FAT system were "novel and non-obvious", reversing both earlier decisions and leaving the patents valid.[77]

In February 2009, Microsoft filed a patent infringement lawsuit against TomTom alleging that the device maker's products infringe on patents related to VFAT long filenames. As some TomTom products are based on Linux, this marked the first time that Microsoft tried to enforce its patents against the Linux platform.[78] The lawsuit was settled out of court the following month with an agreement that Microsoft be given access to four of TomTom's patents, that TomTom will drop support for the VFAT long filenames from its products, and that in return Microsoft not seek legal action against TomTom for the five-year duration of the settlement agreement.[79]

In October 2010, Microsoft filed a patent infringement lawsuit against Motorola alleging several patents (including two of the VFAT patents) were not licensed for use in the Android operating system.[80] They also submitted a complaint to the ITC.[81] Developers of open source software have designed methods intended to circumvent Microsoft's patents.[82][83]

In 2013, patent EP0618540 "common name space for long and short filenames" (expired since 2014[84]) was invalidated in Germany.[85] After the appeal was withdrawn, this judgment became final on 28 October 2015.[86]

See also

[edit]

Notes

[edit]

References

[edit]
[edit]
Revisions and contributorsEdit on WikipediaRead on Wikipedia
from Grokipedia
The File Allocation Table (FAT) is a developed by in the late 1970s and early 1980s to manage files and directories on disk-based storage devices, serving as the primary file system for and early versions of Windows. At its core, FAT organizes data into fixed-size units called clusters and uses a dedicated table—residing near the beginning of the volume—to track the allocation and chaining of these clusters for each file or subdirectory, enabling efficient location and access by the operating system. The structure typically includes a for volume parameters, one or two copies of the for and recovery, a entry for initial file listings, and the main data region where clusters store actual file content. exists in several variants—FAT12, FAT16, and FAT32—differentiated primarily by the bit width of entries (12, 16, or 32 bits), which determines the maximum addressable clusters and thus volume capacity: up to 16 MB for FAT12 (suited for floppies), 2 GB for FAT16, and 2 TB for FAT32 with 512-byte sectors. These versions evolved to address growing storage needs, with FAT32 introducing improvements like larger partition support and reduced cluster sizes for better space efficiency on larger drives. While simple and compatible across operating systems (including non-Microsoft ones), FAT lacks advanced features such as file-level security, compression, encryption, or journaling for crash recovery, making it prone to fragmentation and data loss risks compared to successors like . Despite these limitations, FAT's legacy endures in removable media like USB drives, SD cards, and embedded devices due to its universal readability and low overhead.

Introduction

Definition and Purpose

The File Allocation Table (FAT) is a that organizes and manages files on block-based storage devices, such as hard drives and floppy disks, by using a dedicated table to track the allocation of fixed-size units called clusters to files and directories. This table serves as an index, mapping logical file structures to physical sectors on the disk. The primary purpose of FAT is to enable efficient storage allocation and support fundamental file operations, including creating, reading, writing, and deleting files and directories, while maintaining a simple mapping between user-visible file hierarchies and underlying disk space. Originating in the late 1970s and early 1980s, FAT became the default file system for floppy disks and early hard drives, particularly under . Key advantages of FAT include its simplicity, which results in low overhead suitable for small volumes under 200 MB, and high portability across diverse operating systems and devices, such as , Windows, macOS, , and embedded systems. Unlike journaling file systems, FAT lacks built-in crash recovery mechanisms, and it does not incorporate extent-based allocation for handling fragmentation, making it a legacy option focused on basic functionality rather than advanced reliability features.

Basic Components

The File Allocation Table (FAT) file system organizes data on a storage volume through a set of interconnected core components that define its layout and enable file access. The primary structure begins with the , which occupies the first sector (typically 512 bytes) of the volume and includes the (BPB). This block contains critical metadata such as the number of bytes per sector, sectors per cluster (determining cluster size), the count of sectors at the volume's start, the number of FAT copies (usually two for redundancy), the number of entries, the total number of sectors on the volume, the media descriptor byte (indicating the volume type), sectors per FAT, sectors per track, number of heads, hidden sectors before the volume, and a unique volume ID for identification. These parameters allow the operating system to locate and interpret subsequent components, including the position and of the FATs and the starting point of the data area. Following the reserved sectors (which include the ), the volume features two identical copies of the for ; if the primary becomes corrupted, the secondary can be used to reconstruct it. Each is an array of entries corresponding to clusters in the area, with the size of each entry varying by type (though specifics are deferred to variant descriptions). The s reside immediately after the reserved area, and their location and length are specified in the 's BPB. After the s, the area begins, comprising clusters that store actual file content and subdirectories; for 12 and 16, the precedes this area as a fixed-size region, while in 32 it is treated as a dynamic cluster chain within the area. The 's parameters ensure seamless navigation: it points to the 's starting sector and size, while entries reference cluster numbers in the area to form file chains, marked at the end by special end-of-file (EOF) values such as 0xFFF for 12, 0xFFFF for 16, or 0x0FFFFFF8 for 32. Files and directories are represented by 32-byte entries within the (or subdirectories). Each entry includes the in 8.3 format (eight characters for the base name padded with spaces, followed by three for the extension, also padded), a one-byte attribute field specifying properties like read-only, hidden, system, volume label, subdirectory, or , reserved fields, timestamps for creation (including tenths of a second in some implementations), last access date, and modification time/date. Additional fields cover the starting cluster number (split into high and low words for larger addressing) and the in bytes. These entries link back to the by referencing the initial cluster, from which the traces the full chain of clusters holding the file's data in the data area, providing a complete map from metadata to physical storage.

History

Origins and Development

The (FAT) originated in 1977 when Marc McDonald, working at , designed it as part of the Stand-alone Disk for managing files on 8-inch floppy disks. The original used 8-bit FAT entries for the limited capacity of 8-inch floppy disks. , as a co-founder of , contributed to the early development efforts, aiming to provide a simple, efficient method for allocating disk space in resource-constrained environments. This initial featured a compact allocation table kept in memory to enable quick access on small-capacity media, typically a few hundred kilobytes. In 1980, incorporated a slightly modified version of into QDOS (later known as ), developed for Computer Products' 8086-based systems, to offer better disk management than contemporary systems like . licensed and refined it into 1.0, released in 1981 alongside the PC, where —specifically the 12-bit variant (FAT12)—supported the 5.25-inch floppy disks standard on the platform, with volumes limited to around 360 KB per disk. This adaptation ensured compatibility with the PC's hardware while maintaining the core simplicity of the original design. Early lacked support for subdirectories, restricting organization to a flat, single-level structure per volume. A pivotal milestone came with 2.0 in 1983, which extended FAT to hard disk drives, standardizing its use for larger storage while introducing subdirectories to address the organizational limitations of prior versions. At this stage, FAT12 constrained hard drive volumes to a maximum of 16 MB due to its 12-bit entry size, reflecting the era's hardware constraints and design priorities for reliability over capacity. Microsoft's control over the format's evolution established it as a without involvement from a formal standards body during these formative years, enabling widespread adoption in personal computing.

Evolution through Versions

The File Allocation Table (FAT) file system evolved iteratively from the early to address the growing capacities of storage devices while maintaining compatibility with existing software and hardware. 2.0 in first extended FAT12 to support hard disk drives, with a maximum volume size of 16 MB, marking the transition from floppy-based systems to more substantial storage solutions. This version used 12-bit entries to manage clusters efficiently on early hard drives, driven by the need to handle larger volumes without overhauling the underlying architecture. In 1984, FAT16 debuted with 3.0, expanding to 16-bit entries and initially supporting partitions up to 32 MB. This upgrade was motivated by the proliferation of larger hard drives in personal computers, such as those in the PC AT, requiring better scalability while preserving with FAT12 volumes. By 1987, an extended variant of FAT16 emerged, allowing larger cluster sizes up to 64 KB to accommodate drives approaching the 2 GB threshold, further mitigating internal fragmentation issues on bigger disks. A key refinement in 1988 was the logical sectored FAT, which enabled support for non-standard sector sizes beyond the traditional 512 bytes, facilitating compatibility with diverse hardware configurations in enterprise environments. The finalized FAT16 implementation standardized 512-byte sectors, solidifying its role as the dominant format for DOS and early Windows systems through the . The advent of FAT32 in 1996 with OSR2 represented a major leap, employing 28-bit entries to support partitions up to 2 TB and addressing the limitations of FAT16 on drives exceeding 4 GB. This evolution was spurred by the rapid increase in hard drive capacities during the mid-1990s, alongside requirements for reduced fragmentation through more flexible cluster allocation, all while ensuring seamless interoperability with prior FAT versions. Early systems, starting from version 3.5, incorporated VFAT extensions to FAT for support, enhancing usability without disrupting core FAT mechanics. Deprecation of FAT for primary system drives accelerated with in 2001, which defaulted to for its superior security, reliability, and performance on large volumes. Despite this shift, FAT persisted in removable media like USB drives and SD cards due to its universal compatibility across operating systems and devices. In the 2020s, FAT continues to see adoption in embedded systems and IoT devices, where its simplicity and low overhead suit resource-constrained environments, such as microcontrollers interfacing with SD cards for data logging.

Technical Details

Directory Structure

In the File Allocation Table (FAT) file system, directories serve as containers for file and subdirectory metadata, organized as a linear sequence of fixed-size entries stored within clusters. The holds top-level entries, while subdirectories function as special files containing their own entries, including the conventional '.' (current directory) and '..' (parent directory) entries to enable hierarchical navigation. This structure treats directories as data streams in the , allowing subdirectories to be allocated clusters just like files. The in FAT12 and FAT16 volumes has a fixed maximum size of 512 entries, occupying 32 sectors (assuming a standard 512-byte sector size), which limits the number of top-level files and folders. In contrast, FAT32 treats the as a regular cluster chain, making it expandable and relocatable, with its starting cluster specified in the boot sector's BPB_RootClus field; this allows for a much larger limited only by available space. Subdirectories, regardless of FAT variant, are implemented as files with the directory attribute set, consisting of a sequence of 32-byte entries that list contained items until terminated by end-of-directory markers (typically unused entries filled with zeros). Each directory entry is precisely 32 bytes long, providing a compact representation of file or directory metadata. The format includes fields for the short filename (8 bytes for the base name followed by 3 bytes for the extension, stored in uppercase ASCII and padded with spaces), a 1-byte attributes bitmask (bits for read-only, hidden, system, volume label, directory, and archive flags), time and date stamps for creation, last access, and modification (each 2 bytes in packed format), the starting cluster number (2 bytes for low word in FAT12/16, extended to 4 bytes with high word in FAT32), and a 4-byte (limited to 4 GB maximum, zero for directories). Reserved bytes occupy positions such as byte 11 (for case information in some implementations) and bytes 13-21 (for extended attributes if present). The volume label, if used, occupies a dedicated entry in the with the volume ID attribute bit set and no cluster or size allocated. Parsing directory entries follows strict rules to ensure compatibility across systems. Filenames and extensions are left-justified and padded to full length with 0x20 () characters, with invalid characters (such as * ? ) disallowed; the system ignores trailing spaces when comparing names. Deleted entries are marked by replacing the first filename byte with 0xE5, preserving the rest of the for potential recovery but excluding them from active listings. Empty slots use 0x00 as the first byte, while the end of a valid directory is indicated by a sequence of such entries. Volume labels must be placed within the root directory and are identified solely by their attribute flag, without a fixed position. The imposes notable limitations, including the absence of support for hard links or symbolic links, which prevents multiple directory references to the same data and enforces a tree-like without cycles. The 8.3 short convention creates a flat within each directory, restricting names to 8 uppercase characters plus a 3-character extension, often leading to or mangling for longer names and potential collisions in large directories. These constraints prioritize simplicity and cross-platform compatibility over advanced features found in modern file systems.
OffsetSize (bytes)Field NameDescription
08DIR_NameShort (padded with spaces)
83DIR_ExtShort extension (padded with spaces)
111DIR_Attr bitmask
121DIR_NTResReserved for NT (case info)
131DIR_CrtTimeTenthCreation time tenths of second
142DIR_CrtTimeCreation time
162DIR_CrtDateCreation date
182DIR_LstAccDateLast access date
202DIR_FstClusHIHigh word of first cluster (FAT32 only)
222DIR_WrtTimeLast write time
242DIR_WrtDateLast write date
262DIR_FstClusLOLow word of first cluster
284DIR_FileSize in bytes

FAT Table Mechanics

The File Allocation Table (FAT) consists of an of entries, with one entry corresponding to each cluster in the data region of the volume, and is positioned immediately following the . To enhance against corruption or media failures, the maintains two identical copies of the FAT: the primary copy (FAT1) and a copy (FAT2), which can be used for recovery if the primary becomes damaged. Each FAT entry encodes the allocation status and linkage for its associated cluster. A value of 0x000 indicates that the cluster is free and available for new allocations. The end-of-chain marker, represented as 0xFFFF in FAT16 or 0x0FFFFFFF in FAT32, denotes the final cluster in a file or directory's allocation chain, preventing further traversal. Reserved values, such as the range 0xFFF7 through 0xFFFF in FAT16 (with 0xFFF7 for bad clusters and 0xFFF8–0xFFFF for end-of-chain), are set aside for special purposes, including marking bad or defective clusters that should be avoided during normal operations. Files and directories are organized as linked lists of clusters within the FAT, where the entry for a given cluster N holds the identifier of the subsequent cluster M in the sequence, forming a that spans the file's data across potentially non-adjacent locations. This chaining mechanism allows efficient traversal starting from the initial cluster number stored in the file's directory entry. For performance optimization, the system prefers contiguous allocation, where successive clusters in a occupy sequential positions on the disk, minimizing mechanical seek times during read and write operations. During cluster allocation or deallocation—such as when creating, extending, truncating, or deleting a file—the operating system must update the relevant entries in both FAT copies to reflect the changes and preserve redundancy. These updates occur synchronously to the primary and tables, but the absence of atomic transactions or journaling means that an interruption, such as sudden power loss mid-write, can result in partial updates, leading to inconsistencies like orphaned chains or mismatched copies that require manual repair using tools like Scandisk. Over time, repeated allocations and deallocations cause fragmentation, where file chains become scattered across the disk, transforming efficient linear access into a series of disjoint jumps that increase latency due to head movement on mechanical drives. utilities mitigate this by parsing the to map out all chains, then relocating clusters to consolidate them into contiguous blocks while preserving the original linkage structure, thereby restoring patterns and improving overall system responsiveness.

Cluster Allocation

In the File Allocation Table (FAT) file system, disk space is organized into clusters, which serve as the fundamental unit of allocation for files and directories. A cluster comprises one or more consecutive sectors, with the number of sectors per cluster defined in the boot sector to optimize storage efficiency and access performance on varying media sizes. This design allows the system to manage larger storage devices more effectively by reducing the granularity of allocation compared to individual sectors, though it introduces potential waste in partially filled units. The cluster size is determined during formatting and recorded in the boot sector's "sectors per cluster" field as a value (e.g., 1, 2, 4, 8, 16, 32, or 64 sectors), tailored to the volume's total capacity for balancing overhead and throughput. For small media like 1.44 MB floppy disks, a single 512-byte sector per cluster suffices, minimizing waste on limited space, whereas volumes exceeding 1 GB on hard disk drives typically employ larger clusters such as 32 KB (64 sectors of 512 bytes) to limit the FAT table's size and improve sequential read speeds. These sizing rules ensure compatibility across FAT variants while adapting to hardware constraints. Cluster allocation follows a simple linked-list mechanism managed through the FAT, where free space is identified by entries valued at 0x0000 (or equivalent in the variant's bit width). The algorithm uses a first-fit strategy: for a new file, the system scans the FAT sequentially starting from cluster 2 (after reserved clusters) to locate the first free entry, assigns it as the file's starting cluster in the directory entry, and marks it as allocated by updating the FAT to point to the next cluster or an end-of-chain (EOC) code (e.g., 0xFFF8–0xFFFF for FAT16). To extend a file, it traverses the existing chain to the EOC marker and appends the next available free cluster by linking the previous EOC to the new one, enabling non-contiguous storage without requiring physical rearrangement. This approach, while straightforward, begins allocation after the root directory area in early FAT versions to avoid overlap. Allocation incurs overhead from internal fragmentation, as files are rounded up to the nearest full cluster, leaving unused space in the final cluster—for instance, a 10 KB file on 4 KB clusters consumes 12 KB, wasting 2 KB. External fragmentation arises from scattered cluster chains over time due to repeated allocations and deletions, potentially degrading performance through increased seek times on mechanical drives, though modern solid-state storage mitigates this. The maximum file size is constrained by the addressable cluster count in the FAT (e.g., up to 65,535 clusters in 16-bit variants), limiting practical sizes based on cluster granularity. For integrity and recovery, utilities like examine the FAT and directories to detect inconsistencies, such as lost clusters—allocated entries (non-zero values) unlinked from any file or directory due to crashes or errors. These are flagged for recovery, often consolidated into checkpoint files (e.g., FILE0000.CHK) containing for manual extraction, preventing permanent loss while scanning for cross-links or invalid chains.

Variants

Early Variants (FAT8, FAT12, FAT16)

The original 8-bit variant of the File Allocation Table (FAT), developed by in 1978 for use with Standalone Disk , featured 8-bit entries that limited volumes to a maximum of 256 clusters and was primarily designed for single-sided floppy disks. This early implementation supported basic file chaining but was constrained by its small , making it suitable only for very low-capacity media typically under 128 KB per disk. FAT12, introduced in 1981 with MS-DOS 1.0 for floppies and early hard drives, expanded entries to 12 bits, packed two per 16-bit word for space efficiency, enabling up to 4085 clusters and volumes up to 16 MB with standard 512-byte sectors. The bit-packing scheme in FAT12 required special handling for alignment, as entries could span byte boundaries, complicating reads and writes compared to aligned formats; for instance, even-numbered entries occupied the low 12 bits of a word, while odd-numbered ones used the high 4 bits of one word and low 8 bits of the next. This variant became standard for 1.44 MB high-density floppies, balancing efficiency on small media while maintaining simplicity. FAT16 emerged in 1984 with 3.0 to accommodate the 20 MB hard drives in the PC AT, using 16-bit entries for up to 65,536 clusters and supporting volumes up to 2 GB initially, with cluster sizes ranging from 512 bytes to 64 KB to optimize for varying media capacities. The initial FAT16 (often termed FAT16A) relied on 16-bit fields for sector counts in the boot parameter block (BPB), limiting practical volumes to around 32 MB without larger clusters, and suffered minor alignment issues in some implementations due to legacy compatibility with FAT12 code paths. In 1987, an extended version (FAT16B) was introduced in 3.31, updating the BPB to use 32-bit sector counts for volumes up to 4 GB while retaining 16-bit FAT entries, though this required larger cluster sizes (e.g., 32 KB or more for multi-GB drives), which reduced storage efficiency for small files by increasing internal fragmentation. All early variants maintained backward compatibility, with later systems able to read and write FAT8, FAT12, and initial FAT16 volumes, though extended FAT16B drives were not fully accessible by pre-1987 DOS versions due to BPB differences. The progression from FAT8 to FAT16 addressed growing storage needs but highlighted trade-offs in cluster granularity and table overhead, paving the way for further evolutions in file system design.

FAT32

FAT32 was introduced by in 1996 as an enhancement to the File Allocation Table () file system, debuting with OSR2 to accommodate the increasing capacities of hard drives exceeding the 2 GB limit of prior 16-bit variants. It employs 32-bit entries in the FAT, with 28 bits usable for cluster addressing (the upper 4 bits ), supporting a maximum of 268,435,445 clusters. This structure provides a practical volume limit of 2 TB with 512-byte sectors. The theoretical maximum volume size is 16 TB, achievable with 4 KB sectors and 64 KB clusters. Significant structural modifications in FAT32 include relocating the root directory from a fixed reserved area to a dynamic cluster chain within the data region, allowing it to grow like subdirectories and eliminating size constraints. The boot sector incorporates an active FAT flag (bit 7 of byte 40) to designate the valid FAT copy after mirroring operations, with FAT mirroring made optional to reduce overhead on large volumes by copying only critical initial entries. Furthermore, an FSINFO sector, typically at logical sector 1, stores metadata such as the number of free clusters and the next available cluster number, enabling faster volume status queries without full scans. Cluster sizes in FAT32 generally range from 4 KB to 64 KB, depending on volume size, which supports theoretical capacities over 16 TB but is constrained by operating system implementations—for instance, versions of Windows prior to 24H2 restricted FAT32 partition creation to 32 GB; as of 2024, supports creation up to 2 TB. The layout is extended for resilience, including a copy at logical sector 6 to facilitate recovery if the primary becomes corrupted. Despite these advances, FAT32 exhibits drawbacks such as increased fragmentation risk from larger clusters and frequent file operations, which can degrade access performance over time without built-in support. It also lacks inherent security mechanisms, including file-level permissions, lists, or , making it unsuitable for environments requiring data protection. In the , FAT32 gained prominence in digital cameras and portable media devices due to its universal compatibility across operating systems and hardware.

Sector Size Variations

The File Allocation Table (FAT) file system primarily relies on a logical sector size of 512 bytes as its foundational unit for most implementations, enabling efficient data organization on hard disks and standard floppy media. However, variations emerged to support diverse hardware, including early floppy disks formatted with 256-byte sectors on systems like certain models and 1024-byte sectors on optical media such as CD-ROMs, allowing FAT to adapt to physical constraints without overhauling core structures. Logical sectored FAT, introduced in 1988 with 4.0, addresses limitations in addressing larger volumes by treating multiple physical sectors—typically 512 bytes each—as a single larger logical sector. For instance, a 1 KB physical sector setup can be mapped to two 512-byte logical sectors, with the boot sector's bytes-per-sector field (offsets 0x0B-0x0C) specifying the logical size as a power of 2 (512, 1024, 2048, or 4096 bytes) while the handles physical 512-byte accesses via . This approach extended partition limits beyond 32 MB by effectively increasing addressable units without requiring new hardware interfaces, and it was adopted in subsequent versions of , 1.2, and 3.1. Extended sectored FAT builds on this for media with even larger physical sectors, such as featuring 2048-byte or 2352-byte physical blocks, by incorporating boot sector fields for both physical and logical bytes per sector in an . This refinement, used in CD-ROM XA and early bootable optical formats, maps logical sectors (often 512 or 1024 bytes) onto the physical layout, ensuring compatibility on read-only media while accommodating error correction overhead. These adaptations influence cluster alignment, as sectors form the building blocks of clusters, and alter FAT entry calculations by scaling the effective unit of allocation—for example, 1024-byte sectors can double the minimum cluster size relative to 512-byte norms without expanding FAT entry widths, potentially improving throughput on larger media but increasing internal fragmentation for small files. Today, such variations are uncommon in mainstream due to on 512-byte (or advanced 4K) sectors, yet they remain relevant in embedded systems and legacy environments; the Atari ST, released in 1985, notably employed FAT variants with 512-byte and 1024-byte sectors on floppies and hard disks, demonstrating early sector size flexibility predating widespread support.

Extensions

Long File Names (VFAT)

The Virtual File Allocation Table (VFAT) extension, introduced by with in 1995, provides support for long file names (LFN) on FAT file systems, addressing the limitations of the traditional format by allowing names up to 255 characters in length using UTF-16 encoding. VFAT functions as a software layer atop the existing FAT structure, enabling backward compatibility while enhancing usability for modern applications. Long file names are stored across multiple special directory entries that precede the conventional 8.3 short name entry for the file. Each LFN entry is identified by an attribute byte value of 0x0F (combining read-only, hidden, , and volume label flags), which legacy systems typically ignore as invalid. These entries hold 13 characters per entry: the first 10 bytes store 5 UTF-16LE characters, bytes 14–25 store 6 more, and bytes 28–31 store 2 additional characters, with the remaining fields dedicated to a sequence number (indicating position and total count, with bit 6 set in the final entry) and other metadata. For integrity, each LFN entry includes an 8-bit computed from the associated short filename's 11 uppercase characters (padded with spaces if needed) using the : initialize sum to 0, then for each character, add it to sum and take modulo 256 to discard carry, ensuring the LFN links correctly to its short name counterpart. A representative example is the filename "LongFileName.txt", which maps to a generated short name like "LONGFI~1.TXT" to maintain compatibility, where the and number resolve potential conflicts with other short names. This short name follows standard 8.3 rules, truncating and uppercasing as necessary while preserving the original long name's case for display and sorting purposes in VFAT-aware systems. VFAT ensures seamless compatibility with pre-Windows 95 operating systems, such as , by treating LFN entries as non-standard and inaccessible, allowing files to be read via the short name alone without . However, this approach consumes significant directory space, as a maximum-length requires up to 20 LFN entries plus one short name entry, potentially reducing effective directory capacity. Pure FAT lacks native support, but VFAT introduces it exclusively through these LFN entries, limiting full handling to VFAT-enabled environments. Adoption of VFAT extended to later Microsoft operating systems, becoming standard in (1996) and (2000), where it provided LFN support on volumes alongside . Linux kernels integrated VFAT driver support early on, with initial implementation appearing in version 1.3 around , enabling cross-platform access to long filenames on media.

Alternate Data Streams and Forks

Alternate Data Streams (ADS) originated as a feature of the NTFS file system, enabling files to have multiple named data streams attached to a single filename for storing additional metadata or content without altering the primary data stream. Although the Win32 API provides a unified interface for accessing ADS across Windows file systems, FAT does not natively support this functionality, and operations to create or open streams on FAT volumes typically fail with an error indicating lack of support. In NTFS implementations, streams are accessed using colon syntax (e.g., file.txt:secret), where the additional data occupies separate clusters linked via the file's master file table entry, but the stream's size is not recorded in the primary directory entry to maintain compatibility with legacy systems. File forks, a concept from Apple's Hierarchical File System (HFS) that separates a file's data fork (primary content) from its (metadata like icons or thumbnails), find no native support in FAT, as the file system design limits files to single data streams. Cross-platform tools and operating systems like macOS emulate forks on FAT volumes by creating companion "sidecar" files prefixed with ._ (e.g., ._file.txt), which store data in the AppleDouble format for portability to non-HFS media such as SD cards. This emulation preserves metadata during transfers but requires specific tools to reassemble or interpret the forks correctly. Common uses of such mechanisms include embedding metadata like image thumbnails in digital camera files stored on FAT-formatted media, where separate files or attributes hold the auxiliary data, and attaching security descriptors or zone information in Windows environments. However, these approaches carry risks, such as concealing malware in hidden streams or sidecar files, which can evade basic antivirus scans on non-native systems. Limitations of ADS and forks on FAT are significant: data in streams or emulated forks is not portable across operating systems, often resulting in loss when copying to unsupported volumes like FAT from NTFS. Standard directory listings do not reveal streams or sidecar files without specialized tools, complicating discovery and management. In recent years, Android file managers like have added visibility for hidden ._ files on FAT SD cards, aiding cross-platform access to emulated Mac metadata without full fork reconstruction.

Unix-like Permissions (UMSDOS)

UMSDOS (User ) is a filesystem driver developed in 1993 for version 0.99, designed to overlay features onto existing FAT partitions for improved compatibility without requiring repartitioning. It enables the storage of permissions, user IDs (UIDs), group IDs (GIDs), and access control lists (ACLs) by using a hidden file named --linux-.--- in each directory to hold the metadata. The core mechanics of UMSDOS rely on the presence of these hidden metadata files in directories to interpret the overlaid attributes. Default permissions are set via mount options such as umask=. Standard FAT attributes, such as read-only or hidden flags from the directory structure, are preserved but augmented with these Unix-specific details to enforce access controls. UMSDOS handles special file types such as symbolic links and named pipes by storing type indicators and targets in the metadata file --linux-.---, using regular FAT files for the content. Early UMSDOS was limited to 8.3 filenames; later variants like UVFAT combined with the vfat driver for long filename support. However, UMSDOS's design introduces inefficiencies, as every file access requires parsing the metadata file, leading to performance overhead compared to native filesystems. Non-Linux operating systems, such as or Windows, ignore or misinterpret the metadata files, potentially corrupting Unix attributes upon write operations. Due to these issues and the maturation of native Linux filesystems, UMSDOS was deprecated around 2001 in favor of combining VFAT with or other dedicated partitions; it was fully removed from the in version 2.6.11 in 2005 for lack of maintenance. In its historical context, UMSDOS was instrumental in early , permitting installations directly onto partitions and enabling seamless dual-booting or demonstrations on limited hardware before robust native drivers and partitioning tools became widely available.

Other Extensions (FAT+, Extended Attributes)

The Transaction-Safe FAT file system (TFAT) is an extension to the File Allocation Table () file system, developed by and detailed in a . It enables support for larger volumes, up to approximately 512 GB, and incorporates transaction logging capabilities through modifications to the and extended FAT entries that track changes for recovery purposes. These enhancements allow for more robust operation on larger storage media while maintaining with standard FAT tools where possible, though full support requires specific drivers. Extended attributes on FAT volumes were inspired by the High Performance File System (HPFS) in , where they enable storage of additional metadata such as lists (ACLs), timestamps, and application-specific data beyond basic file properties. On , implementation involves a dedicated hidden file named "EA DATA. SF" in the , which serves as a centralized repository for all extended attributes across the volume; each attribute's data is appended sequentially with headers indicating file associations and sizes. This approach contrasts with HPFS's direct integration, as the single-file structure on requires reading the entire EA file to access any individual attribute, leading to performance inefficiencies for large volumes or numerous attributes. Adoption remained limited primarily to environments due to these overheads and lack of native support in other operating systems, with ACLs providing basic security but not matching capabilities. Other notable modifications include TexFAT, a Microsoft extension introduced in the mid- for embedded systems like Windows CE, which adds transaction-safe features via duplicate FAT tables and allocation bitmaps to log operations and ensure atomicity during power failures or crashes, without native compression support. Similarly, FAT16+ emerged in the as an open-source-compatible variant in certain DOS derivatives, extending FAT16 volumes beyond 4 GB limits using larger cluster sizes up to 256 KB and reserved area flags for compatibility with legacy 16-bit applications. TexFAT and FAT16+ implementations often rely on flags to signal extended functionality and reserved sectors for metadata, but they introduce compatibility challenges, as standard FAT utilities like may misinterpret or corrupt the additional structures. These extensions saw declining use by the 2010s, largely superseded by native file systems such as on and on Windows, which offer built-in support for large volumes, transactions, and attributes without emulation overheads. However, FAT-based extensions persist in niche modern applications, including for routers and embedded devices in the 2020s, where simplicity and cross-platform readability remain advantageous for USB storage and boot media.

Derivatives

exFAT

exFAT, or Extended File Allocation Table, is a proprietary file system developed by Microsoft in 2006 and first released as part of Windows Embedded CE 6.0 in November of that year. Designed primarily for flash memory devices such as SD cards and USB drives, it addresses key limitations of earlier FAT variants, particularly FAT32's 4 GB maximum file size restriction, by supporting individual files up to 16 exabytes (EB) and volumes up to 128 petabytes (PB). Support for exFAT was extended to desktop Windows operating systems starting with Windows Vista Service Pack 1 in 2008 and via a dedicated update (KB955704) for Windows XP Service Pack 2 and 3 in early 2009. The structure of diverges from traditional systems to enhance performance on solid-state drives (SSDs). Instead of maintaining a full file allocation table () for every cluster, employs a compact allocation in the cluster heap to track free and allocated space, which reduces metadata updates and on flash media. Directory entries are organized into primary, secondary, stream, and name types, allowing for flexible and multiple data streams per file, similar to but simplified for portability. Filenames are stored natively in encoding, eliminating compatibility issues with characters, and all directory entries and the allocation include 32-bit CRC checksums to verify integrity against corruption. There is no support for legacy 8.3 short filenames, streamlining the namespace to long names only. Key features of prioritize efficiency for . It supports optional transaction-safe operations through commit records, enabling atomic updates to prevent partial writes during failures, though this is not a full journaling mechanism. Optimization for SSDs is achieved by minimizing random writes—such as updating the only on allocation changes rather than chaining through a FAT—and allowing large cluster sizes ranging from 4 KB to 32 MB, which suits high-capacity flash storage by reducing fragmentation overhead. These design choices make faster for on flash devices compared to FAT32, with lower overhead for large files. Adoption of has been widespread in consumer storage. The standardized as the default for SDXC cards (capacities over 32 GB up to 2 TB) and SDUC cards (over 2 TB up to 128 TB), ensuring compatibility for high-resolution video and large transfers. It is also the common format for USB flash drives exceeding FAT32 limits. published the exFAT specification in August 2019 to facilitate broader implementation, and its patents, which previously required licensing, are set to expire in the late , potentially enabling royalty-free use in open-source projects. Native read/write support arrived in 5.4 (released in November 2019), building on earlier FUSE-based drivers available since around 2013. On macOS, exFAT has been supported since version 10.6.5 (Snow Leopard) in 2010, allowing seamless cross-platform without third-party tools. Despite its advantages, has notable limitations, particularly for traditional hard disk drives (HDDs). It lacks built-in journaling, making it vulnerable to from unexpected power loss or crashes during writes, as there is no mechanism to replay incomplete transactions. Additionally, the support for large cluster sizes—often 128 KB or more by default—can lead to significant internal fragmentation and wasted space when storing many small files, rendering it less efficient for HDDs compared to journaled file systems like .

FATX (Xbox)

FATX is a proprietary variant of the File Allocation Table (FAT) file system developed by Microsoft specifically for the original Xbox console, released in 2001, and later adapted for the Xbox 360. It combines elements of FAT16 and FAT32 in a simplified hybrid structure tailored for gaming environments, omitting features like long filenames and built-in fragmentation utilities to prioritize performance on the console's 8-10 GB hard disk drives (HDDs). This design focused on rapid game loading and storage of game saves, cache data, and system files, while ensuring compatibility with the console's hardware constraints. The core structure of FATX employs 512-byte sectors, with cluster sizes ranging from 1 KB to 64 KB (multiples of 512 bytes) to accommodate varying partition sizes and optimize space usage on HDDs. Unlike standard FAT, it includes two copies of the File Allocation Table () for redundancy, located immediately after the , to enhance in a gaming context where drive failures could disrupt play sessions. There is no fixed limit on the size, allowing unlimited subdirectories, though the overall partition layout is rigidly predefined without a traditional partition table, using fixed offsets for simplicity and boot speed. Directory entries are 64 bytes each, supporting short 8.3 filenames in uppercase only, and the lacks native support for permissions or access controls. Key features include a fixed partition scheme on the original Xbox's HDD: Partition 0 serves as the system partition using FATX16 for boot and kernel files, while Partition 2 functions as a cache partition formatted in FATX32 for temporary game data and media buffering. Security is implemented through cryptographic hash chains embedded in the boot process and file metadata to verify integrity and prevent unauthorized modifications, without relying on user-level permissions. These elements make FATX suitable for a closed ecosystem, emphasizing reliability over flexibility. FATX evolved with the in 2005, adopting a primarily FATX32-based implementation capable of supporting partitions up to 16 TB through kernel patches and larger cluster sizes (up to 1 MB), addressing the growing storage needs for high-definition games and . Later models introduced support for on external USB drives for media playback, extending compatibility while retaining FATX for internal storage. The legacy of FATX persisted in features but was supplanted in the Series X (2020) by a custom optimized for SSDs, though tools continue to reference FATX for older console . As a system, FATX remains largely read-only on standard PCs without specialized tools like FATXplorer, which enable mounting and manipulation but highlight its incompatibility with mainstream operating systems. It is optimized for sequential game asset loading rather than general-purpose file management, resulting in limitations such as a 4 GB maximum and vulnerability to fragmentation without tools, making it unsuitable for modern cross-platform use.

Turbo FAT

Turbo FAT is a performance-oriented extension to the File Allocation Table (FAT) file system, developed by in the early as part of its File System (NWFS) for the operating system. Introduced in versions like NetWare 3.12 around , it aimed to optimize file access in network server environments by addressing the limitations of traditional FAT structures on hard disk drives, particularly for large files that required multiple disk seeks to traverse cluster chains. The structure of Turbo FAT builds directly on FAT16 and FAT32 foundations but incorporates an in-memory indexing mechanism. For files exceeding 64 blocks (typically corresponding to files larger than about 2 MB, depending on block size), automatically generates a Turbo FAT index—a consolidated, RAM-resident map of all relevant FAT entries for that file. This index is stored within the server's cache memory alongside other components like hash tables and directory caches, eliminating the need to repeatedly read scattered FAT sectors from disk. It also supports basic contiguous allocation hints by prioritizing sequential block assignments when possible, though this is managed through 's block suballocation features rather than explicit flags in the . Key features of Turbo FAT focus on reducing latency in read-heavy network workloads, such as those in multi-user environments. By preloading and caching file chain information, it enables faster file opens and metadata retrieval, with the in-memory index allowing direct jumps to data blocks without traversing the on-disk FAT. This read-ahead capability can significantly boost throughput on HDDs by minimizing seek times, making it particularly effective for applications involving large sequential files. In practice, it was employed in servers for industrial control systems and networked applications requiring reliable, high-performance . However, its RAM-intensive nature demands substantial server memory allocation—often 1-2 MB per large file index—which could strain resources on systems with limited RAM. Despite these advantages, Turbo FAT has notable limitations as a non-standard, enhancement. The volatile in-memory cache risks data loss or inconsistencies during power failures or crashes if not properly flushed, although mitigates this through periodic writes and journaling in later versions. Its tight integration with restricts compatibility with standard DOS or Windows FAT implementations, preventing easy migration or cross-platform use. Open-source recreations or ports remain scarce, with no widely adopted implementations documented in public repositories as of the . With the proliferation of solid-state drives (SSDs) in the , which eliminate mechanical seek penalties, and the overall decline of in favor of Linux-based successors like , Turbo FAT has become largely obsolete, persisting only in legacy for specialized embedded or real-time systems.

Uses

Historical Applications

The File Allocation Table (FAT) file system became the dominant storage format for personal computers during the and , particularly within the operating system released in 1981. It served as the primary for floppy disk boot media, enabling the loading of the operating system and applications from 5.25-inch and 3.5-inch disks with capacities up to 1.44 MB. On hard drives, FAT supported volumes up to 2 GB in later implementations like FAT16, making it suitable for the typical PC storage needs of the era, where drives rarely exceeded a few hundred megabytes. FAT's simplicity facilitated cross-platform compatibility in limited ways during the . On Apple systems, while native Apple DOS 3.3 (introduced in 1980) used a distinct volume table of contents structure, utilities allowed partial read access to FAT-formatted floppies for file exchange between Apple II and PC users. Similarly, early computers (launched in 1985) incorporated CrossDOS support starting in the late , enabling the to mount and access FAT volumes on floppies and hard drives for interoperability with PC software. In embedded devices such as printers and scanners from the onward, FAT was employed for internal storage and due to its lightweight design and broad readability across hardware. During the 1980s PC revolution, FAT underpinned the PC and compatible systems, powering the boot process and file management for the burgeoning market of personal computing. It was integral to the PC XT's 10 MB hard drive introduced in , using FAT12 for efficient cluster allocation on small volumes. In the , FAT continued its role in installations, where boot floppies formatted with FAT provided the initial setup media for upgrading or clean installs on systems with hard drives up to several gigabytes. FAT floppies also played a key part in , serving as the medium for and dissemination through user groups, systems, and mail-order services, allowing easy copying and portability across machines. As computing demands grew, FAT began transitioning out of primary use in server and advanced workstation environments. The High Performance File System (HPFS) replaced in 1.2, released in 1988, offering better support for larger volumes up to 2 GB and reduced fragmentation for multitasking workloads. Similarly, the NT File System () supplanted in , launched in 1993, providing enhanced security, journaling, and scalability for drives exceeding 4 GB, though remained supported for compatibility. In early Unix ports, such as 1.0 from 1987, support was incomplete and primarily limited to read-only access via external tools for floppy interchange, as the system favored its native file structure for core operations. FAT's legacy persisted into the 2000s through its role in boot sectors under the (MBR) scheme, where the active partition's volume boot record—often FAT-formatted—facilitated legacy booting on x86 systems before the shift to . This ensured for older hardware and hybrid installations, even as adopted more robust alternatives.

Modern Applications

Despite its age, the File Allocation Table (FAT) file system, including its FAT32 and variants, continues to play a vital role in storage. Post-2000s, FAT32 and have become standard for USB flash drives and SD cards, supporting partition sizes up to 2TB for FAT32 and larger for , ensuring broad compatibility across operating systems like Windows, macOS, and . This cross-platform is essential for users transferring files between diverse devices without formatting issues. In embedded systems, FAT's simplicity and low resource requirements make it appealing for resource-constrained environments in the 2020s. (IoT) devices, digital cameras, and routers frequently employ FAT for managing storage on s or internal flash, such as storing configuration files, images, or updates. For instance, the microcontroller platform integrates FAT support via the FatFs library for handling external storage of files and logs. Digital cameras rely on FAT32 or for formatting to enable seamless photo and video transfers to computers. FAT also persists in bootloader environments from the onward. The Unified Extensible Firmware Interface () specification mandates a FAT32-formatted (ESP) for booting modern systems, storing bootloaders and essential files. In Android devices, recovery modes often access external storage formatted with FAT for updates or backups via SD cards. FAT maintains niche persistence in contemporary software and hardware as of 2025. retains full read/write support for FAT volumes, including recent enhancements allowing native formatting of FAT32 partitions beyond the previous 32GB limit. Automotive systems commonly use FAT or for USB and integration to play media and update maps. Some 2020s cryptocurrency wallets, such as hardware devices using s for offline storage, leverage FAT for file portability in node operations. Looking ahead, FAT's usage is declining for primary storage in favor of more robust systems like or , yet it remains irreplaceable in licensed media standards for removable and embedded applications due to entrenched compatibility requirements.

Patent History

The core File Allocation Table (FAT) file system, originally developed in 1978 by engineers Marc McDonald and for the Stand-alone Disk , is considered and thus unpatentable, entering the without any original patents due to its age and widespread prior implementation. did not seek patents on the fundamental FAT12 and FAT16 structures during their initial creation, as these predated modern practices and were based on earlier management techniques from the late 1970s. In the mid-1990s, Microsoft filed and obtained several patents covering extensions to the FAT system, particularly the Virtual FAT (VFAT) mechanism for supporting long filenames (LFNs) while maintaining backward compatibility with 8.3 short filenames. Key among these was U.S. Patent 5,579,517, issued in November 1996, which described a method for managing a common namespace for both long and short filenames in FAT directories. Additional related patents included U.S. Patent 5,758,352 (issued May 1998) for similar namespace handling and U.S. Patent 6,286,013 (issued September 2001) for providing a common name space for long and short file names. These patents focused on VFAT's use of additional hidden directory entries to store Unicode-based long names, introduced in Windows 95. During the late 1990s and early 2000s, asserted these patents against non-Windows implementations, requiring licensing for FAT16 and FAT32 structures incorporating LFN support, which raised concerns for embedded systems and open-source projects. In December 2003, announced a licensing program encompassing four FAT-related patents, including the aforementioned, targeting developers outside its ecosystem and prompting threats of enforcement against distributions using VFAT. This led to widespread debate, with the U.S. Patent and Trademark Office initially rejecting some claims in 2004 due to but upholding them in 2006 after appeals. By the 2000s, the core FAT structures were firmly established as , with no enforceable s due to their pre-1980 origins and lack of novelty claims. The VFAT LFN s began expiring around (20 years from filing dates in the mid-1990s), confirming free use for implementations by the , as validated by court rulings such as the 2013 invalidation of a related European (EP 0 618 540) on grounds. Separately, Microsoft's derivative, introduced in 2006 for larger storage devices, is covered by patents filed from 2004 onward, with expirations extending to approximately 2025–2028 depending on the specific claims, which previously restricted full open-source driver development until Microsoft's 2019 pledge to the Open Invention Network allowing royalty-free use in and related projects. These patent concerns delayed native exFAT support in free operating systems, though FAT's inherent simplicity facilitated of its core for broad compatibility.

Challenges and Lawsuits

In 2003, The entered into a licensing agreement with for Unix patents and , amid SCO's broader allegations that incorporated proprietary Unix code. This deal, valued at millions, was seen as validation of SCO's claims but did not result in direct litigation over specifics and had no relation to FAT's legal status. A prominent legal dispute arose in 2009 when sued for related to the company's navigation devices, which used -based software implementing VFAT support on the . The suit targeted eight patents, including those covering file allocation methods essential for in car navigation systems, highlighting tensions over FAT's use in embedded devices. The case settled later that year with agreeing to pay for a license covering the disputed technologies, avoiding a and underscoring 's strategy to enforce FAT-related through cross-licensing rather than prolonged court battles. Open-source developers faced ongoing challenges from Microsoft's FAT patents, particularly those on VFAT extensions for s, leading to efforts to circumvent potential infringement. In the , the project reverse-engineered Microsoft's SMB protocol for network , which interacted with VFAT-enabled FAT volumes, ensuring compatibility without direct code copying to avoid issues. By the late 2000s, maintainers, including Samba co-founder Andrew Tridgell, developed patches to disable VFAT long filename conversion features, allowing implementations to operate within safe harbor by relying on older conventions. These measures preserved open-source access to core FAT functionality while navigating restrictions. Public backlash against Microsoft's FAT patent assertions in the early prompted the company to pledge interoperability support, including a 2003 initiative to share FAT specifications under royalty-bearing terms as part of broader collaboration efforts, though enforcement threats persisted. The investigated Microsoft for antitrust violations in the , focusing on bundling practices and interoperability barriers in Windows, which indirectly affected standards like FAT by requiring greater openness in protocol documentation. Key outcomes of these challenges included the U.S. Patent and Trademark Office's 2004 rejection of Microsoft's core patent claims on grounds, rendering much of the base FAT specification freely implementable by 2004 despite later appeals. VFAT extensions remained licensed until their patents began expiring in the mid-2010s, with exFAT-related patents following suit—one key exFAT patent lapsed in 2024, enabling fuller open-source adoption by 2025 without licensing fees. These resolutions, coupled with legal pressures, spurred development of patent-free alternatives like for , reducing reliance on proprietary file systems.

References

  1. https://wiki.endsoftwarepatents.org/wiki/Microsoft_FAT_patents
Add your contribution
Related Hubs
User Avatar
No comments yet.