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:
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)