You may have heard about or even experienced yourself the problem of buying a new hard disk drive to install on your old (and sometimes not that old) machine and facing some size limitation, i.e., your old system does not recognizing the full capacity of your hard disk drive.
In this tutorial we will explain why this happens, list all hard disk drive capacity limitations that have ever existed since the PC was created and show you how to fix them.
A capacity limitation can occur for several reasons, such as a hardware limitation, a limitation of the file system your hard drive is using or a limitation of the operating system you are using.
First, let’s understand how data are stored on hard disk drives.
Hard disk drives are sealed system containing one or more magnetic discs inside. Each side is simply called side or head, because for each side there is a magnetic head available for reading and writing data. Each side of a magnetic disc is divided into several concentric tracks or cylinders.
Then each track is divided into sectors. Each sector holds 512 bytes of information. The minimum unit the hard disk drive controller can access is the sector, meaning that if it has to read just one byte from a given sector, it must read the entire sector.
The number of bytes inside a sector is fixed, it is always 512 bytes. But the number of tracks, sectors per track and sides (i.e., heads) a hard drive has will depend on the model. The number of heads, tracks and sectors per track a hard disk drive has is called geometry.
If you multiply the number of heads by the number of tracks and then by the number of sectors per track you will find how many sectors a given hard disk drive has (for newer hard disk drives the manufacturer announces the number of sectors the drive has, instead of its geometry). Multiplying this number by 512 will give you the total capacity of a hard disk drive in bytes.
The first problem with hard disk drive capacity is that manufacturers assume that kilobyte (KB), megabyte (MB), gigabyte (GB) and terabyte (TB) are different things from what they really are, making you to have a hard disk drive with less capacity than advertised. This problem is known by several names, like “rounding,” “formatted capacity vs. unformatted capacity,” etc.
Some people even wrongly assume that the operating system is the villain behind the vanishing of space, but the truth of the matter is that the hard drive manufacturers are the one to blame, as they announce their products with a capacity higher than the real drive capacity.
|Unit||Symbol||Base 2||Base 10|
For example, hard disk drive manufacturers assume that 1 GB equals to 1 billion (10^9) bytes, while in fact 1 GB equals to 1,073,741,824 (2^30) bytes.
Let’s take a real example, Seagate/Maxtor DiamondMax 21 hard disk drive with “250 GB.” It is announced as being a 250 GB hard disk drive, having 488,397,168 sectors. With this number of sectors we can easily find out that the capacity of this hard disk drive is of 250,059,350,016 bytes, or 232.88 GB and not 250 GB. So here is why your 250 GB hard drive is only formatted with 232 GB: it IS a 232 GB hard drive!
[nextpage title=”Hardware Limits”]
In the past the PC addressed each sector on the hard drive through its physical location. I.e. to load (or store) a given sector, the PC would need to inform the hard disk controller which side, which track and which sector within this track the program wants to load or store (something like “hey controller, give me the 512 bytes of information that is stored on sector 5 from track 10 on side 1”). This system is also known as CHS (Cylinder, Head and Sector).
The problem is that PCs had a limit on the highest track, highest head and highest sector they could access. In fact, there were two limits. One for the computer BIOS – which is a program stored in the computer’s ROM memory that teaches the CPU how to deal with basic peripherals like the floppy disk drive and the hard disk drive – and another for the ATA interface, which is the interface used to connect the hard disk drive to the PC (this interface is also known by other names like PATA, parallel ATA or IDE).
These limits are shown in the table below.
As you can see, the original BIOS used on the PC could access only to 1,024 tracks, 255 sides and 63 sectors. Like we explained in the previous page, if we multiply these three numbers we will come up with the total number of sectors on the hard disk drive, and multiplying this number by 512 we have the total hard disk drive capacity, in bytes.
Thus the original BIOS used on the PC could access hard disk drives only up to 7.84 GB. Keep in mind that when the IDE/ATA standard was created back in 1986 people thought that this limit was almost impossible to be reached, as at that time the most high-end hard disk drive had 40 MB in capacity.
This limit, also known as 8 GB limit (because of the wrong definition of gigabyte explained before), can be solved with a BIOS upgrade and affects computers built up to 1999 more or less. It is important to know that even with a BIOS upgrade MS-DOS up to 6.22 cannot recognize disks above this limit.
Windows NT has a limitation where it can’t boot from the first partition if it is larger than 7.84 GB, but this is a operating system limitation and not the hardware limitation explained above.
We will discuss this problem later.
We also have the ATA interface limits, shown on the above table, which is of 127.5 GB (or 136 GB if you use the wrong definition of gigabyte). This limit deserves more attention and will explain it better in just a moment.
Then there is another limit that affected computers built up to around 1995, which is the 504 MB (or 528 MB, if you use the wrong definition of megabyte) limit.
This limit existed because the computer needed to respect both BIOS and ATA limits at the same time. For example, even though ATA standard allowed addressing up to 65,536 tracks, the BIOS didn’t, so the computer addressing capability was limited to 1,024 tracks. The same goes for heads and sectors, as you can see on the table.
Once again the solution was a BIOS upgrade to allow a new mode introduced at that time (and which is standard today for parallel hard disk drives) called LBA (Logical Block Addressing), which made the computer to address each sector of the disk sequentially instead of using its physical (i.e., CHS) location. So today instead of having to ask for sector 5 from track 16 on side 1, the system only needs to ask “hey, give me sector 1,186,612.”
Since nowadays LBA mode is used, you could think that there is no more limitation in hardware for the maximum hard disk drive capacity. However, ATA interface uses a 28-bit variable to address sectors under LBA mode, creating a 128 GB (or 137 GB if you use the wrong definition of gigabyte) limit (2^28 x 512 bytes).
ATA-6 standard (a.k.a. ATA/100) increased the size of the LBA variable to 48 bits, pushing the size limit up to 128 PB (petabytes, one petabyte is 2^50, so 128 PB is equal to 131,072 TB) a limit that seems impossible to reach (let’s see 10 years from now if this statement continues to be true). By the way, this limit is also known as 144 PB limit, if the wrong definition of petabyte is used.
To solve this 128 GB limitation, two things are needed. First, update the motherboard BIOS to the latest version available (read our tutorial on this subject). Second, run “Big Drive Enabler,” a Windows program to enable 48-bit LBA addressing, as Windows ME, NT, 2000 and XP without SP1 or SP2 don’t recognize hard drives over 128 GB as they don’t support 48-bit LBA addressing (Windows 95 doesn’t support hard drives above 32 GB due to a system limitation that isn’t related to what we are describing and Windows 98 doesn’t support hard disk drives over 128 GB also due to another unrelated problem, so with this system there is no solution to the 128 GB limit).
[nextpage title=”FAT Limits”]
We said that the smallest unit that the hard disk drive controller can access is the sector. When Microsoft created DOS, however, they decided that the smallest unit the operating system would access wouldn’t be the sector, but a group of sectors, which they called cluster.
The operating system needs a table listing which file is using which sector and the problem in accessing each sector directly is that you need a table long enough to accommodate all sectors available in the hard disk drive, and also make provision for bigger drives that may be launched in the future. For example, for our 250 GB hard disk drive we would need a list with 488,397,168 entries. Back in 1983 when the first hard disk drive was launched with only 5 MB, listing all sectors would take up a lot of space of the hard disk drive.
DOS below version 3.0 used a system called FAT-12, meaning a File Access Table (the table we were talking about above) using 12-bit entries and using 4 KB clusters – i.e., instead of accessing each sector directly the operating system accessed a group of eight sectors per time (4 KB / 512 bytes = 8).
With 12 bits you have 2^12 entries on the abovementioned table, i.e., 4,096 entries. Since each entry maps to a 4 KB cluster, with the FAT-12 system you could have hard disk drives up to 16 MB (4,096 x 4 KB). So DOS below 3.0 wouldn’t recognize drives above 16 MB. Since at this time hard disk drives had 5 MB and 10 MB in capacity, this system would work just fine. By the way, FAT-12 system is still used on floppies.
With DOS 3.x Microsoft released FAT-16 system, which at this time used 14-bit addressing (and not 16-bit as the name suggests). With 14 bits the number of entries on the table was of 16,384, and the size of the cluster was of 2 KB (i.e., each cluster was a group of four sectors).
Making the math you will find out that with DOS 3.x the operating system could recognize only up to 32 MB (16,384 x 2 KB) hard disk drives.
Then with DOS 4.0 Microsoft expanded FAT-16 to real 16-bit addressing, meaning 65,536 entries on the table. Still using 2 KB clusters this allowed the operating system to recognize hard disk drives up to 128 MB.
With DOS 5.0 instead of increasing the size of the FAT Microsoft decided to play around with cluster size. At the time you’d format your hard disk drive, the operating system would choose the cluster size according to the capacity of your hard disk drive (see table below). This DOS version, however, allowed clusters only up to 8 KB, allowing the operating system to recognize hard disk drives partitions up to 512 MB (65,536 x 8 KB).
|Partition Size||Cluster Size (FAT-16)||Operating System|
|Up to 128 MB||2 KB||DOS 5.0 and up|
|From 128 MB to 256 MB||4 KB||DOS 5.0 and up|
|From 256 MB to 512 MB||8 KB||DOS 5.0 and up|
|From 512 MB to 1 GB||16 KB||DOS 6.0 and up|
|From 1 GB to 2 GB||32 KB||DOS 6.0 and up|
|From 2 GB to 4 GB||64 KB||Windows NT only|
Finally with DOS 6.0 Microsoft expanded the above table to allow 16 KB and 32 KB clusters, making the operating system to recognize hard disk drives up to 2 GB (65,536 x 32 KB). This is the final version of FAT-16 as we know it today and was the same file system used by the first version of Windows 95. So FAT-16 file system still has a 2 GB limit per partition.
This means that under FAT-16 you can only install a 4 GB hard disk drive by creating 2 GB partitions, i.e., your hard disk drive would be divided into a C: drive with 2 GB and a D: drive with 2 GB.
As a side note, Windows NT allowed the use of FAT-16 partitions with 64 KB clusters (see table above), however this configuration isn’t supported by other operating systems; partitions formatted with this configuration can’t be recognized by other operating systems.
Microsoft could have gone forever increasing the cluster size instead of increasing the number of positions inside the allocation table, but this leads to a problem called slack space. Since the smallest unit on the hard disk drive the operating system can access is the cluster (and not the sector) each file when stored on the hard disk drive must have a size that is an exact multiple of the cluster size.
For example, on a 2 GB hard disk drive using FAT-16 a 100 KB file would take up four clusters, or 128 KB, because the hard drive is using 32 KB clusters (100 KB / 32 KB = 3.125, a broken value, so it has necessarily to use four clusters). This extra 28 KB has nothing inside, it is wasted. So when using big clusters, a lot of space on the hard disk drive is wasted just because inside the hard disk drive each file must have a size that is an exact multiple of the cluster size being used.
With Windows 95 OSR2 (launched in 1996 it was Windows 95’s second maintenance version; also known as Windows 95 B) Microsoft launched FAT-32, which became more known when Windows 98 was released, two years later. Using 32-bit addressing it could, at least in theory, access disks up to 2 TB accessing sectors directly instead of using clusters, what would eliminate the slack space problem. FAT-32, however, continues to use clusters:
|Partition Size||Cluster Size (FAT-32)|
|Up to 256 MB||Not Available|
|From 256 MB to 8 GB||4 KB|
|From 8 GB to 16 GB||8 KB|
|From 16 GB to 32 GB||16 KB|
|From 32 GB to 2 TB *||32 KB|
* In theory FAT-32 supports partitions bigger than 2 TB – for example, up to 128 TB if 32 KB clusters are used (2^32 x 32 KB = 128 TB). However, due to a limitation on the hard disk drive boot sector, which uses a 32 bit variable to number the physical sectors present on the hard disk drive, the practical limit of FAT-32 is of 2 TB (2^32 x 512 bytes per sector = 2 TB).
So the slack problem is still around with FAT-32.
This is not the only problem. Even with FAT-32 Windows 95 OSR2 can’t access partitions over 32 GB and Windows 98 can’t access partitions over 128 GB. Windows ME does not face this problem.
Windows NT, 2000 and XP (and probably Vista) can’t format FAT-32 partitions over 32 GB, even though they can recognize hard disk drives formatted with FAT-32 under Windows ME up to the 2 TB limit.
Another problem with FAT-32 is that files can’t be bigger than 4 GB. With people nowadays editing hi-def videos and even the most newbie user authoring and burning his/her own DVDs, this is a real limitation.
FAT-32 also allows only each partition to hold up to 4,194,304 files. Probably you will reach this and the above limit way before the 2 TB maximum partition size limit.
The solution to all these problems is to use a different file system, and if you are a Windows user the most indicated is to use NTFS, which is a file system introduced by Windows NT back in 1993 and is natively available on Windows NT, 2000, XP, 2003 and Vista. In fact this is the recommended file system if you use one of these operating systems. We will discuss more about this file system in the next page.
In fact, the solution for each one of the limits explained on this page is to upgrade your operating system to a newer version.
[nextpage title=”NTFS Limits”]
NTFS is the native file system from Windows NT, 2000, XP, 2003 and Vista, and should be your file system of choice if you are a Windows user. NTFS itself has its own limits – as we will discuss below – but at least they are set at very high numbers, even for today’s standards.
In theory NTFS can use 64-bit addressing, but the way it is implemented today NTFS uses 32-bit addressing. NTFS continues to use clusters, which are 4 KB in size by default for partitions starting at 2 GB. Thus the maximum partition size on NTFS is of 16 TB.
In the table below you can see the default cluster sizes for NTFS partitions. “All” under “Operating System” means “all operating systems that support NTFS,” i.e., Windows NT, 2000, XP, 2003 and Vista.
|Partition Size||Cluster Size (NTFS)||Operating System|
|Up to 512 MB||512 bytes||All|
|From 512 MB to 1 GB||1 KB||All|
|From 1 GB to 2 GB||2 KB||All|
|From 2 GB to 16 TB||4 KB||All but Windows NT up to 3.5|
|From 2 GB to 4 GB||4 KB||Windows NT up to 3.5 only|
|From 4 GB to 8 GB||8 KB||Windows NT up to 3.5 only|
|From 8 GB to 16 GB||16 KB||Windows NT up to 3.5 only|
|From 16 GB to 32 GB||32 KB||Windows NT up to 3.5 only|
|From 32 GB to 256 TB||64 KB||Windows NT up to 3.5 only|
For Windows NT (all versions) the table above is only used for new partitions. Partitions that are created during the operating system installation will always use 512-byte clusters, limiting the size of these partitions to 2 TB (on the other hand they will use the smallest cluster size possible, making partitions created this way to not suffer the slack space problem).
Since NTFS clusters are really small compared to FAT systems, slack space isn’t a significant problem under NTFS (in worst-case scenario you lose 4,093 bytes per file in slack space under NTFS) – at least today. As you can see on the table, Windows NT up to version 3.5 used 64 KB clusters for partitions above 32 GB by default, which created a huge slack space problem.
This problem was fixed from Windows NT 3.51 on, so today all operating systems supporting NTFS will format partitions with 4 KB clusters, if they are bigger than 2 GB.
All Windows versions supporting NTFS can use clusters above 4 KB, up to 64 KB. Changing the cluster size is interesting only if you need your operating system to recognize partitions over 16 TB. To change the partition cluster size you need to format the partition through the command format c: /a:xxxx, where c: is the partition and xxxx is the cluster size in bytes (i.e., 8192 for 8 KB clusters) or to use a partitioning utility such as Partition Magic. Otherwise Windows will use the defaults presented on the table above.
In the table below you can see what the maximum partition sizes with NTFS are if you decide to change the size of the clusters.
|Cluster Size||Maximum Partition Size|
|4 KB||16 TB|
|8 KB||32 TB|
|16 KB||64 TB|
|32 KB||128 TB|
|64 KB||256 TB|
Keep in mind that we are talking specifically about the NTFS file system here. Operating system-related limits may exist preventing you from formatting your hard disk drive with its full capacity. For example, Windows systems by default do not support partitions over 2 TB as the boot partition. If you want disks larger than that to be recognized as a single partition you will need to create a dynamic volume (feature that allows you to join several partitions into a single partition).
[nextpage title=”Operating System Limits”]
We’ve seen all the limits the two major file systems – FAT and NTFS – have. Your operating system, however, may also have its own limitations that prevent you from reaching the maximum partition size the file system you are using could support. Below we list all limits from all Microsoft operating systems.
- MS-DOS up to 6.22: Can recognize hard drives up to 7.84 GB (“8 GB”) in size and there is nothing you can do about it. You need to upgrade your operating system to at least Windows 95 to get partitions over 8 GB. Keep in mind that DOS uses FAT-16, so for hard disk drives above 2 GB you will need to create several partitions.
- Windows 95 OSR2: This operating system can only access partitions up to 32 GB and there is nothing you can do about it. You need to upgrade your operating system to at least Windows 98 to get partitions over 32 GB. Of course we are talking about FAT-32 here, as FAT-16 has a limit of 2 GB per partition that has nothing to do with the OS.
- Windows 98: The Fdisk command, which is used to create partitions, displays the wrong size for partitions above 64 GB. The solution is to download a fixed Fdisk.exe file from Microsoft’s website. With this updated Fdisk, however, the maximum partition size that you can enter manually is 99,999 MB, as this utility displays sizes in MB and allows you to enter only up to 5 digits. The workaround is to enter the size of partitions in percentage or to select the entire hard disk drive to be used as a single partition.
- Windows 98: This operating system can only access partitions up to 128 GB and there is nothing you can do about it. You need to upgrade your operating system to at least Windows ME to get partitions over 128 GB (you will need, however, to run a small program to get over 128 GB, see below).
- Windows 98 and ME: When you format a partition over 64 GB using the command Format.com the command says that the partition size is of 64 GB. This is a cosmetic bug, however, as the partition is formatted to its full capacity (providing that there is no other thing limiting the maximum partition size you may use).
- Windows ME: Fdisk.exe can’t create partitions over 512 GB in size. The solution is to use a partitioning utility. Even the partitioning utility available on Windows ME’s boot disk works fine for this.
- Windows NT: This operating system can’t boot from a partition that is larger than 7.84 GB (“8 GB”). The workaround for this operating system is to create a bootable partition with 7.84 GB and then put the rest of the disk space on one or more extra partitions. If you want to access your hard disk drive over 8 GB as a single partition you will need to upgrade your system to Windows 2000 or other newer OS.
- Windows ME, NT, 2000 and XP without SP1 or SP2 installed can’t recognize partitions over 128 GB because they don’t enable 48-bit LBA by default. The solution is to run “Big Drive Enabler“.
- Windows NT, 2000 and XP (and probably Vista) can’t format FAT-32 partitions over 32 GB, even though they can recognize hard disk drives formatted with FAT-32 under Windows ME up to the 2 TB limit.
- Windows 2000, XP, 2003 and Vista: By default these systems do not support NTFS partitions over 2 TB as their boot partition. If you want disks larger than that to be recognized as a single partition you will need to create a dynamic volume (feature that allows you to join several partitions into a single partition).
[nextpage title=”Summary of All Limitations”]
We provided you tons of information about all size barriers you may face when trying to format a hard disk drive to its full capacity. In order to make you life easier, we compiled the quick reference table below containing all limits we described in this tutorial. If you want to know more about any one of them just go back to the text. Under “limit” we listed both notation systems, using the “right” definition of MB, GB and TB and using the “wrong” definition of these units (shown in parenthesis).
|128 PB (144 PB)||All||None so far, as this limit is far from being reached, but probably a BIOS upgrade.|
|256 TB||Windows 2000, XP, 2003 and Vista using NTFS||This is the 32-bit NTFS file system limit. No solution so far, but probably a new NTFS version using more than 32 bits to address the clusters.|
|16 TB||Windows 2000, XP, 2003 and Vista using NTFS||Use a partitioning utility or the command Format c: /a:xxxx to increase the size of the clusters allowing partitions up to 256 TB (see page 4 for more details).|
|2 TB||Windows ME, 2000, XP, 2003 and Vista using FAT32||Change file system to NTFS.|
|2 TB||Windows 2000, XP, 2003 and Vista using NTFS||These operating systems don’t allow the boot partition to be larger than 2 TB. There are two solutions: create a bootable partition with 2 TB and create a second partition with the rest of your hard drive’s capacity or if you want a single partition create a dynamic volume.|
|128 GB (137 GB)||Windows 98||No solution. Upgrade your OS with at least Windows ME and execute the procedures described below.|
|128 GB (137 GB)||Windows ME, NT, 2000 and XP without any SP installed.||BIOS upgrade AND running a utility.|
|32 GB||Windows 95||No solution. Upgrade your OS with at least Windows 98 (keep in mind that Windows 98 has its own 128 GB limit).|
|7.84 GB (8 GB)||All but MS-DOS||BIOS upgrade. Besides that Windows NT can’t boot from partitions larger than 7.84 GB, you will need to create a bootable 7.84 GB partition and put the rest of the hard disk drive available space on one or more extra partitions.|
|7.84 GB (8 GB)||MS-DOS 6.x||No solution. Upgrade your OS with at least Windows 95 AND upgrade your BIOS.|
|2 GB||All||This is the FAT-16 limit. You can divide your hard disk drive into several 2 GB partitions or use an operating system that supports FAT-32 or NTFS to access your entire hard disk drive into a single partition.|
|512 MB||MS-DOS 5.0||Upgrade your operating system.|
|504 MB (528 M)||All||BIOS upgrade.|
|128 MB||MS-DOS 4.0||Upgrade your operating system.|
|32 MB||MS-DOS 3.x||Upgrade your operating system.|
|16 MB||MS-DOS below 3.0||Upgrade your operating system.|
Update and Frequently Asked Questions
Since this article was originally written, hard drives have been slowly living alongside SSDs and, sooner or later, they might be entirely replaced by them. However, that doesn’t mean that classic hard drives are completely irrelevant anymore, and we have still found notable questions about them online. Here we go:
Computers can be booted over a network, through a USB drive, or even off of a CD or DVD. When you attempt to run a computer without a hard drive, you will often be asked for a boot device. From there, you can select to boot from an optical drive or a USB storage drive. If you’re planning on running a live system, things will be pretty easy.
For example, you can use Rufus to make a portable version of Windows for your on-the-go needs, thus circumventing any necessity for hard drive installation. There are also tons of versions of Linux, with the most popular one being Ubuntu, which comes by default as a live version of the OS so you can use it without installing it at all. In short, yes, it is entirely possible to use a computer without a hard drive.
As of today, no. Some of them only come with an SSD. Others come with a smaller SSD and a bigger HDD to compensate for the otherwise small memory of the SSD. But, if you’re referring to storage in general, then yes, all laptops come with some form of storage for the simple reason that not many people would be able to run a live OS due to the fact that they don’t know how to do that. The only exception to this rule is Chromebooks, which have everything built for the cloud from the ground up.