把硬盘装满电影,掂一掂,真的更重了一些

图片:Vincent Botta / CC0 把硬盘装满电影,掂一掂,真的更重了一些

一个装满数据的硬盘比一个空硬盘重吗?数据有重量吗?

老狼,UEFI固件、服务器、嵌入式产品(公众号:UEFIblog)

简单来说就是存了数据后,机械硬盘只有磁级变化,质量不变;而 SSD 因为锁住了更多的电子(但要记住,是 0 变多了,而不是 1),所以变重了,尽管只有几乎可以忽略的一点点!

平时就喜欢听喜马拉雅的《卓老板聊科技》,作为路上打发时间的利器,卓克的这个节目强调科学思维,其内容深度和广度确实让我大开眼界。昨天偶尔听到一集,关于“存满数据的硬盘是不是比空硬盘重?”的问题,角度十分刁钻,让我也开了脑洞。不过,其中关于 SSD 固态硬盘的存储部分有些许错误,虽然瑕不掩瑜而且结论正确,我还是想要澄清部分对 SSD 原理广泛的误解。

和卓克一样,我也将硬盘分为传统磁介质硬盘和固态硬盘两种,两种硬盘有不同的答案。和他不同的是,我希望从空硬盘什么样,存满数据的硬盘什么样的角度来推导出结论。

空硬盘什么样?

大家买回去的硬盘上面什么也没有,还需要重新分区等等操作,是不是硬盘上面就空空如也,什么也没有呢?其实并不是。

磁介质机械硬盘出厂时做过低级格式化,拿到用户的手上时已经被写入柱面、磁道、扇区等等信息,在没有内容的数据区,都被磁化成 0 的内容。所以空机械硬盘是绝大部分为 0 内容,很小部分为数据(假设 0,1 参半)。

SSD 存储介质采取 NAND Flash。为了简化起见,我们只讨论 SLC。MLC/TCL/QLC 也类似,并不影响结果。空的 SSD 出厂前已经被写入原始的 FTL 映射表,空闲块也已经被预擦除(不是必须,结果一样)。和卓克认为的不一样,被擦除后是全 1,也就是说空 SSD 是绝大部分是 1,很小部分是数据(也假设 0,1 参半)。

存满数据后有什么变化?

为了简化起见,我们假设存满的数据也都是 0,1 参半。那么存满数据后硬盘发生了什么变化呢?

磁介质硬盘数据是通过调整磁介质磁极方向来存储的。卓克的比喻十分形象,这里借用一下:机械硬盘是一个筐子,磁介质是里面放的很多香蕉。0 是香蕉把朝北,1 是香蕉把朝南。存满数据就相当于,原来香蕉把都朝北,现在一半朝北一半朝南。请问筐子重量会不会变化呢?当然不会!

SSD 的 NAND Flash 存储,卓克认为是测量被囚禁在浮动栅(Float Gate)里面的电子的数量,大于 100 就是 1,小于就是 0。因为电子有质量,因为空的 SSD 以前都是 0,现在被囚禁了很多电子,导致 0,1 参半,所以会重一点点。但是我们前面提到,空 SSD 实际上绝大部分是 1,存满数据实际上是 0 变多了,那是不是意味着存满数据,SSD 变轻了呢

实际上,是会重一点。卓克犯了两个错误,负负的正,结论反倒是正确的。实际上存 0 比存 1 重,所以 SSD 会变重点。那么为什么存 0 反倒比存 1 重呢?这要从 NAND Flash 的存储原理说起。

闪存的工作原理

闪存的基本原理在 1980 年代之后基本就没有变化过。它的构成和场效应管(MOSFET)十分类似:

它由:源极(Source)、漏极(Drain)、浮动栅(Float Gate)和控制栅(Control Gate)组成。相对场效应管的单栅极结构,闪存是双栅极结构。浮动栅是由氮化物夹在二氧化硅材料(Insulator)之间构成。

我们的写操作(Program)是这样:

在控制栅加正电压,将电子(带负电)吸入浮动栅。在此后,由于浮动栅上下的二氧化硅材料并不导电,这些电子被囚禁(Trap)在浮动栅之中,出不去了。这样无论今后控制栅电压有否,这个状态都会保持下去,所以闪存可以掉电保存数据。注意写操作完毕后,该闪存单元存储的是0,后面我们将会介绍为什么。

我们的擦除操作(Erase)刚好相反:

在源极加正电压利用浮空栅与漏极之间的隧道效应,将注入到浮空栅的负电荷吸引到源极,排空浮动栅的电子。这时读取的状态是 1。

那为什么有电子是 0,没电子是 1 呢?以为读取的时候,需要给控制栅加一个低的读取电压,对于被 Program 过的闪存单元来说,被囚禁的电子可以抵消该读取电压,造成源极和漏极之间是处于被关闭的状态:

如果是被擦除过的就刚好相反,源极和漏极在控制栅的低电压作用下,处于导通状态:

也就是说通过向控制栅加读取电压,判断漏极 - 源极之间是否处于导通状态来读取闪存单元的状态,如果被 Program 过的,就是处于关闭 OFF 状态,为 0;而被 Erase 过的,就是处于导通状态 ON,为 1。

总结一下,就是浮动栅(Float Gate)里面没有电子,就是 1;如果有电子,就是 0。因为 0 有少许电子,比没有电子的 1 的状态要重一些。空的 SSD 大部分是 1,没有电子;写满后 0 状态变多了,有了更多的电子,所以重一些。

答疑

今天我就其中思考比较深入的问题统一就我的理解做一个解释。

Q: 好像也不对,虽然局部锁住了电子,但整体上 SSD 是电中性的,所以应该也会有些局部的原因抵消了电子的电负性,比如正离子、空穴之类。
Q: 这样会造成电源流出和流入的电子数量不匹配,电荷不守恒了。我猜电子是从衬底中来的,浮栅充电后衬底多了相应数量的空穴。
Q: 但是电子带负电,电子多了如果不是本来就在里面的,那还有别的什么离子进去啊。

A: 总的来说疑问就是多余的电子从哪里来?半导体不是电中性吗?

思考这些问题的同学应该是具有一定的半导体的知识。这很好,我们都知道场效应管(MOSFET)其中虽然分为 N 型和 P 型,但整体是电中性的,即正负电荷总数相等。昨天的这幅图:

让很多同学认为电荷是从基底 / 衬底,也就是 P 型半导体抽上来的,总体电子数量不变,因为电中性。这是因为我为了面向一般受众,将一些具体的细节没有提及,难怪产生误解。下面这个图应该就比较清楚了:

我们可以看到源极 Source 和漏极 Drain 都是 N 型半导体,基底是 P 型半导体。与一般 MOSFET 不同的是,这里有两个 Gate,他们之前由氧化物绝缘层隔离。

Program(写 0)的过程是这样:

源极接地,漏极接正电压,同时在控制 gate 接正电压。电子就从源极向漏极流动,在控制 gate 上电压足够高时,电子会穿过氧化物绝缘层(tunneling),被捕获(trap)在浮动 gate 中。这个电压要刚刚好,既要让电子穿过第一个氧化物绝缘层,又不能让它们继续穿过下一个氧化物绝缘层到达控制 gate。

看到这里,相信同学们已经清楚电子从哪里来的,半导体的电中性怎么样了吧。电子是从 source 的 ground 来的,没有东西被电离。电子确确实实是多出来了,它们会被关在那里,直到下一次越狱的机会。

值得一提的是,电子并不会被永远关在那里,如果闲着不动的话,有逃离的机会:

老狼:杂说闪存番外:我们的数据存在固态硬盘上安全吗?

Q:感觉应该是充放电造成电势能变化,进而 E=mc2 造成质量变化。
Q:不只有内能,假设内能完全不变,电子从分散到聚集电势能肯定增加的。磁场排列从无序到有序能量肯定也是增加。
Q:是不是熵增加了?

A: 是势能发生了变化,从这个角度理解也可以。熵实际上应该是减小了。

Q:要是能做实验 观测到 重量变化就好了 哈哈哈哈,原来 一直在想这个问题,是不是写满了就变重了

A: 这个目前来说没法做实验。电子质量是 9.10938356 × 10(-31)kg,就算 trap 了一亿个电子,我们的测量仪器还没有这种灵敏度。其他的干扰因素,如风吹啊,灰尘啊等等带来的影响就比这增加的一点点质量要高得多。

结论

存满数据后,机械硬盘只有磁级变化,质量不变;而 SSD 因为锁住了更多的电子(但要记住,是 0 变多了,而不是 1),所以变重了,尽管只有几乎可以忽略的一点点!

生活中真是充满了各种有趣的意想不到的知识。