Recent from talks
Nothing was collected or created yet.
File Allocation Table
View on WikipediaThis 23 October 2025 needs additional citations for verification. (October 2025) |
| Developer(s) | Microsoft, NCR, SCP, IBM, Compaq, Digital Research, Novell, Caldera |
|---|---|
| Full name | File Allocation Table |
| Variants | 8-bit FAT, FAT12, FAT16, FAT16B, FAT32, exFAT, FATX, FAT+ |
| Introduced | 1977 with Standalone Disk BASIC-80 |
| Partition IDs | MBR/EBR: |
| Structures | |
| Directory contents | Table |
| File allocation | Linked list |
| Bad blocks | Cluster tagging |
| Limits | |
| Max volume size |
|
| Max file size | 4,294,967,295 bytes (4 GB − 1) with FAT16B and FAT32[1] |
| Max no. of files |
|
| Max filename length | 8.3 filename, or 255 UCS-2 characters when using LFN[nb 1] |
| Features | |
| Dates recorded | |
| Date range | 1980-01-01 to 2099-12-31 (2107-12-31) |
| Date resolution |
|
| Forks | Not natively |
| Attributes | Read-only, hidden, system, volume, directory, archive |
| File system permissions |
|
| Transparent compression |
|
| Transparent encryption |
|
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]| Developer(s) | Microsoft, NCR, SCP |
|---|---|
| Full name | 8-bit File Allocation Table |
| Introduced |
|
| Limits | |
| Max file size | 8 MB |
| File size granularity | record-granularity (128 bytes)[15][16] |
| Max filename length | 6.3 filename (binary files), 9 characters (ASCII files)[15][16] |
| Max directory depth | No sub-directories |
| Allowed filename characters | ASCII (0x00 and 0xFF not allowed in first character)[15][16] |
| Features | |
| Dates recorded | No |
| Attributes | Write 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]| Developer(s) | SCP, Microsoft, IBM, Digital Research, Novell |
|---|---|
| Full name | 12-bit File Allocation Table |
| Introduced |
|
| Partition IDs | MBR/EBR: |
| Limits | |
| Max volume size |
|
| Max file size | Limited by volume size |
| File size granularity | 1 byte |
| Max no. of files | 4,068 for 8 KB clusters |
| Max filename length | 8.3 filename with OEM characters, 255 UCS-2 characters[nb 1] when using LFN |
| Max directory depth | 32 levels or 66 characters (with CDS), 60 levels or more (without CDS) |
| Features | |
| Dates recorded | |
| Date range | 1980-01-01 to 2099-12-31 (2107-12-31) |
| Date resolution |
|
| Attributes | Read-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]| Developer(s) | Microsoft, IBM, Digital Research, Novell |
|---|---|
| Full name | 16-bit File Allocation Table (with 16-bit sector entries) |
| Introduced | 1984-08-14 (PC DOS 3.0) 1984-08 (MS-DOS 3.0) |
| Partition IDs | MBR/EBR: |
| Limits | |
| Max file size | 4,294,967,295 bytes (4 GB − 1) |
| File size granularity | 1 byte |
| Max no. of files | 65,536 for 32 KB clusters |
| Max filename length | 8.3 filename with OEM characters, 255 UCS-2 characters[nb 1] when using LFN |
| Max directory depth | 32 levels or 66 characters (with CDS), 60 levels or more (without CDS) |
| Features | |
| Dates recorded | |
| Date range | 1980-01-01 to 2099-12-31 (2107-12-31) |
| Date resolution |
|
| Attributes | Read-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]| Developer(s) | Compaq, Digital Research, IBM, Microsoft, Novell |
|---|---|
| Full name | 16-bit File Allocation Table (with 32-bit sector entries) |
| Introduced |
|
| Partition IDs | MBR/EBR: |
| Limits | |
| Min volume size | |
| Max volume size | |
| Max file size | |
| File size granularity | 1 byte |
| Max no. of files | 65,460 for 32 KB clusters |
| Max filename length | 8.3 filename with OEM characters, 255 UCS-2 characters[nb 1] when using LFN |
| Max directory depth | 32 levels or 66 characters (with CDS), 60 levels or more (without CDS) |
| Features | |
| Dates recorded | |
| Date range | 1980-01-01 to 2099-12-31 (2107-12-31) |
| Date resolution |
|
| Attributes | Read-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]| Developer(s) | Microsoft, Caldera |
|---|---|
| Introduced | August 1996 (Windows 95 OSR2) |
| Partition IDs | MBR/EBR: |
| Limits | |
| Min volume size | |
| Max volume size |
|
| Max file size | |
| File size granularity | 1 byte |
| Max no. of files | 268,173,300 for 32 KB clusters |
| Max filename length | 8.3 filename with OEM characters, 255 UCS-2 characters[nb 1] when using LFN |
| Max directory depth | 32 levels or 66 characters (with CDS), 60 levels or more (without CDS) |
| Features | |
| Dates recorded | |
| Date range | 1980-01-01 to 2099-12-31 (2107-12-31) |
| Date resolution |
|
| Attributes | Read-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]- ^ a b c d e f Since Windows 2000, Microsoft Windows uses UTF-16 instead of UCS-2 for the internal "Unicode". In UTF-16, a "character" (code point) may take up two code units.
- ^ a b Sources differ in regard to the first NCR data entry terminal integrating support for the FAT file system. According to Stephen Manes and Paul Andrews, "Gates", development was for a NCR 8200 in late 1977, incorrectly classified as a floppy-based upgrade to the NCR 7200, which had been released in 1975-11 (model I and IV) and was built around an Intel 8080 8-bit processor, but was cassette-based only. However, the NCR Century 8200 was a 16-bit minicomputer, onto which several data entry terminals could be hooked up. Marc McDonald even remembered a NCR 8500, a mainframe of the Criterion series, which can be ruled out as well. Announced 1977-10 for shipment in 1978-02, NCR also introduced the NCR I-8100 series including the 8080-based NCR I-8130 and NCR I-8150 models of small business systems featuring dual floppy disks. Other sources indicate that either the NCR 7200 series itself or the successor series were the actual target platform. NCR Basic Plus 6 (based on Microsoft Extended BASIC-80) became available for the cassette-based NCR 7200 model VI in Q1/1977. The NCR 7500 series was released in 1978, based on a similar 8080 hardware, but now including NCR 7520 and 7530 models featuring 8-inch diskettes. NCR Basic +6, a precursor or adaptation of Standalone Disk BASIC-80 was available for them at least since 1979. One source claims that a special NCR 7200 model variant with two 8-inch diskettes and Microsoft BASIC existed and was imported by NCR Sydney into Australia the least.
- ^ DR-DOS is able to boot off FAT12/FAT16 logical sectored media with logical sector sizes up to 1024 bytes.
- ^ This was a decision taken by the developer in question, who assumed his decision would be revised later, something that never happened.[43]
- ^ A driver named VFAT appeared before Windows 95, in Windows for Workgroups 3.11, but this older version was only used for implementing 32-bit file access and did not support long file names.
References
[edit]- ^ a b "File Systems". Microsoft TechNet. 2001. Archived from the original on 2011-08-12. Retrieved 2011-07-31.
- ^ a b c d e Microsoft (2006-11-15). Windows 95 CD-ROM CONFIG.TXT File Archived 2020-07-31 at the Wayback Machine Article 135481, Revision: 1.1, retrieved 2011-12-22: "For each hard disk, specifies whether to record the date that files are last accessed. Last access dates are turned off for all drives when your computer is started in safe mode, and are not maintained for floppy disks by default. Syntax:
ACCDATE=drive1+|- [drive2+|-]..." - ^ "File Allocation Table (FAT): What It Is, Types, Versions, Advantages & Disadvantages". www.includehelp.com. Retrieved 2025-06-01.
- ^ "Comparing NTFS and FAT file systems". Microsoft. Archived from the original on 2016-06-20. Retrieved 2014-01-27.
- ^ "A brief introduction to FAT (File Allocation Table) formats". www.wizcode.com. Archived from the original on September 25, 2015. Retrieved September 24, 2015.
- ^ "Volume and File Structure of Disk Cartridges for Information Interchange". Standard ECMA-107 (2nd ed., June 1995). ECMA. 1995. Archived from the original on 2018-10-07. Retrieved 2011-07-30.
- ^ "Information technology – Volume and file structure of disk cartridges for information interchange". ISO/IEC 9293:1994. ISO catalogue. 1994. Archived from the original on 2012-01-17. Retrieved 2012-01-06.
- ^ "Information processing – Volume and file structure of flexible disk cartridges for information interchange". ISO 9293:1987. ISO catalogue. 1987. Archived from the original on 2012-01-17. Retrieved 2012-01-06.
- ^ Reynolds, Aaron R.; Adler, Dennis R.; Lipe, Ralph A.; Pedrizetti, Ray D.; Parsons, Jeffrey T.; Arun, Rasipuram V. (1998-05-26). "Common name space for long and short filenames". US Patent 5758352. Retrieved 2025-06-25.
- ^ a b "Microsoft Extensible Firmware Initiative FAT32 File System Specification, FAT: General Overview of On-Disk Format". Microsoft. 2011-03-30. Archived from the original on 2021-07-23. Retrieved 2018-12-21.
- ^ "How to Convert a Drive from FAT32 to NTFS without Data Loss". WindowsLoop. 2021-07-11. Archived from the original on 2021-08-08. Retrieved 2021-08-08.
- ^ James Ellison (2024-08-01). "What Format Does a USB Need to Be for a DVD Player? Simplifying Compatibility Requirements". Blinks and Buttons. Retrieved 2025-09-04.
- ^ John Bogna (2024-07-23). "FAT32 vs. ExFAT vs. NTFS: Which Format Is Best for Your Storage Drive?". PCMag. Retrieved 2025-09-04.
- ^ JEIDA/JEITA/CIPA (2010). "Standard of the Camera & Imaging Products Association, CIPA DC-009-Translation-2010, Design rule for Camera File system: DCF Version 2.0 (Edition 2010)" (PDF). Archived from the original (PDF) on September 30, 2013. Retrieved 2011-04-13.
- ^ a b c d e f g h i j Xerox BASIC-80 – basic-80 reference manual (PDF). 5.0. Microsoft, Xerox. 1979. 610P70641. Archived (PDF) from the original on 2016-03-04. Retrieved 2014-06-02. (NB. For Microsoft (Standalone Disk / Disk / Extended / 8K) BASIC-80, (Standalone Disk / Extended) BASIC-86, BASIC Compiler, release 5.0)
- ^ a b c d e f g h i j MICROSOFT BASIC-80 version 5.0 reference manual / BASIC-80 Interpreter and Compiler Addendum Release 5.1 (PDF). 5.1. Microsoft. 1979. Archived (PDF) from the original on 2016-03-04. Retrieved 2014-06-02. (NB. For Microsoft (Standalone Disk / Disk / Extended / 8K) BASIC-80, (Standalone Disk / Extended) BASIC-86, BASIC Compiler, release 5.1)
- ^ a b c d e f g Duncan, Ray; Bostwick, Steve; Burgoyne, Keith (1988). The MS-DOS Encyclopedia: versions 1.0 through 3.2 (Completely reworked ed.). Redmond, Washington, USA: Microsoft Press. ISBN 1-55615-049-0. LCCN 87-21452. OCLC 16581341. (xix+1570 pages; 26 cm) (NB. This edition was published in 1988 after extensive rework of the withdrawn 1986 first edition by a different team of authors. [1] Archived 2018-10-14 at the Wayback Machine)
- ^ a b Manes, Stephen; Andrews, Paul (1993). Gates: How Microsoft's Mogul Reinvented an Industry—and Made Himself the Richest Man in America. Doubleday. ISBN 0-385-42075-7.
- ^ a b c d Hunter, David (1983). "Tim Paterson – The roots of DOS". Softalk for the IBM Personal Computer (March 1983). Archived from the original on 2019-09-06. Retrieved 2014-06-02.
- ^ Schulman, Andrew; Brown, Ralf D.; Maxey, David; Michels, Raymond J.; Kyle, Jim (1994) [November 1993]. Undocumented DOS: A programmer's guide to reserved MS-DOS functions and data structures - expanded to include MS-DOS 6, Novell DOS and Windows 3.1 (2 ed.). Reading, Massachusetts: Addison Wesley. p. 11. ISBN 0-201-63287-X. (xviii+856+vi pages, 3.5"-floppy) Errata: [2][3]
- ^ a b Paterson, Tim (2007-09-30). "Design of DOS". DosMan Drivel. Archived from the original on 2013-01-20. Retrieved 2011-07-04.
- ^ Seattle Computer Products (August 1980). "86-DOS - 8086 OPERATING SYSTEM - $95". Byte (Advertisement). Vol. 5, no. 8. BYTE Publications Inc. p. 173. ISSN 0360-5280. CODEN BYTEDJ. Retrieved 2013-08-18. [4] Archived 2020-02-01 at the Wayback Machine (NB. The SCP advertisement already calls the product 86-DOS, but does not mention a specific version number. Version 0.3 is known to be called 86-DOS already, so the name change must have taken place either for version 0.2 or immediately afterwards in August 1980.)
- ^ a b c d Seattle Computer Products (1981). "SCP 86-DOS 1.0 Addendum" (PDF). Archived (PDF) from the original on 2012-10-03. Retrieved 2013-03-10.
- ^ Wallace, James; Erickson, Jim; (1992); Hard Drive: Bill Gates and the Making of the Microsoft Empire, John Wiley & Sons, ISBN 0-471-56886-4
- ^ Norton, Peter; (1986); Inside the IBM PC, Revised and Enlarged, Brady, ISBN 0-89303-583-1, p. 157
- ^ Jenkinson, Brian; Sammes, A. J. (2000). Forensic Computing: A Practitioner's Guide (Practitioner Series). Berlin: Springer. p. 157. ISBN 1-85233-299-9.
... only 2^12 (that is, 4096) allocation units or clusters can be addressed. In fact, the number is less than this, since 000h and 001h are not used and FF0h to FFFh are reserved or used for other purposes, leaving 002h to FEFh (2 to 4079) as the range of possible clusters.
- ^ Paterson, Tim (1983). "An Inside Look at MS-DOS". Byte. Archived from the original on July 20, 2011. Retrieved 2011-07-18.
The numbering starts with 2; the first two numbers, 0 and 1, are reserved.
- ^ IBM (1984). IBM PC DOS 3.0 announcement letter.
- ^ IBM (1985). IBM PC DOS Technical Reference. First Edition, P/N 6024181, dated February 1985.
- ^ "Microsoft Knowledge Base article: "MS-DOS Partitioning Summary"". Archived from the original on 2018-06-12. Retrieved 2018-06-02.
- ^ a b c FYI – Installing DR DOS on NEC DOS 3.3 Partitions, Novell, 1993-01-05, FYI.M.1101, archived from the original on 2016-03-04, retrieved 2014-08-12
- ^ Brouwer, Andries. "List of partition identifiers for PCs". Archived from the original on 2019-04-23. Retrieved 2012-01-11.
- ^ "Q78407: Wyse DOS 3.3 Partitions Incompatible with MS-DOS 5.x and 6.x". Microsoft (FTP). 2000-12-17.[dead ftp link] (To view documents see Help:FTP) Alt URL
- ^ "Q68176: Upgrading Pre-4.0 Systems with Logical Drive(s) > 32 MB". Microsoft (FTP). 2000-12-17.[dead ftp link] (To view documents see Help:FTP) Alt URL
- ^ Brouwer, Andries. "Properties of partition tables". Archived from the original on 2019-04-23. Retrieved 2012-01-11.
- ^ a b c d Kuhnt, Udo; Georgiev, Luchezar I.; Davis, Jeremy (2007). "FAT+ draft revision 2" (2 ed.). Archived from the original (FATPLUS.TXT) on 2015-02-19. Retrieved 2015-08-05.
- ^ "Dskprobe Overview: Data Recovery". Microsoft TechNet. 2003-03-28. Archived from the original on 2011-07-03. Retrieved 2011-08-03.
- ^ "Errors Creating Files or Folders in the Root Directory". Microsoft Help and Support. 2004-12-16. Archived from the original on 2020-07-31. Retrieved 2006-10-14.
- ^ "mkdosfs man page". Archived from the original on 2006-10-07. Retrieved 2006-11-21.
- ^ "Windows 98 Resource Kit – Chapter 10 – Disks and File Systems". Microsoft TechNet. 1998. Archived from the original on 2012-05-01. Retrieved 2012-07-16.
- ^ "Limitations of FAT32 File System". Microsoft Knowledge Base. 2007-03-26. Archived from the original on 2020-07-31. Retrieved 2011-08-21.
Clusters cannot be 64 kilobytes (KB) or larger
- ^ "Limitations of the FAT32 File System in Windows XP". Microsoft Knowledge Base. 2007-12-01. Archived from the original on 2020-07-31. Retrieved 2011-08-21.
- ^ "Explained: The thinking behind the 32GB Windows Format limit on FAT32".
- ^ Glenn, Walter (2017-07-20). "How to Format USB Drives Larger Than 32GB With FAT32 on Windows". How-To Geek. Archived from the original on 2021-01-26. Retrieved 2021-01-26.
- ^ Roshan Ashraf Shaikh (2024-08-16). "Windows 11 preview build sees FAT32 partition size increased to 2TB after 30 years". Tom's Hardware. Retrieved 2024-08-23.
- ^ a b README.TXT – Caldera DR-DOS FAT32 Enabled Boot Disk (DRFAT32). Caldera, Inc. 1998-07-24.
- ^ DRFAT32.SYS R1.00 INT 13h Interface for FAT32 Redirector, Caldera, Inc., 1998-09-11
- ^ IBM; 4690 OS User's Guide Version 5.2, IBM document SC30-4134-01, 2008-01-10 ([5] )
- ^ Karpowitz, Christina (1998-09-23). "PowerQuest PartitionMagic 4.0 now available". PowerQuest. Archived from the original on 1999-02-08. Retrieved 2015-04-17.
- ^ Livingston, Brian (1998-10-28). "FAT-32X may operate differently than FAT-32 on large hard drives". InfoWorld. Vol. 20, no. 43. Archived from the original on 2015-11-12. Retrieved 2015-04-17.
- ^ a b Duitz, Neal (2001-07-17). "Can anyone explain FAT32X?". Win98 Private FAQ, Windows 98 Consumer Preview Program. Archived from the original on 2004-06-13. Retrieved 2015-04-17.
- ^ a b Costanzo, Lance (1998-05-14). "FAT32X". Archived from the original on 1998-05-21. Retrieved 2015-04-17.
- ^ Steinberg, David (1998-05-01). "What is a FAT32X partition?". Tech Tip / FAQ. PowerQuest Technical Support. Archived from the original on 2015-09-21. Retrieved 2015-04-17.
- ^ Eager, Bob; Tavi Systems (October 28, 2000); Implementation of extended attributes on the FAT file system ([6] Archived June 13, 2006, at the Wayback Machine)
- ^ Kelder, Henk; (2003); FAT32.TXT for FAT32.IFS version 0.9.13. ([7] Archived 2013-05-11 at the Wayback Machine): "This byte [...] is not modified while running Windows 95 and neighter [sic] by SCANDISK or DEFRAG. [...] If another program sets the value to
0x00for a file that has EAs these EAs will no longer be found using DosFindFirst/Next calls only. The other OS/2 calls for retrieving EAs (DosQueryPathInfo, DosQueryFileInfo and DosEnumAttribute) do not rely on this byte. Also the opposite could [...] occur. [...] In this situation only the performance of directory scans will be decreased. Both situations [...] are corrected by CHKDSK". - ^ Kelder, Henk; FAT32.TXT for FAT32.IFS version 0.74 ("@Macarlo, Inc". Archived from the original on March 30, 2012. Retrieved January 14, 2012.). Comment: This older version of the README file still discusses the old
0xEAand0xECmagic values. - ^ Eager, Bob (2000-10-28). "Implementation of extended attributes on the FAT file system". Tavi OS/2 pages. Archived from the original on 2006-06-13. Retrieved 2006-10-14.
- ^ IBM; 4690 OS Programming Guide Version 5.2, IBM document SC30-4137-01, 2007-12-06 ([8] )
- ^ "Release notes for v2.5.7". The Linux Kernel archives. 2002-03-12. Archived from the original on 2006-04-15. Retrieved 2006-10-14.
- ^ Kuhnt, Udo (2011-07-21). "DR-DOS/OpenDOS Enhancement Project". Archived from the original on 2016-07-06. Retrieved 2015-04-20.
- ^ "FATX Specification". free60 wiki. Archived from the original on 2018-07-26. Retrieved 2011-08-16.
- ^ de Quincey, Andrew; Murray-Pitts, Lucien (2008-08-29). "Xbox partitioning and file system details". 0.13. Xbox-Linux project. Archived from the original on 2010-06-17. Retrieved 2014-05-25.
- ^ Steil, Michael (2008-02-26) [2003]. "Differences between Xbox FATX and MS-DOS FAT". Xbox-Linux project. Archived from the original on 2010-06-17. Retrieved 2014-05-25.
- ^ Microsoft. "exFAT File System Intellectual Property licensing program". Microsoft. Archived from the original on May 7, 2013. Retrieved 2013-04-23.
- ^ "Reverse Engineering the Microsoft exFAT File System | SANS Institute". Archived from the original on 2021-04-21. Retrieved 2021-03-20.
- ^ "exFAT in the Linux kernel? Yes!". Microsoft Open Source Blog. 2019-08-28. Archived from the original on 2019-09-01. Retrieved 2019-10-06.
- ^ a b US 5579517, Reynolds, Aaron R.; Adler, Dennis R. & Lipe, Ralph A. et al., "Common name space for long and short filenames", issued 1996
- ^ US 5745902, Miller, Thomas J. & Kimura, Gary D., "Method and system for accessing a file using file names having different file name formats", issued 1998
- ^ a b US 5758352, Reynolds, Aaron R.; Adler, Dennis R. & Lipe, Ralph A. et al., "Common name space for long and short filenames", issued 1998
- ^ US 6286013, Reynolds, Aaron R.; Adler, Dennis R. & Lipe, Ralph A. et al., "Method and system for providing a common name space for long and short file names in an operating system", issued 1996
- ^ Microsoft.com Archived August 22, 2009, at the Wayback Machine
- ^ "FAT File System". Intellectual Property Licensing. Microsoft. Archived from the original on 2016-09-21.
- ^ Garrett, Matthew (2012-01-19). "EFI and Linux: the future is here, and it's awful". linux.conf.au. YouTube. Archived from the original on 2021-11-02. Retrieved 2014-01-12.
- ^ US 5367671, Feigenbaum, Barry A. & Miro, Felix, "System for accessing extended object attribute (EA) data through file name or EA handle linkages in path tables", issued 1994
- ^ Ravicher, Daniel B. (2004-04-15). "PUBPAT's Request for Reexamination of Microsoft's FAT Patent" (PDF). Public Patent Foundation. Archived (PDF) from the original on 2013-06-07. Retrieved 2014-01-12.
- ^ USPTO (2004-09-30). "Patent Office's Office Action Rejecting Microsoft FAT Patent" (PDF). Public Patent Foundation. Archived (PDF) from the original on 2013-05-26. Retrieved 2014-01-12.
- ^ Broache, Anne (2006-01-10). "Microsoft's file system patent upheld". CNET News. Archived from the original on 2016-05-03. Retrieved 2016-04-07.
- ^ Paul, Ryan (2009-02-25). "Microsoft suit over FAT patents could open OSS Pandora's Box". arstechnica.com. Archived from the original on 2009-02-27. Retrieved 2009-02-28.
- ^ Fried, Ina (2009-03-30). "Microsoft, TomTom settle patent dispute". cnet.com. Archived from the original on 2009-08-05. Retrieved 2009-08-22.
- ^ "Microsoft Motorola Patent Suit". 2010-10-01. Archived from the original on 2010-10-06. Retrieved 2010-10-02.
- ^ Protalinski, Emil (2010-10-01). "Microsoft sues Motorola, citing Android patent infringement". arstechnica.com. Archived from the original on 2010-10-02. Retrieved 2010-10-02.
- ^ Paul, Ryan (2009-07-02). "New Linux patch could circumvent Microsoft's FAT patents". ArsTechnica.com. Archived from the original on 2013-11-01. Retrieved 2013-10-30.
- ^ Brown, Eric (2009-07-02). "Can FAT patch avoid Microsoft lawsuits?". DesktopLinux.Com. Archived from the original on 2013-01-31. Retrieved 2009-08-23.
- ^ [9], "Common name space for long and short filenames", issued 1994-03-31 "EP0618540B1 - Common name space for long and short filenames - Google Patents". Archived from the original on 2020-03-28. Retrieved 2021-05-07.
{{cite web}}: CS1 maint: bot: original URL status unknown (link) - ^ Müller, Florian (2013-12-05). "Federal Patent Court of Germany invalidates Microsoft FAT patent, appeals court may disagree". FOSS Patents. Archived from the original on 2014-01-04. Retrieved 2014-01-12.
- ^ Labesius, Stefan (2017-05-28). "Bundespatentgericht erklärt VFAT-Patent erneut für nichtig". ifrOSS. Archived from the original on 2019-08-02. Retrieved 2019-08-02.
External links
[edit]- Description of the FAT32 File System: Microsoft Knowledge Base Article 154997
- MS-DOS: Directory and Subdirectory Limitations: Microsoft Knowledge Base Article 39927
- Overview of FAT, HPFS, and NTFS File Systems: Microsoft Knowledge Base Article 100108
- Microsoft Technet; Volume and file size limits of FAT file systems, copy made by Internet Archive Wayback Machine of an article with summary of limits in FAT32 which is no longer available on Microsoft website.
- Chen, Raymond; Microsoft TechNet: A Brief and Incomplete History of FAT32
- Fdisk does not recognize full size of hard disks larger than 64 GB: Microsoft Knowledge Base Article 263044, copy made by Internet Archive Wayback Machine. Explains inability to work with extremely large volumes under Windows 95/98.
- Microsoft Windows XP: FAT32 File System, copy made by the Internet Archive's Wayback Machine of an article with summary of limits in FAT32 which is no longer available on Microsoft website.
File Allocation Table
View on GrokipediaIntroduction
Definition and Purpose
The File Allocation Table (FAT) is a file system 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.[5] This table serves as an index, mapping logical file structures to physical sectors on the disk.[6] 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.[2] Originating in the late 1970s and early 1980s, FAT became the default file system for floppy disks and early personal computer hard drives, particularly under MS-DOS.[7] 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 MS-DOS, Windows, macOS, Linux, and embedded systems.[2][6] 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.[2]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 boot sector, which occupies the first sector (typically 512 bytes) of the volume and includes the BIOS Parameter Block (BPB). This block contains critical metadata such as the number of bytes per sector, sectors per cluster (determining cluster size), the count of reserved sectors at the volume's start, the number of FAT copies (usually two for redundancy), the number of root directory 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.[8] These parameters allow the operating system to locate and interpret subsequent components, including the position and size of the FATs and the starting point of the data area.[9] Following the reserved sectors (which include the boot sector), the volume features two identical copies of the FAT for fault tolerance; if the primary FAT becomes corrupted, the secondary can be used to reconstruct it. Each FAT is an array of entries corresponding to clusters in the data area, with the size of each entry varying by FAT type (though specifics are deferred to variant descriptions). The FATs reside immediately after the reserved area, and their location and length are specified in the boot sector's BPB. After the FATs, the data area begins, comprising clusters that store actual file content and subdirectories; for FAT12 and FAT16, the root directory precedes this data area as a fixed-size region, while in FAT32 it is treated as a dynamic cluster chain within the data area.[7] The boot sector's parameters ensure seamless navigation: it points to the FAT's starting sector and size, while FAT entries reference cluster numbers in the data area to form file chains, marked at the end by special end-of-file (EOF) values such as 0xFFF for FAT12, 0xFFFF for FAT16, or 0x0FFFFFF8 for FAT32.[9] Files and directories are represented by 32-byte entries within the root directory (or subdirectories). Each entry includes the filename 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 archive, 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 file size in bytes.[8] These entries link back to the FAT by referencing the initial cluster, from which the FAT traces the full chain of clusters holding the file's data in the data area, providing a complete map from metadata to physical storage.[7]History
Origins and Development
The File Allocation Table (FAT) file system originated in 1977 when Marc McDonald, working at Microsoft, designed it as part of the Stand-alone Disk BASIC interpreter for managing files on 8-inch floppy disks. The original implementation used 8-bit FAT entries for the limited capacity of 8-inch floppy disks. Bill Gates, as a co-founder of Microsoft, contributed to the early development efforts, aiming to provide a simple, efficient method for allocating disk space in resource-constrained environments. This initial implementation featured a compact allocation table kept in memory to enable quick access on small-capacity media, typically a few hundred kilobytes.[10][11][12] In 1980, Tim Paterson incorporated a slightly modified version of FAT into QDOS (later known as 86-DOS), developed for Seattle Computer Products' 8086-based systems, to offer better disk management than contemporary systems like CP/M. Microsoft licensed 86-DOS and refined it into MS-DOS 1.0, released in 1981 alongside the IBM PC, where FAT—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 IBM PC's hardware while maintaining the core simplicity of the original design. Early FAT lacked support for subdirectories, restricting organization to a flat, single-level structure per volume.[10][13][14] A pivotal milestone came with MS-DOS 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 de facto standard without involvement from a formal standards body during these formative years, enabling widespread adoption in personal computing.[15][16][17]Evolution through Versions
The File Allocation Table (FAT) file system evolved iteratively from the early 1980s to address the growing capacities of storage devices while maintaining compatibility with existing software and hardware. MS-DOS 2.0 in 1983 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.[18] 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.[19] In 1984, FAT16 debuted with MS-DOS 3.0, expanding to 16-bit entries and initially supporting partitions up to 32 MB.[20] This upgrade was motivated by the proliferation of larger hard drives in personal computers, such as those in the IBM PC AT, requiring better scalability while preserving backward compatibility with FAT12 volumes.[21] 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.[22] 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.[9] The finalized FAT16 implementation standardized 512-byte sectors, solidifying its role as the dominant format for DOS and early Windows systems through the 1990s.[7] The advent of FAT32 in 1996 with Windows 95 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.[23] 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.[22] Early Windows NT systems, starting from version 3.5, incorporated VFAT extensions to FAT for long filename support, enhancing usability without disrupting core FAT mechanics.[2] Deprecation of FAT for primary system drives accelerated with Windows XP in 2001, which defaulted to NTFS for its superior security, reliability, and performance on large volumes.[24] Despite this shift, FAT persisted in removable media like USB drives and SD cards due to its universal compatibility across operating systems and devices.[25] 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.[26]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 root directory 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 file system, allowing subdirectories to be allocated clusters just like files.[3] The root directory 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 root directory 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 root directory 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).[8][3] 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 file size (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 root directory with the volume ID attribute bit set and no cluster or size allocated.[8][3] Parsing directory entries follows strict rules to ensure compatibility across systems. Filenames and extensions are left-justified and padded to full length with 0x20 (space) 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 data 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.[8][3] The directory structure 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 hierarchy without cycles. The 8.3 short filename convention creates a flat namespace within each directory, restricting names to 8 uppercase characters plus a 3-character extension, often leading to truncation 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.[8][3]| Offset | Size (bytes) | Field Name | Description |
|---|---|---|---|
| 0 | 8 | DIR_Name | Short filename (padded with spaces) |
| 8 | 3 | DIR_Ext | Short extension (padded with spaces) |
| 11 | 1 | DIR_Attr | File attributes bitmask |
| 12 | 1 | DIR_NTRes | Reserved for NT (case info) |
| 13 | 1 | DIR_CrtTimeTenth | Creation time tenths of second |
| 14 | 2 | DIR_CrtTime | Creation time |
| 16 | 2 | DIR_CrtDate | Creation date |
| 18 | 2 | DIR_LstAccDate | Last access date |
| 20 | 2 | DIR_FstClusHI | High word of first cluster (FAT32 only) |
| 22 | 2 | DIR_WrtTime | Last write time |
| 24 | 2 | DIR_WrtDate | Last write date |
| 26 | 2 | DIR_FstClusLO | Low word of first cluster |
| 28 | 4 | DIR_FileSize | File size in bytes |
FAT Table Mechanics
The File Allocation Table (FAT) consists of an array of entries, with one entry corresponding to each cluster in the data region of the volume, and is positioned immediately following the boot sector. To enhance data integrity against corruption or media failures, the file system maintains two identical copies of the FAT: the primary copy (FAT1) and a backup copy (FAT2), which can be used for recovery if the primary becomes damaged.[8] 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.[8][7][9] 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 chain 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 chain occupy sequential positions on the disk, minimizing mechanical seek times during read and write operations.[2][9] 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 backup 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.[8][2] 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. Defragmentation utilities mitigate this by parsing the FAT to map out all chains, then relocating clusters to consolidate them into contiguous blocks while preserving the original linkage structure, thereby restoring sequential access patterns and improving overall system responsiveness.[9][2]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.[2][9] The cluster size is determined during formatting and recorded in the boot sector's "sectors per cluster" field as a power of two 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.[2][27] 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.[28][29] 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.[28][27] For integrity and recovery, utilities like chkdsk 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 raw data for manual extraction, preventing permanent loss while scanning for cross-links or invalid chains.[30]Variants
Early Variants (FAT8, FAT12, FAT16)
The original 8-bit variant of the File Allocation Table (FAT), developed by Microsoft in 1978 for use with Standalone Disk BASIC, featured 8-bit entries that limited volumes to a maximum of 256 clusters and was primarily designed for single-sided floppy disks.[31] This early implementation supported basic file chaining but was constrained by its small address space, making it suitable only for very low-capacity media typically under 128 KB per disk.[32] 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.[18] 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.[33] FAT16 emerged in 1984 with MS-DOS 3.0 to accommodate the 20 MB hard drives in the IBM 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.[34] 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.[8] In 1987, an extended version (FAT16B) was introduced in Compaq MS-DOS 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.[34] 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.[8] 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.[2]FAT32
FAT32 was introduced by Microsoft in 1996 as an enhancement to the File Allocation Table (FAT) file system, debuting with Windows 95 OSR2 to accommodate the increasing capacities of hard drives exceeding the 2 GB limit of prior 16-bit variants.[35] It employs 32-bit entries in the FAT, with 28 bits usable for cluster addressing (the upper 4 bits reserved), supporting a maximum of 268,435,445 clusters.[7] 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.[7] 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.[36] 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.[7] 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.[9] 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 Windows 11 24H2 restricted FAT32 partition creation to 32 GB; as of 2024, Windows 11 supports creation up to 2 TB.[4][37] The boot sector layout is extended for resilience, including a backup copy at logical sector 6 to facilitate recovery if the primary boot sector becomes corrupted.[38] 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 defragmentation support.[22] It also lacks inherent security mechanisms, including file-level permissions, access control lists, or encryption, making it unsuitable for environments requiring data protection.[39] In the 2000s, FAT32 gained prominence in digital cameras and portable media devices due to its universal compatibility across operating systems and hardware.[40]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 Atari models and 1024-byte sectors on optical media such as CD-ROMs, allowing FAT to adapt to physical constraints without overhauling core structures.[9][41] Logical sectored FAT, introduced in 1988 with MS-DOS 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 BIOS handles physical 512-byte accesses via INT 13h.[42][43] 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 MS-DOS, OS/2 1.2, and Windows NT 3.1.[2] Extended sectored FAT builds on this for media with even larger physical sectors, such as CD-ROMs featuring 2048-byte or 2352-byte physical blocks, by incorporating boot sector fields for both physical and logical bytes per sector in an extended boot record. 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 FAT compatibility on read-only media while accommodating error correction overhead.[44][45] 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.[9] Today, such variations are uncommon in mainstream computing due to standardization 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 MS-DOS support.[46][47]Extensions
Long File Names (VFAT)
The Virtual File Allocation Table (VFAT) extension, introduced by Microsoft with Windows 95 in 1995, provides support for long file names (LFN) on FAT file systems, addressing the limitations of the traditional 8.3 filename format by allowing names up to 255 characters in length using UTF-16 encoding.[48] VFAT functions as a software layer atop the existing FAT structure, enabling backward compatibility while enhancing usability for modern applications.[49] Long file names are stored across multiple special directory entries that precede the conventional 8.3 short name entry for the file.[9] Each LFN entry is identified by an attribute byte value of 0x0F (combining read-only, hidden, system, and volume label flags), which legacy systems typically ignore as invalid.[50] These entries hold 13 Unicode 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.[9] For integrity, each LFN entry includes an 8-bit checksum computed from the associated short filename's 11 uppercase characters (padded with spaces if needed) using the formula: 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.[9] A representative example is the filename "LongFileName.txt", which maps to a generated short name like "LONGFI~1.TXT" to maintain compatibility, where the tilde and number resolve potential conflicts with other short names.[51] 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.[50] VFAT ensures seamless compatibility with pre-Windows 95 operating systems, such as MS-DOS, by treating LFN entries as non-standard and inaccessible, allowing files to be read via the short name alone without data loss.[48] However, this approach consumes significant directory space, as a maximum-length filename requires up to 20 LFN entries plus one short name entry, potentially reducing effective directory capacity.[50] Pure FAT lacks native Unicode support, but VFAT introduces it exclusively through these LFN entries, limiting full Unicode handling to VFAT-enabled environments.[9] Adoption of VFAT extended to later Microsoft operating systems, becoming standard in Windows NT 4.0 (1996) and Windows 2000 (2000), where it provided LFN support on FAT volumes alongside NTFS.[48] Linux kernels integrated VFAT driver support early on, with initial implementation appearing in version 1.3 around 1994, enabling cross-platform access to long filenames on FAT media.[52]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.[53] 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.[54] 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.[55]
File forks, a concept from Apple's Hierarchical File System (HFS) that separates a file's data fork (primary content) from its resource fork (metadata like icons or thumbnails), find no native support in FAT, as the file system design limits files to single data streams.[56] 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 resource fork 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.[57] 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.[58]
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.[59] Standard directory listings do not reveal streams or sidecar files without specialized tools, complicating discovery and management. In recent years, Android file managers like Total Commander have added visibility for hidden ._ files on FAT SD cards, aiding cross-platform access to emulated Mac metadata without full fork reconstruction.[60]
Unix-like Permissions (UMSDOS)
UMSDOS (User MS-DOS) is a filesystem driver developed in 1993 for Linux kernel version 0.99, designed to overlay Unix-like features onto existing FAT partitions for improved Linux compatibility without requiring repartitioning. It enables the storage of POSIX 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.[61] 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.[61] 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.[61] 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 MS-DOS 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 ext2 or other dedicated partitions; it was fully removed from the Linux kernel in version 2.6.11 in 2005 for lack of maintenance.[62] In its historical context, UMSDOS was instrumental in early Linux adoption, permitting installations directly onto MS-DOS partitions and enabling seamless dual-booting or demonstrations on limited hardware before robust native drivers and partitioning tools became widely available.[61]Other Extensions (FAT+, Extended Attributes)
The Transaction-Safe FAT file system (TFAT) is an extension to the File Allocation Table (FAT) file system, developed by Microsoft and detailed in a 2003 patent. It enables support for larger volumes, up to approximately 512 GB, and incorporates transaction logging capabilities through modifications to the boot sector and extended FAT entries that track changes for recovery purposes. These enhancements allow for more robust operation on larger storage media while maintaining backward compatibility with standard FAT tools where possible, though full support requires specific drivers.[63] Extended attributes on FAT volumes were inspired by the High Performance File System (HPFS) in OS/2, where they enable storage of additional metadata such as access control lists (ACLs), timestamps, and application-specific data beyond basic file properties. On FAT, implementation involves a dedicated hidden file named "EA DATA. SF" in the root directory, 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 FAT 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 OS/2 environments due to these overheads and lack of native support in other operating systems, with ACLs providing basic security but not matching NTFS capabilities.[64] Other notable modifications include TexFAT, a Microsoft extension introduced in the mid-2000s 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.[65] Similarly, FAT16+ emerged in the 2000s 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 boot sector flags to signal extended functionality and reserved sectors for metadata, but they introduce compatibility challenges, as standard FAT utilities like chkdsk may misinterpret or corrupt the additional structures.[66] These extensions saw declining use by the 2010s, largely superseded by native file systems such as ext4 on Linux and NTFS 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 firmware for routers and embedded devices in the 2020s, where simplicity and cross-platform readability remain advantageous for USB storage and boot media.[67]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.[68] 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).[67] 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.[69] The structure of exFAT diverges from traditional FAT systems to enhance performance on solid-state drives (SSDs). Instead of maintaining a full file allocation table (FAT) for every cluster, exFAT employs a compact allocation bitmap in the cluster heap to track free and allocated space, which reduces metadata updates and write amplification on flash media.[67] Directory entries are organized into primary, secondary, stream, and name types, allowing for flexible file attributes and multiple data streams per file, similar to NTFS but simplified for portability.[70] Filenames are stored natively in UTF-16 encoding, eliminating compatibility issues with Unicode characters, and all directory entries and the allocation bitmap include 32-bit CRC checksums to verify integrity against corruption.[67] There is no support for legacy 8.3 short filenames, streamlining the namespace to long names only.[71] Key features of exFAT prioritize efficiency for removable media. 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.[71] Optimization for SSDs is achieved by minimizing random writes—such as updating the bitmap 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.[67] These design choices make exFAT faster for sequential access on flash devices compared to FAT32, with lower overhead for large files. Adoption of exFAT has been widespread in consumer storage. The SD Association standardized exFAT as the default file system 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 data transfers.[72] It is also the common format for USB flash drives exceeding FAT32 limits. Microsoft 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 2020s, potentially enabling royalty-free use in open-source projects.[73] Native read/write support arrived in Linux kernel 5.4 (released in November 2019), building on earlier FUSE-based drivers available since around 2013.[74] On macOS, exFAT has been supported since version 10.6.5 (Snow Leopard) in 2010, allowing seamless cross-platform file sharing without third-party tools.[75] Despite its advantages, exFAT has notable limitations, particularly for traditional hard disk drives (HDDs). It lacks built-in journaling, making it vulnerable to data corruption from unexpected power loss or crashes during writes, as there is no mechanism to replay incomplete transactions.[76] 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 NTFS.[77]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.[78][79][80] 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 (FAT) for redundancy, located immediately after the boot sector, to enhance data integrity in a gaming context where drive failures could disrupt play sessions. There is no fixed limit on the root directory 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 file system lacks native support for permissions or access controls.[80][81][82] 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.[78][83][84] FATX evolved with the Xbox 360 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 downloadable content. Later Xbox 360 models introduced support for exFAT on external USB drives for media playback, extending compatibility while retaining FATX for internal storage. The legacy of FATX persisted in backward compatibility features but was supplanted in the Xbox Series X (2020) by a custom file system optimized for SSDs, though tools continue to reference FATX for older console data migration.[84][85][86] As a proprietary 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 file size and vulnerability to fragmentation without defragmentation tools, making it unsuitable for modern cross-platform use.[82][87][80]Turbo FAT
Turbo FAT is a performance-oriented extension to the File Allocation Table (FAT) file system, developed by Novell in the early 1990s as part of its NetWare File System (NWFS) for the NetWare operating system. Introduced in versions like NetWare 3.12 around 1994, 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), NetWare 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 NetWare's block suballocation features rather than explicit flags in the boot sector.[88][89] 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 NetWare servers for industrial control systems and networked applications requiring reliable, high-performance file sharing. 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.[90][91] Despite these advantages, Turbo FAT has notable limitations as a non-standard, proprietary enhancement. The volatile in-memory cache risks data loss or inconsistencies during power failures or crashes if not properly flushed, although NetWare mitigates this through periodic writes and journaling in later versions. Its tight integration with NetWare 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 2010s. With the proliferation of solid-state drives (SSDs) in the 2000s, which eliminate mechanical seek penalties, and the overall decline of NetWare in favor of Linux-based successors like Open Enterprise Server, Turbo FAT has become largely obsolete, persisting only in legacy firmware for specialized embedded or real-time systems.[88][92]Uses
Historical Applications
The File Allocation Table (FAT) file system became the dominant storage format for personal computers during the 1980s and 1990s, particularly within the MS-DOS operating system released in 1981. It served as the primary file system 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.[2][9] FAT's simplicity facilitated cross-platform compatibility in limited ways during the 1980s. 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 MS-DOS FAT-formatted floppies for file exchange between Apple II and IBM PC users. Similarly, early Amiga computers (launched in 1985) incorporated CrossDOS support starting in the late 1980s, enabling the AmigaOS 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 1980s onward, FAT was employed for internal storage and removable media due to its lightweight design and broad readability across hardware.[93] During the 1980s PC revolution, FAT underpinned the IBM PC and compatible systems, powering the boot process and file management for the burgeoning market of personal computing. It was integral to the IBM PC XT's 10 MB hard drive introduced in 1983, using FAT12 for efficient cluster allocation on small volumes. In the 1990s, FAT continued its role in Windows 95 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 software distribution, serving as the medium for shareware and freeware dissemination through user groups, bulletin board systems, and mail-order services, allowing easy copying and portability across MS-DOS machines.[10][94][10] As computing demands grew, FAT began transitioning out of primary use in server and advanced workstation environments. The High Performance File System (HPFS) replaced FAT in OS/2 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 (NTFS) supplanted FAT in Windows NT 3.1, launched in 1993, providing enhanced security, journaling, and scalability for drives exceeding 4 GB, though FAT remained supported for compatibility. In early Unix ports, such as Minix 1.0 from 1987, FAT support was incomplete and primarily limited to read-only access via external tools for MS-DOS floppy interchange, as the system favored its native file structure for core operations.[2][2] FAT's legacy persisted into the 2000s through its role in BIOS boot sectors under the Master Boot Record (MBR) scheme, where the active partition's volume boot record—often FAT-formatted—facilitated legacy booting on x86 systems before the shift to UEFI. This ensured backward compatibility for older hardware and hybrid installations, even as modern operating systems adopted more robust alternatives.[95]Modern Applications
Despite its age, the File Allocation Table (FAT) file system, including its FAT32 and exFAT variants, continues to play a vital role in removable media storage. Post-2000s, FAT32 and exFAT have become standard for USB flash drives and SD cards, supporting partition sizes up to 2TB for FAT32 and larger for exFAT, ensuring broad compatibility across operating systems like Windows, macOS, and Linux.[22][96] This cross-platform interoperability is essential for users transferring files between diverse devices without formatting issues.[97][98] In embedded systems, FAT's simplicity and low resource requirements make it appealing for resource-constrained environments in the 2020s. Internet of Things (IoT) devices, digital cameras, and routers frequently employ FAT for managing storage on SD cards or internal flash, such as storing configuration files, images, or firmware updates.[93] For instance, the ESP32 microcontroller platform integrates FAT support via the FatFs library for handling external SD card storage of multimedia files and logs.[99][100] Digital cameras rely on FAT32 or exFAT for SD card formatting to enable seamless photo and video transfers to computers.[101][102] FAT also persists in bootloader environments from the 2010s onward. The Unified Extensible Firmware Interface (UEFI) specification mandates a FAT32-formatted EFI System Partition (ESP) for booting modern systems, storing bootloaders and essential files.[103][104] In Android devices, recovery modes often access external storage formatted with FAT for sideloading updates or backups via SD cards.[105] FAT maintains niche persistence in contemporary software and hardware as of 2025. Windows 11 retains full read/write support for FAT volumes, including recent enhancements allowing native formatting of FAT32 partitions beyond the previous 32GB limit.[37][106] Automotive infotainment systems commonly use FAT or exFAT for USB and SD card integration to play media and update maps.[107][108] Some 2020s cryptocurrency wallets, such as hardware devices using SD cards for offline storage, leverage FAT for file portability in blockchain node operations.[109] Looking ahead, FAT's usage is declining for primary storage in favor of more robust systems like NTFS or ext4, yet it remains irreplaceable in licensed media standards for removable and embedded applications due to entrenched compatibility requirements.[110][111]Patents and Legal Aspects
Patent History
The core File Allocation Table (FAT) file system, originally developed in 1978 by Microsoft engineers Marc McDonald and Bill Gates for the Stand-alone Disk BASIC interpreter, is considered prior art and thus unpatentable, entering the public domain without any original patents due to its age and widespread prior implementation.[11][112] Microsoft did not seek patents on the fundamental FAT12 and FAT16 structures during their initial creation, as these predated modern software patent practices and were based on earlier floppy disk management techniques from the late 1970s.[21] 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.[113] These patents focused on VFAT's use of additional hidden directory entries to store Unicode-based long names, introduced in Windows 95.[114] During the late 1990s and early 2000s, Microsoft 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, Microsoft announced a licensing program encompassing four FAT-related patents, including the aforementioned, targeting developers outside its ecosystem and prompting threats of enforcement against Linux distributions using VFAT.[115][116] This led to widespread debate, with the U.S. Patent and Trademark Office initially rejecting some claims in 2004 due to prior art but upholding them in 2006 after appeals.[117][118] By the 2000s, the core FAT structures were firmly established as public domain, with no enforceable patents due to their pre-1980 origins and lack of novelty claims. The VFAT LFN patents began expiring around 2013 (20 years from filing dates in the mid-1990s), confirming free use for implementations by the 2010s, as validated by court rulings such as the 2013 invalidation of a related European patent (EP 0 618 540) on prior art grounds.[115][119] Separately, Microsoft's exFAT 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 Linux and related projects.[65][73] These patent concerns delayed native exFAT support in free operating systems, though FAT's inherent simplicity facilitated reverse engineering of its core for broad compatibility.[120]Challenges and Lawsuits
In 2003, The SCO Group entered into a licensing agreement with Microsoft for Unix patents and source code, amid SCO's broader allegations that Linux incorporated proprietary Unix code. This deal, valued at millions, was seen as validation of SCO's intellectual property claims but did not result in direct litigation over FAT specifics and had no relation to FAT's legal status.[121] A prominent legal dispute arose in 2009 when Microsoft sued TomTom for patent infringement related to the company's navigation devices, which used Linux-based software implementing VFAT long filename support on the FAT file system. The suit targeted eight Microsoft patents, including those covering file allocation methods essential for removable media in car navigation systems, highlighting tensions over FAT's use in embedded devices. The case settled later that year with TomTom agreeing to pay for a patent license covering the disputed technologies, avoiding a trial and underscoring Microsoft's strategy to enforce FAT-related intellectual property through cross-licensing rather than prolonged court battles.[122][123] Open-source developers faced ongoing challenges from Microsoft's FAT patents, particularly those on VFAT extensions for long filenames, leading to efforts to circumvent potential infringement. In the 1990s, the Samba project reverse-engineered Microsoft's SMB protocol for network file sharing, which interacted with VFAT-enabled FAT volumes, ensuring compatibility without direct code copying to avoid patent issues. By the late 2000s, Linux kernel 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 8.3 filename conventions. These measures preserved open-source access to core FAT functionality while navigating patent restrictions.[124] Public backlash against Microsoft's FAT patent assertions in the early 2000s prompted the company to pledge interoperability support, including a 2003 initiative to share FAT specifications under royalty-bearing terms as part of broader Linux collaboration efforts, though enforcement threats persisted. The European Commission investigated Microsoft for antitrust violations in the 2000s, focusing on bundling practices and interoperability barriers in Windows, which indirectly affected file system standards like FAT by requiring greater openness in protocol documentation.[125][126] Key outcomes of these challenges included the U.S. Patent and Trademark Office's 2004 rejection of Microsoft's core FAT patent claims on prior art 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 Btrfs for Linux, reducing reliance on proprietary file systems.[117][115]References
- https://wiki.endsoftwarepatents.org/wiki/Microsoft_FAT_patents
