ENZH
和 AI 讨论这篇文章
ChatGPTClaude

硬盘是怎么存数据的

上一篇讲的寄存器、缓存、内存,都有一个共同的毛病:一断电,里面存的东西就全没了。但你存进硬盘的照片,放十年再打开还在啊,这是怎么做到的?靠的是另外一套完全不同的物理。准确说是两套——机械硬盘用的是磁,固态硬盘用的是电子,原理天差地别,我们一个一个看。

机械硬盘是怎么用磁存数据的

把一块机械硬盘拆开,最关键的零件就两个:盘片和摆臂。盘片表面镀了一层磁性材料,分成一小块一小块,每一小块朝哪个方向磁化,就代表存的是 0 还是 1。盘片由电机带着转,我们平时说的 5400 转、7200 转,就是它一分钟转多少圈。

摆臂末端有个磁头,读和写都靠它。这里有个事情挺离谱的:磁头干活的时候并不碰盘片,它悬在盘片上方大概 15 纳米的地方掠过去。15 纳米是个什么概念?大概相当于一架客机贴着地面几毫米高速巡航,还不能蹭到地。

写数据好理解:磁头上有个电磁铁,给底下那一小块磁化,电流方向一换,磁化的方向就跟着换。早年间磁化方向是平躺在盘片上的(LMR),太占地方,早就淘汰了;现在都是立起来的(PMR),密度高得多。

读数据就讲究多了,它靠的是一个物理现象:有些材料放在不同的磁场里,电阻会跟着变。1988 年有人发现,把磁性和非磁性的薄膜一层一层叠起来,像肉夹馍那样,这个结构对磁场敏感得吓人,一点点磁场变化就能让电阻剧烈波动——这个效应叫巨磁电阻,发现它的两位科学家 2007 年还拿了诺贝尔物理学奖。

巨磁电阻让读取头可以做得又小又灵敏,磁道就能挨得更密,容量跟着往上走。但写入头偏偏缩不小——磁力不够,就磁化不动盘片。那怎么办呢?

厂商想出了一个损招,Redknot 管它叫「卧龙凤雏」:磁道照样做窄,宽写入头硬往里写。写这一条的时候会顺手把隔壁那条盖掉,那就先把隔壁读出来,写完这条再给它补回去。一条压着一条,像房顶上的瓦,所以叫叠瓦盘(SMR)。容量确实上去了,但写入速度稀烂,只适合干写得少、读得多的活。所以买盘的时候得留个心眼:商家只标 PMR 的话,你得多问一句,是正经的 CMR 还是叠瓦的 SMR,别被文字游戏坑了。

叠瓦盘:磁道故意做窄、宽写入头硬写,像屋顶瓦片一条压一条,写前先把隔壁磁道读出来、写完再补回去叠瓦盘:磁道故意做窄、宽写入头硬写,像屋顶瓦片一条压一条,写前先把隔壁磁道读出来、写完再补回去

再往后还有热辅助——拿激光把要写的那一小块先加热到 400 到 700 度,退了磁再写——还有微波辅助这些花活。靠着这些,单盘容量已经能捅破 18TB。

固态硬盘干脆把电子关起来

固态硬盘里没有任何会动的零件,它的思路是把电子直接锁起来。

一颗电子面前立着一堵绝缘的墙,按常理它是过不去的。但在足够强的电场下,它有一定概率直接「穿墙」过去,这个现象叫量子隧穿。利用这一点,可以造一个被绝缘层整个包住的导体,叫浮栅:加上强电场,电子隧穿进去;电场一撤,电子就被关在里面出不来了,断电放十年也跑不掉。把这个浮栅塞进 MOS 管的栅极底下,就是浮栅晶体管——浮栅里有没有电子,就是 1 和 0。

浮栅晶体管:电子在强电场下量子隧穿穿过绝缘墙,被整个包住的浮栅锁在里面,断电放十年也跑不掉浮栅晶体管:电子在强电场下量子隧穿穿过绝缘墙,被整个包住的浮栅锁在里面,断电放十年也跑不掉

一个浮栅只存 1 比特的叫 SLC,又快又耐用,就是贵。往里硬塞 2 比特叫 MLC,3 比特叫 TLC,4 比特叫 QLC,塞得越多成本越低,但读写越慢,也越娇气。这些浮栅晶体管串起来组成阵列,因为串联的接法跟与非门(NAND)一模一样,所以叫 NAND 闪存。名字里那个 Flash 是当年东芝的舛冈富士雄起的,他觉得这东西快得像闪电。后来 NAND 从平面的 2D 卷到往上叠的 3D,又是好一场厮杀,这段更细的NAND 演化、3D 堆叠和厂商厮杀,我在「存储为什么是门好生意」系列里专门拆过,这里就不重复了。

一块盘总会坏,那就多块盘组队

盘造得再好也会坏。那怎么办?把多块盘组成一个队,一块坏了别的顶上,这就是 RAID。

RAID 0 最莽:把数据切成块,轮流丢进几块盘,读写一起上,性能直接翻几倍。但任何一块盘挂掉,整组数据就全报废了,等于拿数据安全换速度。RAID 1 走的是反方向:同一份数据原样拷进每一块盘,坏一块,另一块上还有完整的一份。稳是稳,空间上很亏——两块 8TB 的盘只能当 8TB 用,一半纯粹在做备份。

争议最大的是 RAID 5,走的中间路线。它也把数据切块分散存,但每攒够一组,就用异或算出一个校验块一起存进去。异或是啥?你可以糙糙地理解成「不进位的加法」。这么干的好处是:任意坏掉一块盘,拿校验块加上其余盘上的数据,就能把丢的那一块反推出来,阵列照常跑,换上新盘还能整个重建回来。只牺牲一块盘的空间,就换来「容忍一块盘损坏」,听起来很划算吧?

RAID 5:数据切块分散存,每组算一个异或校验块;坏掉任意一块盘,用校验块加上其余盘就能反推出丢失那块,阵列照常跑RAID 5:数据切块分散存,每组算一个异或校验块;坏掉任意一块盘,用校验块加上其余盘就能反推出丢失那块,阵列照常跑

那个「重建失败率 99%」是怎么算出来的

RAID 5 有个流传很广的吓人说法:坏一块盘之后重建,失败率高达 99%。这个数不是瞎编的,是真能算出来的,咱先把账摆一遍。

硬盘读数据的时候,有极小的概率把某一个比特读错,这个事情有个名字,叫 URE,不可恢复读取错误。小到什么程度呢?某款盘的技术文档里写的是 10 的 14 次方分之一。听着确实很小,但换算一下,大概每读 12.5TB 数据就会摊上一次。而 RAID 5 重建的时候,幸存的几块盘要从头到尾完完整整读一遍。假设盘都是 12TB 的,这一路读下来,撞上至少一次 URE 的概率能飙到 96%。传统阵列一撞上 URE,重建就崩了。99% 的说法就是这么算出来的。

不过这笔账算得太狠了。一来,厂商文档里的 URE 是个很保守的最大值,实际没那么频繁——谷歌有篇论文统计过,硬盘五年之内最高的年故障率也就 8.6%。二来,这一点更关键:凭什么一个数据块出错,就要整块盘陪葬啊?问题出在阵列卡干活的那个 RAID 层,它只看得见数据块,看不见文件。撞上一个 URE,它根本不知道这块数据属于哪个文件、对你重不重要,所以企业级阵列卡的最优解就是一刀切:停下重建,喊你过来处理。严格说,URE 不是「让阵列崩溃」,是「让重建停下来等你救」,大部分数据其实都还在。像 ZFS 的 RAIDZ1 就更进一步,它能感知到文件这一层,撞上 URE 会直接告诉你哪个文件坏了,你按文件取舍就行。

真觉得不够保险,那就上 RAID 6:在 RAID 5 的基础上多算一组校验,能扛住两块盘同时挂,对 URE 的耐受也高一截。不过 RAID 换来的只是一层冗余,多花几块盘的钱,买一个「坏一两块盘不至于当场丢数据」——它替代不了真正的备份,该备份还是得备份。

数据存在哪儿,到这里就说完了。但数据要被 CPU 飞快地用起来,中间还隔着内存和显存这道关。这两个也是存数据的,不过取舍方向跟硬盘完全不一样,下一篇接着讲。


本文整理自 B 站 UP 主 Redknot-乔红 的硬件科普合集。叠瓦盘那个「卧龙凤雏」的吐槽、还有 RAID 5 那套 URE 算账,都来自他的原视频,讲得比我细。本系列只做主题重编与转写。

和 AI 讨论这篇文章
ChatGPTClaude

订阅更新

新文章发布时发到你的邮箱,不发别的。


© Xingfan Xia 2024 - 2026 · CC BY-NC 4.0