基础知识101 || 谁偷走了我的硬盘空间?

你好,好久不见!

你即将阅读的此篇推送可以解决以下问题:

为什么我斥巨资购买的 1T/2T 硬盘到手会缩水?
是不是厂商在偷工减料?

本期内容我们将解答这个核心疑问。


一、一切的根源

细心的你肯定已经发现,日常生活中的单位存在一套常见的前缀:

缩写全程中文大小计数
Kkilo10^3
Mmega百万10^6
Ggiga十亿10^9
Ttera万亿10^12

这样一套前缀可以应用于功率(瓦)、电压(伏)、频率(赫兹)等各种领域的单位。但是到计算机领域,它产生了一些微妙的变化

由于计算机底层广泛采用二进制,而用二进制来方便地表示以 10 为底的幂次是困难的,计算机行业诞生之初便改用以 2 为底的幂次来定义这一套前缀,产生了:

缩写全称中文大小
KBkilobyte千字节2^10 字节
MBmegabyte兆字节2^20 字节
GBgigabyte吉字节2^30 字节
TBterabyte太字节2^40 字节

这就是大家所熟悉的

1 MB = 1024 KB
1 GB = 1024 MB
...

我们在本文里称其为二进制单位,区别于十进制单位


二、国际电工委员会的搅局

1999 年,国际电工委员会(IEC)发声:

计算机中的K、M、G、T等也应该和其他统一, 采用十进制!

作为行业的权威之一,其将计算机中的 K、M、G、T 等前缀以十进制的形式重新纳入SI体系(国际单位制),并且给二进制单位取了一个新名字。在 IEC 颁布的国际统一标准 IEC 60027-2 下:

SI 十进制IEC 二进制容量关系
kilobyte (kB)[1]kibibyte (KiB)kB ≈ 97% KiB
megabyte (MB)mebibyte (MiB)MB ≈ 95% MiB
gigabyte (GB)gibibyte (GiB)GB ≈ 93% GiB
terabyte (TB)tebibyte (TiB)TB ≈ 91% TiB

其中的 bi/i 就代表 binary(二进制)。也就是说,IEC 重新确定了 MB、GB 等符号为十进制,并将传统的、你我熟悉的二进制含义迁移到了 MiB、GiB 这一套新符号上。

💡 提示
为什么 IEC 要大闹单位?
由表格第三列可见,随着数量级的增大,采用二进制和十进制的两套单位会“渐行渐远”。这个误差也许在计算机发明之初还不足挂齿,但在信息量爆炸的今天,足以造成严重的误导。


三、道理我都懂,但我没见过 MiB?

读到这,你或许会有一个想法:

可是计算机跟其他的领域确实不一样,用二进制貌似确实更合理啊?

实际上,不只你这样想!

外行指导内行!

JEDEC 固态技术协会(一看这名字就很内行)就对 IEC 的做法嗤之以鼻。微软,就始终在 Windows 系统内遵循 JEDEC 的惯例,采用着传统的二进制 KB、GB 等单位。

但总的来说,IEC 并不是一味地弃用二进制,而是希望十进制和二进制并行,标注清楚、理清误会,是更加先进的做法。


四、所以,到底谁动了我的硬盘

你应该已经有了一个答案,但等等:

那我的 16 GB 内存条怎么没在 Windows 上显示缩水?

这里其实还有一个关键的知识点:

📝 笔记
自计算机诞生以来,内存容量计算就始终以 2 为底,因为这对应了二进制底层;
但硬盘并不是!

  • 内存是逻辑电路,直接和 CPU 地址总线绑定
  • 而机械硬盘(HDD)说到底,就是用来存储字节的地方。

1000 个字节和 1024 个字节,对机械硬盘的制造而言没有任何区别,所以机械硬盘其实一直沿用着制造业常见的十进制标准

而后续诞生的固态硬盘(SSD)虽然在闪存颗粒的排列上确实需要遵循 2 的幂次数值,但由于 SSD 的工作原理影响,以及大众已经建立起的对硬盘存储容量的认知,厂商选择了将其“裁剪”到对应的十进制整数,最终同样呈现为十进制容量


因此,对于按照十进制计算的 1 TB 硬盘:

Windows:JEDEC 单位 931 GB[2]

macOS:SI 单位 1 TB

Linux:IEC 单位 931 GiB[3]

对于按照二进制计算的 16 GB(GiB)内存

Windows & macOS:JEDEC 单位 16 GB

Linux:IEC 单位 16 GiB[3]


因此,倒也不是硬盘厂商偷工减料,只是一些标准不同的历史遗留问题在耍花招!

现在,也有一些呼吁微软修改单位的呼声。这样强迫症们就能在资源管理器里看到整数的硬盘容量了~


五、注解

[1] 由于 K 在 SI 体系下为温度的标准单位,此处采用 k

[2] 此处为估算值,以实际大小为准

[3] Linux 存在诸多发行版,此处讨论主流版本