So you’ve just bought that shiny new 1Tb hard drive and are excited to finally have some more room to store your movie collection. You carefully connect the drive to your computer, initialize and format it and then…..
WHAT?!?! Only 931.5Gb!!!
I got ripped off!!!
Are Hard Drive Manufacturers Mis-labeling the Capacity?
The simple answer to this question is…no. They are not mislabeling the capacity of your hard drive. If you bought a 1Tb HDD you do in fact have 1TB of data storage available in the device. The fault does not lie with their labeling. Let me explain why.
A Tb of data is one trillion bytes or 1,000,000,000,000 bytes. Now, if we take a typical Western Digital HDD off the shelf and check it, it’ll have somewhere right around 1,953,525,168 sectors. Each sector is 512-bytes in size, so with a bit of quick multiplication, we find that the drive, in fact, has: 1,000,204,886,016 bytes available. Wow! They actually gave me 0.02% extra over the listed capacity.
So why is Windows showing less capacity than what my hard drive actually has?
Where the HDD Capacity Discrepancy Really Lies
The real discrepancy doesn’t fall to HDD manufacturers lying to you. They say it’s a 1billion byte drive and it’s actually just over that capacity. The real discrepancy lies with how your operating system (Windows) calculates data capacity.
The truth is, Windows doesn’t actually measure in Gigabytes and Terabytes at all. Instead, Windows is measuring using Gibibytes and Tebibytes. I know they are spelled similar, but there’s a subtle difference in the spelling and in the meaning. Microsoft, in their infinite wisdom, decided to still use the abbreviation MB, GB, and TB as we normally use for megabyte, gigabyte, and terabyte. However, more accurately they should have used MiB, GiB and TiB to describe what they are measuring.
So what’s the difference between a Terabyte and a Tebibyte?
As I mentioned above a terabyte (what HDD makers measure by) is 1 trillion bytes. However, round numbers such as this, which are fine on a hardware level, don’t work out nicely on a programming level.
Sectors are 512-bytes each. Clusters, which are the smallest block of data any program can write a chunk of data too, are always divisible by this number 512. So a cluster could be 512-byte, 1024-byte, 2048-byte, etc. but will never be a round number like 1000 or 2000.
For this reason, data sizes in the OS/programming level are measured by the number of clusters they occupy rather than the rounded data size.
According to most operating systems, a Kilobyte (Kilo meaning thousand) is actually 1024 bytes, not 1000 bytes. They carry this same principle over with each subsequent larger size. So a MB is 1024Kb, a GB is 1024MB, and a TB is 1024Gb.
So to Windows, a TB (actually a Tebibyte not Terabyte) is 1024 x 1024 x 1024 x 1024 or 1,099,511,627,776 bytes. A number that divides very nicely by any cluster size you happen to throw at it. And thus, the process of calculating sizes is simplified for the programmers.
Does the Math Add Up?
Well, now that we’ve got some numbers to work with, let’s test if we’re getting the size we think we should. So we’ve got a 1TB HDD. Take an actual Terabyte or 1,000,000,000,000, then divide by the size of a Tebibyte (what M$ uses) or 1,099,511,627,776, then. What do we get?: About 909 to the thousand so we can only expect it to be measured as around 909GB effective capacity.
Looks like the HDD manufacture actually over delivered and Microsoft just doesn’t know how to measure it right.
There are some other factors such as file system overhead, hidden partitions, and whatnot that marginally affect your HDD’s capacity, but it’s a relatively small effect on a modern large drive. So I’m not going to bore you with details of that.