Shared in case there is interest.
High-level compare/contrast with VFAT/FAT32 off the top of my head:
Similarities to VFAT/FAT32:
- Most of the BPB/VBR metadata exists, although in a different header for exFAT. Same concept of clusters-of-sectors, represented the same way (power of 2 for each).
- Same layout: reserved sectors/headers, FAT region, data region; like FAT32, all directories are in the data region.
- Vaguely similar directory contents: 32-byte record size; individual files span several entries.
- FAT chain is basically the same as FAT32, for files allocated with the FAT chain.
Differences:
- There is an allocation bitmap on-disk and it is referenced from a special directory entry in the root directory.
- There is also a defined up-case table on-disk.
- No . and .. directory entries
- The dirent struct is completely different.
- VFAT lays out long file names as last-to-first, then inode-like FAT32 8.3 slot. exFAT instead allocates 3 or more slots per file: inode-like File slot, inode-like Stream Extension slot, and then 1 or more File Name slots. Both FreeBSD implementations use the offset of the inode-like File as the canonical inode number for files and directories.
- exFAT files and directories can be allocated contiguously on disk. If the file contents occupy a single contiguous extent, the File entry is marked NoFatChain, and logical-to-physical mapping for that file is greatly simplified.
- exFAT files can be preallocated; file size (used) and file size (allocated) are tracked separately.
- exFAT files can be >4GB (64-bit size).