exFAT (Extensible File Allocation Table) is a file system introduced by Microsoft in 2006 and optimized for flash memory such as USB flash drives and SD cards. exFAT is proprietary, and Microsoft owns patents on several elements of its design.
|Full name||Extensible File Allocation Table|
|Introduced||November 2006 with Windows Embedded CE 6.0|
|File allocation||bitmap, linked list|
|Bad blocks||Cluster tagging|
|Max. volume size||c. 128 PiB, 512 TiB recommended|
|Max. file size||c. 128 PiB (theoretical 16 EiB–1)|
|Max. number of files||up to 2,796,202 per directory|
|Max. filename length||255 characters|
|Allowed characters in filenames||all Unicode characters except U+0000 (NUL) through U+001F (US) |
(encoding in UTF-16LE)
|Dates recorded||Creation, last modified, last access|
|Date range||1980-01-01 to 2107-12-31|
|Date resolution||10 ms|
|Attributes||Read-only, hidden, system, subdirectory, archive|
|File system permissions||ACL (Windows CE 6 only)|
|Supported operating systems|
In 2013, Samsung Electronics published under GPL a Linux driver for exFAT. On 28 August 2019, Microsoft published the exFAT specification for the first time, and new driver was included in Linux kernel version 5.4.
exFAT was introduced in late 2006 as part of Windows CE 6.0, an embedded Windows operating system. Most of the vendors signing on for licences are manufacturers of embedded systems or device manufacturers that produce media formatted with exFAT. The entire File Allocation Table (FAT) family, exFAT included, is used for embedded systems because it is lightweight and is better suited for solutions that have low memory and low power requirements, and can be easily implemented in firmware.
The specifications, features, and requirements of the exFAT file system include:
- File size limit of 16 exabytes (264−1 bytes, or about 1019 bytes, which is otherwise limited by a maximum volume size of 128 PB, or 257−1 bytes), raised from 4 GB (232−1 bytes) in a standard FAT32 file system. Therefore, for the typical user, seamless interoperability between Windows and macOS platforms for files in excess of 4 GB.
- Scalability to large disk sizes: ca. 128 PB (257−1 bytes) maximum, 512 TB (249−1 bytes) recommended maximum, raised from the 32-bit limit (2 TB for a sector size of 512 bytes) of standard FAT32 partitions.
- Support for up to 2,796,202 files per directory. Microsoft documents a limit of 65,534 (216−2) files per sub-directory for their FAT32 implementation, but other operating systems have no special limit for the number of files in a FAT32 directory. FAT32 implementations in other operating systems allow an unlimited number of files up to the number of available clusters (that is, up to 268,304,373 files on volumes without long filenames).
- Maximum number of files on volume C, to 4,294,967,285 (232 − 11, up from ca. 228 − 11 in standard FAT32).
- Free space allocation and delete performance improved due to introduction of a free space bitmap.
- Timestamp granularity of 10 ms for Create and Modified times (down from 2 s of FAT, but not as fine as NTFS's 100 ns).
- Timestamp granularity for Last Access time to double seconds (FAT had date only).
- Optional support for UTC timestamps (starting with Vista SP2).
- Optional support for access control lists (not currently supported in Windows Desktop/Server versions).
- Optional support for TexFAT, a transactional file system standard (optionally WinCE activated function, not supported in Windows Desktop/Server versions).
- Boundary alignment offset for the FAT table.
- Boundary alignment offset for the data region.
- Provision for OEM-definable parameters to customize the file system for specific device characteristics.
- Valid Data Length (VDL): through the use of two distinct lengths fields, one for "allocated space" and the other for "valid data", exFAT can preallocate a file without leaking data that was previously on-disk.
- Cluster size up to 32 MB.
- Metadata integrity with checksums.
- Template based metadata structures.
- Removal of the physical
..directory entries that appear in subdirectories.
- exFAT does not support short (8.3 format) filenames.
Windows XP requires update KB955704 to be installed and Windows Vista requires its SP1 or SP2 be installed. Windows Vista is unable to use exFAT drives for ReadyBoost. Windows 7 removes this limitation, enabling ReadyBoost caches larger than 4 GB. Windows 10 only allows formatting exFAT on volumes sized 32 GiB or larger with the default user interface, and FAT32 format is suggested for lower sizes; command-line utilities still accept a full range of file systems and allocation unit sizes.
The standard exFAT implementation is not journaled and only uses a single file allocation table and free space map. FAT file systems instead used alternating tables, as this allowed recovery of the file system if the media was ejected during a write (which occurs frequently in practice with removable media). The optional TexFAT component adds support for additional backup tables and maps, but may not be supported.
The exFAT format allows individual files larger than 4 GB, facilitating long continuous recording of HD video which can exceed the 4 GB limit in less than an hour. Current digital cameras using FAT32 will break the video files into multiple segments of approximately 2 or 4 GB. With the increase of capacity and the increase of data being transferred, the write operation needs to be made more efficient. SDXC cards, running at UHS-I have a minimum guaranteed write speed of 10 MBps and exFAT plays a factor in achieving that throughput through the reduction of the file system overhead in cluster allocation. This is achieved through the introduction of a cluster bitmap and elimination (or reduction) of writes to the FAT. A single bit in the directory record indicates that the file is contiguous, telling the exFAT driver to ignore the FAT. This optimization is analogous to an extent in other file systems, except that it only applies to whole files, as opposed to contiguous parts of files.
exFAT is supported in Windows XP and Windows Server 2003 with update KB955704, Windows Embedded CE 6.0, Windows Vista with Service Pack 1, Windows Server 2008, Windows 7, Windows 8, Windows Server 2008 R2 (except Windows Server 2008 Server Core), Windows 10, and Mac OS X starting from 10.6.5.
Companies can integrate exFAT into a specific group of consumer devices, including cameras, camcorders, and digital photo frames for a flat fee. Mobile phones, PCs, and networks have a different volume pricing model.
Some vendors of flash media, including USB pen drives, compact flash (CF) and solid-state drives (SSD) ship some of their high-capacity media pre-formatted with the exFAT file system. For example, Sandisk ships their 256 GB CF cards as exFAT.
Mac OS X Snow Leopard 10.6.5 and later can create, read, write, verify, and repair exFAT file systems.
A FUSE-based implementation named fuse-exfat, or exfat-fuse, with read/write support is available for FreeBSD, multiple Linux distributions, and older versions of Mac OS X. It supports TRIM. A kernel implementation has also been released, written by Samsung Electronics. It was initially released on GitHub unintentionally, and later released officially by Samsung in compliance with the GPL. An implementation called exFATFileSystem, based on fuse-exfat, is available for AmigaOS 4.1.
XCFiles (from Datalight) is a proprietary, full-featured implementation, intended to be portable to 32-bit systems. Rtfs (from EBS Embedded Software) is a full-featured implementation for embedded devices.
Two experimental, unofficial solutions are available for DOS. The loadable USBEXFAT driver requires Panasonic's USB stack for DOS and only works with USB storage devices; the open-source EXFAT executable is an exFAT file system reader, and requires the HX DOS extender to work. There are no native exFAT real-mode DOS drivers, which would allow usage of, or booting from exFAT volumes.
On 28 August 2019, Microsoft published the exFAT specification and released the patent to the OIN members. Based on these, Linux kernel developers have begun development to add support of exFAT to the kernel.
File name lookup
exFAT employs a filename hash-based lookup phase to speed certain cases, which is described in US Patent 8321439, Quick File Name Lookup Using Name Hash, which document perhaps contains additional details helpful in understanding of the file system, in Appendix A.
File and cluster pre-allocation
Like NTFS, exFAT can pre-allocate disk space for a file by just marking arbitrary space on disk as 'allocated'. For each file, exFAT uses two separate 64-bit length fields in the directory: the Valid Data Length (VDL) which indicates the real size of the file, and the physical data length.
To provide improvement in the allocation of cluster storage for a new file, Microsoft incorporated a method to pre-allocate contiguous clusters and bypass the use of updating the FAT table and on December 10, 2013 the US patent office granted patent US8606830. One feature of exFAT (used in the exFAT implementation within embedded systems) provides atomic transactions for the multiple steps of updating the file system metadata. The feature, called Transaction Safe FAT, or TexFAT, was granted a patent by the US patent office under US7613738 on November 3, 2009.
Directory file set
exFAT and the rest of the FAT family of file systems does not use indexes for file names, unlike NTFS which uses B-trees for file searching. When a file is accessed, the directory must be sequentially searched until a match is found. For file names shorter than 16 characters in length, one file name record is required but the entire file is represented by three 32-byte directory records. This is called a directory file set, and a 256 MiB sub-directory can hold up to 2,796,202 file sets. (If files have longer names, this number will decrease but this is the maximum based on the minimum three-record file set.) To help improve the sequential searching of the directories (including the root) a hash value of the file name is derived for each file and stored in the directory record. When searching for a file, the file name is first converted to upper case using the upcase table (file names are case insensitive) and then hashed using a proprietary patented algorithm into a 16-bit (2 byte) hash value. Each record in the directory is searched by comparing the hash value. When a match is found, the file names are compared to ensure that the proper file was located in case of hash collisions. This improves performance because only 2 bytes have to be compared for each file. This significantly reduces the CPU cycles because most file names are more than 2 characters (bytes) in size and virtually every comparison is performed on only 2 bytes at a time until the intended file is located.
Metadata and checksums
exFAT introduces metadata integrity through the use of checksums. There are three checksums currently in use. The Volume Boot Record (VBR) is a 12 sector region that contains the boot records, BIOS Parameter Block (BPB), OEM parameters and the checksum sector. (There are two VBR type regions, the main VBR and the backup VBR.) The checksum sector is a checksum of the previous 11 sectors, with the exception of three bytes in the boot sector (Flags and percent used). This provides integrity of the VBR by determining if the VBR was modified. The most common cause could be a boot sector virus, but this would also catch any other corruption to the VBR. A second checksum is used for the upcase table. This is a static table and should never change. Any corruption in the table could prevent files from being located because this table is used to convert the filenames to upper case when searching to locate a file. The third checksum is in the directory file sets. Multiple directory records are used to define a single file and this is called a file set. This file set has metadata including the file name, time stamps, attributes, address of first cluster location of the data, file lengths, and the file name. A checksum is taken over the entire file set and a mismatch would occur if the directory file set was accidentally or maliciously changed. When the file system is mounted, and the integrity check is conducted, these hashes are verified. Mounting also includes comparison of the version of the exFAT file system by the driver to make sure the driver is compatible with the file system it is trying to mount, and to make sure that none of the required directory records are missing (for example, the directory record for the upcase table and Allocation Bitmap are required and the file system can't run if they are missing). If any of these checks fail, the file system should not be mounted, although in certain cases it may mount read-only.
exFAT is a proprietary file system and Microsoft only released the specification for it in 2019. This lack of documentation hampered the development of free and open-source drivers for exFAT. Accordingly, exFAT support was effectively limited to Microsoft's own products and those of Microsoft's licensees, which in turn inhibited exFAT's adoption as a universal exchange format.
Interoperability requires that certain results be achieved in a particular, predefined way (an algorithm). For exFAT, this potentially requires every implementation to perform certain procedures in exactly the same way as Microsoft's implementation. Some of the procedures used by Microsoft's implementation are patented, and these patents are owned by Microsoft. A license to use these algorithms can be purchased from Microsoft, and some companies – including Apple, Google and Samsung – have done so. However, in the open-source ecosystem, there is no financial incentive for open-source vendors to purchase a license for these algorithms.
Regardless of whether open-source or not (including Samsung's leaked kernel driver source that was initially fraudulently rebadged as GPL-licensed); Microsoft stated that "a license is required in order to implement exFAT and use it in a product or device." Unlicensed distribution of an exFAT driver would make the distributor liable for financial damages if the driver is found to have violated Microsoft's patents. While the patents may not be enforceable, this can only be determined through a legal process, which is expensive and time consuming. It may also be possible to achieve the intended results without infringing Microsoft's patents.cf. In October 2018, Microsoft released 60,000 patents to the Open Invention Network members for Linux systems, but exFAT patents were not initially included at the time. There was, however, discussion within Microsoft of whether Microsoft should allow exFAT in Linux devices, which eventually resulted in Microsoft publishing the official specification for open usage and releasing the exFAT patents to the OIN in August 2019.
- Although Microsoft published a different value in KB955704, the file size is in bytes and is stored as a 64-bit number. The largest theoretical file size would be 16 EiB−1 byte, the same as in NTFS. However, since the true theoretical maximum volume size under the current specification cannot exceed 128 PiB, a file can never reach that file length. Another reason for the limit is that current IDE/ATA disk addressing is LBA-48, and uses a 48 bit block address to address a sector. A 512 byte sector size would make the maximum addressable file system 512 × 248 = 257, which is 128 PiB. In other words, the 128 PiB limit on the architecture is a hardware restriction. This scenario does not include AF (4k sectors) and exFAT is limited to 128 PiB regardless of sector size based on the specification.
- The theoretical maximum volume size is defined by up to 232 − 11 possible clusters with up to 225 − 1 bytes per cluster = ca. 128 PiB. The size is currently also limited by the LBA48 addressing scheme, as with a 512 byte sector size, only 248 × 512 = 257 bytes = 128 PiB can be addressed.
- This limit applies because the maximum directory size is 256 MiB.
- 268,304,373 files = 228 − 11 reserved clusters - 131,072, the minimum number of 64 kiB clusters occupied for the 268,435,445 directory entries (á 32 bytes) without VFAT LFNs, which are required for 268,435,445 files with sizes between 1 and 65,535 bytes. With VFATs, the 131,072 number must be multiplied by 21 (worst case), which would result in 265,682,933 files instead.
- "KB955704". January 27, 2009.
Description of the exFAT file system driver update package [for Windows XP and Windows Server 2003]
- US 8321439 contains Microsoft exFAT specification (revision 1.00)
- corbet (2019-11-25). "The 5.4 kernel has been released". LWN.net. Retrieved 2019-12-01.
- "exfat -Free exFAT file system implementation". Retrieved October 14, 2015.
- Marius Oiaga (December 11, 2009). "Microsoft Licenses Windows 7's exFAT Flash File Format". Softpedia.com.
- "Conservancy Helps Samsung Resolve GPL Compliance Matter Amicably". Software Freedom Conservancy. Retrieved 2019-03-15.
- Microsoft (August 28, 2019). "exFAT Specification".
- "File System Functionality Comparison". Microsoft. Retrieved February 26, 2015..
- "Limitations of the FAT32 File System in Windows XP". Microsoft. December 1, 2007. Retrieved February 11, 2011.
- Nash, Mike (October 24, 2008). "Windows Vista Service Pack 2 Beta". The Windows Blog. Archived from the original on May 9, 2013.
- "A Second Shot: Windows Vista SP1". Retrieved November 5, 2013.
- "Licensing exFAT". Retrieved March 1, 2017.
- "OEM Parameter Definition with exFAT (Windows Embedded CE 6.0)". Retrieved November 25, 2013.
- "Description of the exFAT file system driver update package". Microsoft. Retrieved February 26, 2015.
- "Information about support for exFAT under Windows Vista". Archived from the original on May 7, 2013.
- "Download Windows Vista Service Pack 1 Five Language Standalone (KB936330) from Official Microsoft Download Center". Microsoft. Retrieved February 26, 2015.
- "exFAT Versus FAT32 Versus NTFS". February 27, 2008. Retrieved October 2, 2009.
- LeBlanc, Brandon (August 28, 2007). "Vista SP1 Whitepaper". Microsoft. Retrieved August 28, 2007.
- "Adding Hard Disk Drives". Microsoft TechNet. Retrieved September 15, 2009.
- "Mac OS X 10.6.5 Notes: exFAT Support, AirPrint, Flash Player Vulnerability Fixes". Retrieved November 25, 2013.
- "fsck_exfat(8) Mac OS X Manual Page". Retrieved November 25, 2013.
- "exFAT support on Sony". Retrieved January 6, 2013.
- Hamm, Jeff (2009). "Extended FAT File System" (PDF). Paradigm Solutions. Retrieved April 9, 2013.
- "Microsoft Licenses exFAT to Research In Motion". Tom's Hardware. September 20, 2012.
- "Microsoft Signs Licensing Agreement With Research In Motion" (Press release). Microsoft. 18 September 2012.
- "Microsoft Signs Patent Licensing Agreement With Aspen Avionics" (Press release). Microsoft.
- "In-vehicle infotainment gets boost from new Microsoft exFAT file system deals". Stories. June 19, 2013.
- "Microsoft Signs exFAT Licensing Agreement With BMW" (Press release). Microsoft.
- "exFAT fs and Linux". Retrieved September 28, 2009.
- "exFAT fs on FUSE". Retrieved May 15, 2010.
- "exFAT fs on linux UBUNTU". Retrieved October 11, 2012.
- "exFAT in FreeBSD". Retrieved April 8, 2013.
- "ExFAT support for Mac OS X 10.5 Leopard and 10.4 Tiger (via Homebrew and Fuse for macOS)". Retrieved July 6, 2018.
- "Open Source Release Center". Samsung. Retrieved November 25, 2013.
- Corbet, Jonathan (July 24, 2013). "The exfiltrated exFAT driver". LWN.net. Retrieved November 25, 2013.
- "Conservancy Helps Samsung Resolve GPL Compliance Matter Amicably". Software Freedom Conservancy. August 16, 2013. Retrieved November 25, 2013.
- "GPL'ed sources for the Samsung exfat module as released by Samsung". Retrieved 2017-08-20.
- "Amigaworld.net". Retrieved February 18, 2015.
- Clarke, Gavin (August 8, 2012). "Sharp cuts exFAT deal with Microsoft for Android mobes". The Register. Retrieved August 12, 2012.
- "XCFiles". Retrieved June 21, 2010.
- "Rtfs". Retrieved January 19, 2011.
- "exFAT". February 2, 2011.
- John Gossman (2019-08-28). "exFAT in the Linux kernel? Yes!". Microsoft. Retrieved 2019-09-02.
- Valdis Klētnieks (2019-08-28). "staging: exfat: add exfat filesystem code to staging". git.kernel.org. Retrieved 2019-09-02.
- US 8321439, "Quick File Name Lookup Using Name Hash"
- US 8606830, "Contiguous File Allocation in an Extensible File System"
- US 7613738, "FAT Directory Structure for use in Transaction Safe File System"
- US Patent Application 2009164440, "Quick Filename Lookup Using Name Hash"; Microsoft Corp; contains exFAT specification revision 1.00. See Tables 8, 12, 13, 14, 15, 16, & 17
- US Patent Application 2008168029, "Extensible File System"; States in Abstract and elsewhere that directory records can be custom defined.
- Larabel, Michael. "Microsoft Publishes exFAT Specification, Encourages Linux Support". Phoronix. Retrieved 28 August 2019.
- "Licensing exFAT", Microsoft IP licensing, Microsoft Legal Resources, 1 March 2017
- Protalinski, Emil (December 10, 2009), "Microsoft licenses out exFAT file system", ArsTechnica.
- Girard, David (21 June 2013), "Can Microsoft's exFAT file system bridge the gap between OSes?", ArsTechnica.
- Corbet, Jonathan (August 16, 2013), Samsung releases exFAT filesystem source, LWN.
- McMillan, Robert (August 20, 2013), "Busted for Dodging Linux License, Samsung Makes Nice With Free Code", Wired.com.
- Corbet, Jonathan (July 24, 2013), The exfiltrated exFAT driver, LWN.
- Finley, Klint; McMillan, Robert (July 25, 2013), "Free Software Robin Hood Liberates Leaked Samsung Code", Wired Magazine.
- Else, Sylvia (November 19, 2016), exFat patent avoidance, Linux.com kernel development forums.
- Vaughan-Nichols, Steven J. "What does Microsoft joining the Open Invention Network mean for you?". ZDNet. Retrieved 2018-12-29.
- "Merging exFAT Support For Linux Is Being Talked About - Waiting On Microsoft's Blessing - Phoronix". www.phoronix.com. Retrieved 2019-08-08.
- exFAT specification
- File System Functionality Comparison of exFAT, FAT32, NTFS, UDF
- exFAT overview in Windows Embedded CE
- Transaction-Safe FAT File System (TexFAT) overview in Windows Mobile 6.5
- Personal Storage : Opportunities and challenges for pocket-sized storage devices in the Windows world (PowerPoint presentation at WinHEC 2006)
- exFAT File System Licensing
- Reverse Engineering the Microsoft exFAT File System, SANS Institute.
- US Patent Application 2009164440, "Quick Filename Lookup Using Name Hash"; Microsoft Corp; contains exFAT specification revision 1.00.
- US Patent Application 2009164539, "Contiguous File Allocation In An Extensible File System"; Microsoft Corp.
- exFAT ships on all SDXC Cards, SD Card Association
- The Extended FAT file system:Differentiating with FAT32 file system, Linux Conference, October 2011.
- Benefits of exFAT over FAT32