Microsoft Enterprise Platforms Support: Windows Server Core Team
“Why can’t I have a drive bigger than 2 TB?”
This is a common question. And as storage has gotten bigger and cheaper, I see it more and more. So let’s take a few minutes to talk about the mysterious 2 TB limit.
There are actually three different 2 TB limitations that are commonly hit...
Partition Size Limitation
The partition size is pretty straight forward. On an MBR (Master Boot Record) disk, the locations where the partition sizes are stored are only 4 bytes long. Since this is in hexadecimal, the largest value we can stuff in there is all F’s. So the max value would 4,294,967,295 in decimal.
FF FF FF FFh = 4294967295d
This maximum partition size is not in bytes, it is in number of sectors. Since currently sectors are limited to 512 bytes, the maximum size ends up being 2 TB.
4,294,967,295 sectors * 512 bytes/sectors = 2,199,023,255,040 bytes or 2TB.
Number of Clusters
The second limitation is harder to spot. It is a limitation of NTFS. NTFS is limited to (2^32 -1) clusters….no matter what. The smallest cluster size possible is 512 bytes (1 sector). So again the math leaves us at 2,199,023,255,040 or 2TB.
(2^32)-1 = (4,294,967,296)-1 = 4,294,967,295 clusters
4,294,967,295 clusters * 512 bytes/cluster = = 2,199,023,255,040 bytes or 2TB
Here is a quick reference chart to help you see the maximum NTFS size for each cluster size.
NTFS Max Size
17,592,186,040,320 (16TB) Default cluster size
Cluster size really depends on your needs. While 512 is fine if you just have a bunch of tiny files, it isn’t as efficient for say a volume with just SQL DBs. Also, a tiny cluster size can adversely affect VSS. But that is a topic for another time.
This is by far the hardest to understand as it requires some basic SCSI knowledge. Microsoft Windows operating systems support two different SCSI standards when it comes to reads and writes. There is a third but it is very old and is mostly just used on tape devices. So let’s just forget about that one and stick to the two that are relevant.
These two standards are Read10/Write10 and Read16/Write16. This all has to do with the way the CDB (Command Descriptor Block) is structured.
Read10/Write10 – This standard reserves bytes 2-5 to define the LBA (Logical Block Address). Think of LBA as sector numbers….it makes it easier on your brain. So we have 4 bytes that can define the addressable sectors. Just like in the ‘partition size limitation’ we are back to dealing with a 4 byte number used to define all the addresses on the drive.
And just like before, the above is just the possible number of address (number of sectors). Multiply by the standard sector size of 512 bytes and we get…
What this all means is that when Windows is using the Read10/Write10 standard, then the biggest drive that will be supported is 2TB.
Read16/Write16 – Sometimes called LBA64 by some vendors, this standard reserves bytes 2-9 to define the LBAs. That would be 8 bytes, each byte being 8 bits in size. Now here is where we start getting into some really big numbers. The approximate size comes out to be around 8ZB (zettabytes). Here’s a quick chart to put it in some perspective.
So it is going to be a while before we have to worry about running into the limitation of Read16/Write16.
Exceeding the limitations
Each limitation has a way of getting around it. Otherwise we’d still be stuck at 2TB.
Partition size limitation – There are actually two ways around this. The first way is to convert your disks to dynamic disks and create volume sets. This functionality has been around since Windows 2000. This doesn’t really allow you to increase the partition size. What it does is give you the ability to chain your partitions together to form larger volumes. So I could use two drives of 2TB and create a volume of roughly 4TB in size.
The second method to bypass the partition size limitation is to use a GPT (Guid Partition Table) configuration. In Windows 2003 SP1 Microsoft introduced its implementation of the GPT. A disk configured to be GPT rather than the MBR style would have a 32 sector partition array instead of a tiny 64 byte partition table.
NOTE: 32 sectors is equal to 16,384 bytes
The partitions that can be defined on a GPT disk can be up to 16EB in size.
Number of clusters – There really isn’t a way around this limitation. NTFS is currently still limited in its number of clusters. However, you can get past 2TB by making sure your cluster size is larger than the minimum size of 512 bytes.
It is important to note that for the most part, if you create a FAT partition and then convert it to NTFS the cluster size will come out as 512 bytes. There are ways around this but most of them require that you know ahead of time that you are going to be converting your FAT partition to NTFS.
SCSI goo – There isn’t anything in Windows you can do to get around the limitation of Read10/Write10 as Windows is already able to use Read16/Write16. However, the hardware MUST support it as well. Windows will query the storage devices and negotiate if Read10/Write10 or Read16/Write16 is to be used. When in doubt, check with your storage vendor.
Robert Mitchell Senior Support Escalation Engineer Microsoft Enterprise Platforms Support
"In theory, the maximum NTFS volume size is 2^64 clusters." - http://technet.microsoft.com/en-us/library/cc938937.aspx
2^32-1 clusters is current NTFS implementation (ntfs.sys?) limit.
Conversion from FAT32 to NTFS will give 4KB cluster if the partition was created and formatted by Windows XP or later or by program with proper aligning and if FAT32 cluster was 4KB or more.
Igor P. Leyko
MS MVP - Windows System & Performance
"Since currently sectors are limited to 512 bytes"
Can you elaborate on that? I currently have a Promise VTrak 12110 RAID running on a Windows 2000 Server machine. The RAID is a 7.5TB basic disk (it's not a boot or system partition). The Promise RAID config allows a sector size of 4096 bytes, which is how I have formatted it. That along with a 4096 cluster size should allow for a volume of 16TB.
I've read several places that Windows doesn't support sector sizes greater than 512 bytes. However I've been using this config for a while with no adverse affects. Theoretically, Windows should be able to boot from this volume as well should it not?
That is not actually true. I currently have a 7.5TB partition on a Basic Disk running on Windows 2000 Server. This is a Promise RAID which allows the logical disk to be formatted with 4096byte sectors. Note that this is a data disk, not a boot or system disk.
From what I gather 4096byte sectors aren't officially supported by Microsoft, but I haven't had any problems. Can you elaborate on why MS puts the limit on sector size at 512bytes perhaps? Two limitations I have read about are that Dynamic Disks don't support a sector size other than 512 and that file compression can't be used on disks with a sector size other than 512. Besides that are there any other pitfalls?
I posted a comment/question here and it never appeared. After a couple days I tried again and it still did not appear. Now I see that the one comment from someone else that was here is gone. Are you not accepting comments on this blog or is there a glitch? Obviously this message is not intended to be posted as a comment. I'm just hoping the moderator intercepts it and can respond.
In response to Igor Leyko, yes, you can align in such a way that later you converting to NTFS will not stick you with 512b clusters. However, it requires that you know about it beforehand. Most folks are just going with the defaults.
<I've read several places that Windows doesn't support sector sizes greater than 512 bytes. However I've been using this config for a while with no adverse affects. Theoretically, Windows should be able to boot from this volume as well should it not?>
There are 4k sector drives popping up in the marketplace but they are still the minority. So far on the drives that I've tested, I haven't seen any issues. One of the concerns that I've read about comes from people using them on Windows XP systems. Windows XP aligns the first partition to offset 32256 by default. This puts the partition boundary inside of one of the 4k sectors....leading to split i/o. This doesn't keep it from functioning. It just causes a performance hit. Drives like the Western Digital 4k sector drives have a utility to use to create your partitions so they align correctly to avoid the split i/o issue.
I have a question: Whether 4 bytes sector address is allocate independently in a sigle partition or a physical hard disk ?
e.g. If I have a 3TB hard disk and separate into 2 partitions each is smaller then 2TB (drive D and drive E). Can I use the hold storage in windows ?
Would like to use a 4 hdd x 1TB = 4TB in raid 0 w/ windows 7. When will this be supported? Not savy enough to tweak my way around the limitations of 2TB.
That is per partition. However, most people just use a single partition. Also, as I recall the field that holds the 'starting point' for the partition is also only 4 bytes. So you end up bumping into that limitiation as well. If you made the first partition slightly smaller than 2TB, then you should be able to make a second partition that will use the rest.
To G North,
You can chain your drives together as a spanned volume depending on what edition of Win7 you are using. As I recall only Pro/Enterprise/Ultimate will allow you to.
Just make all the disks dynamic and create a big volume set.
Keep in mind, that if ANY of the disks in the volume set fail, you will lose the entire set. So make good backups.
So how do you "The second method to bypass the partition size limitation is to use a GPT (Guid Partition Table) configuration" ???
Yes. GPT disks do not store partition length in a 4 byte field like MBR disks do. GPT disks use an 8 byte field. So the partition size can be in the 'zettabytes'. So the limitation moves from the partition style to the limitation of the file system.
NTFS is currently limited to 256 TB for a single volume.
(Commenting several months later because this post is ranked high in a Bing search for "windows 7 2tb".)
Armed with my new 3GB drive, I formatted it as a GPT volume using, I think, Seagate's disc utility, and then tried installing Windows 7 SP1 on it using the Windows 7 w/SP1 disc from MSDN. I was told that Windows 7 can't be installed on a GPT volume. :-( I gave up immediately and have let the Windows installer disc have its way, with a 2TB partition only, a ~100MB Windows reserved partition preceding it, and then ~700MB unallocated space afterward; some day I will summon the energy to make a D: drive out of the latter.
Thanks for commenting Bill. Actually you can boot to a GPT disk if you are using Windows 7. There are a couple of conditions however. Your hardware needs to support UEFI and your OS needs to be 64bit.