ExFAT


exFAT is a file system introduced by Microsoft in 2006 and optimized for flash memory such as USB flash drives and SD cards. exFAT was proprietary until 28 August 2019, when Microsoft published its specification. Microsoft owns patents on several elements of its design.
exFAT can be used where NTFS is not a feasible solution, but a greater file-size limit than the standard FAT32 file system is required.
exFAT has been adopted by the SD Association as the default file system for SDXC cards larger than 32 GB.

History

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

Features

The specifications, features, and requirements of the exFAT file system include:
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 GiB. 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. 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 GiB, facilitating long continuous recording of HD video which can exceed the 4 GiB limit in less than an hour. Current digital cameras using FAT32 will break the video files into multiple segments of approximately 2 or 4 GiB. 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 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.

Adoption

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, Windows 10, Mac OS X starting from 10.6.5, Linux starting from 5.4 and iPadOS.
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.
exFAT is supported in a number of media devices such as modern flat-panel TVs, media centers, and portable media players.
Some vendors of flash media, including USB pen drives, compact flash and solid-state drives 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.
Microsoft has entered into licensing agreements with BlackBerry, Panasonic, Sanyo, Sony, Canon, Aspen Avionics, Audiovox, Continental, Harman, LG Automotive and BMW.
Mac OS X Snow Leopard 10.6.5 and later can create, read, write, verify, and repair exFAT file systems.
Linux has support for exFAT via FUSE since 2009. In 2013, Samsung Electronics published a Linux driver for exFAT under GPL.
On 28 August 2019, Microsoft published the exFAT specification and released the patent to the OIN members. The Linux kernel introduced native exFAT support with the 5.4 release.

Technical specialities

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 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 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. To help improve the sequential searching of the directories 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 and then hashed using a proprietary patented algorithm into a 16-bit 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 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 is a 12 sector region that contains the boot records, BIOS Parameter Block, OEM parameters and the checksum sector. The checksum sector is a checksum of the previous 11 sectors, with the exception of three bytes in the boot sector. 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. If any of these checks fail, the file system should not be mounted, although in certain cases it may mount read-only.
The file system provides extensibility through template-based metadata definitions using generic layouts and generic patterns.

Flash optimizations

exFAT contains a few features that, according to Microsoft, makes it flash-friendly:
However, Microsoft's own implementation on Windows is not truly optimized for flash drives. The OEM parameters are ignored by Windows CE, and it is unknown whether the desktop version performs TRIM at all.

Other implementations

exFAT was a proprietary file system until 2019 when Microsoft released the specification and allowed OIN members to use their patents. This lack of documentation along with the threat of a patent infringement lawsuit, as happened previously when Microsoft sued various companies over the VFAT long file name patent, hampered the development of free and open-source drivers for exFAT, and led to a situation where Linux distributions couldn't even tell users how to get an exFAT driver. Accordingly, exFAT official support was effectively limited to Microsoft's own products and those of Microsoft's licensees. This, in turn, inhibited exFAT's adoption as a universal exchange format, as it was safer and easier for vendors to rely on FAT32 than it was to pay Microsoft or risk being sued.
Interoperability requires that certain results be achieved in a particular, predefined way. 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, users have typically responded to vendors being unwilling to pay for patent licenses by procuring an implementation for themselves from unofficial sources. For example, this is what happened with LAME when MP3 patents were still valid.
Regardless of whether open-source or not, 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. 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.
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. An implementation called exFATFileSystem, based on fuse-exfat, is available for AmigaOS 4.1. A Linux 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 GPLv2 in 2013.
Proprietary read/write solutions licensed and derived from the Microsoft exFAT implementation are available for Android, Linux, and other operating systems from Paragon Software Group and Tuxera.
XCFiles is a proprietary, full-featured implementation, intended to be portable to 32-bit systems. Rtfs 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.