With exFAT, what is the correct theoretical sizes?

One of the most confusing sources of information is the Windows XP KB article, KB955704. If you read it, you have to wonder what the author of the article was thinking. Just looking at the bullet items for the file sizes, after saying that the “file system uses 64 bits to describe the file size”, whoever wrote the article just cut and pasted the volume size info over to the file size info. Even more inaccurate, is the reference in both bullets to “FAT32” when I think Microsoft meant “exFAT”? BTW: A 64 bit number would hold a maximum logical file size of 16EiB, a magnitude smaller than a ZiB. And to make matters worse, everyone, from the Wikipedia to various vendors, quote this information from the KB. I will show that even the 64ZiB is also wrong, it is more like 128PiB, which is 2 magnitudes less than a ZiB.  

On September 29, 2009, Microsoft published in the KB955704 (http://support.microsoft.com/kb/955704)

The exFAT file system driver incorporates advanced structures for future scalability. The exFAT file system uses 64 bits to describe file size. This allows for applications that depend on very large files. The exFAT file system also allows for clusters as large as 32 MB, effectively enabling very large storage devices. Specifically, exFAT adds the following features:

  • · Support for volumes that are larger than 32 GB, the theoretical maximum volume size for FAT32 in Windows XP
    • The theoretical maximum volume size is 64 ZB.
    • The recommended maximum volume size is 512 TB.
  • · Support for files that are larger than 4 GB, the theoretical maximum file size for FAT32 in Windows XP
    • The theoretical maximum file size is 64 ZB.
    • The recommended maximum file size is 512 TB.

On December 10th, 2009, Microsoft published the following (http://www.microsoft.com/presspass/press/2009/dec09/12-10msflashtechpr.mspx)

Enables future growth in media capacities, increasing support from 32 GB up to 256 TB”

My calculation was that the largest possible volume size was 128PiB.

As a reference, here is the Unit Table:

Shorthand Longhand Nth Bytes
KiB Kibibyte 210 1024
MiB Mebibyte 220 1024 KiB
GiB Gibibyte 230 1024 MiB
TiB Tebibyte 240 1024 GiB
PiB Pebibyte 250 1024 TiB
EiB Exbibyte 260 1024 PiB
ZiB Zebibyte 270 1024 EiB
YiB Yobibyte 280 1024 ZiB


So, like I said, the theoretical volume size is about 128PiB. This smaller number is restricted by the size of the FAT entries (32 bits) and the maximum cluster size (32MiB).

[a simple math lesson for those who don’t do exponents – if the base is the same, and in this case we use a common base of 2, and you multiply two numbers of the same base, just add the exponents, and if you divide, subtract the exponents]

The value of 128PiB comes from the following calculation:

The FAT entry is a 32 bit cell, allowing 232 – 11 entries.

[the 11 is sort of not significant, so I’ll drop it]

The FAT tracks a cluster, and the maximum size of a cluster is 32MiB or 225 bytes.

So the largest addressable area (cluster heap) is:

 232 * 225 = 257 or 250 * 27 = 1PiB * 128 = 128PiB

Microsoft indicated a volume size of 64ZiB in the KB955704.

This number comes from the following calculation:

In the VBR is a 64 bit number that is the total number of sectors in the volume

The largest sector size is 4096, or 212.

So, the largest volume size in bytes would be:

 276 or 270 * 26 = 1ZiB * 64 = 64 ZiB

Now, if we used the standard 512 byte sector size, we would get:

Sector size is 512, or 29.

273 = 270 * 2*3 = 1Zib * 8 = 8 ZiB

Let’s look at a maxed out file system:

            232 FAT entries, at 4 bytes each entry (22) and for TexFAT we double that (21): 235 bytes

            Since the sector size is 512 (or 29), the number of sectors to hold TWO FAT’s is 226.

            235 is 230 * 25 = 1GiB * 32 = 32GiB

(The total size in bytes of 2 maxed out FAT tables, that is when we have the maximum cluster heap that can be supported, approximately 128PiB, and in a TexFAT environment where there are 2 FAT tables, the FAT tables will require 32GB of media storage space)

The maximum cluster size, of 32MiB, which is 225,

With a 512 sector size is going to require 225/29 = 216 sectors per cluster.

So, for a maxed out cluster heap of 232 clusters * 216 sectors per cluster = 248 sectors.

232*216 = 248

(This is why the size of the total sectors in the VBR is 64 bits and not 32 bits in size)

Now, if we consider the 11 unusable clusters, that is 11 * 32MiB = 352MiB

So, the maxed out volume size, using 512 byte sectors is:

128PiB (Cluster Heap) +

12KiB (VBR + Backup VBR) +

32GiB (FAT) +

Additional sector overhead –

252MiB (11 non-addressable clusters)


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s