认识硬盘
总线协议接口

总线
计算机内部有很多电子元器件,为了让他们相互来往,就需要有真实的物理链路将他们连接,它们之间的通路就是总线,一个真实的物理线路(也就代表基于物理准则,承载数据也有上限)
- 总线:不同设备之间交互数据的通路
- 总线在单位时间内能传输的数据量就是带宽
电脑传输数据的总线有三种:
- SATA
- PCIE
- SAS(服务器常用的总线)
协议
电脑内部的一种规矩,规定了两个设备进行通讯时的若干法则。两个设备之间只有协议一致或者协议相容才能进行通讯
硬盘想要和其他组件沟通,就要数据协议做沟通、传输总线做媒介,然后物理接口让硬盘接入
目前的硬盘协议主要有四种,前三个大众民用,最后一个服务器用
- IDE:已经被淘汰不管
- AHCI
- NVMe
- SCSI
接口
就是物理层面的接口,将硬盘接入电脑,才能在后续和其他设备交流
目前主要接触到的硬盘接口有7个:前五个民用后两个服务器用的多

串联
协议总线接口,每一个部分的性能上线都会限制硬盘的发挥
- 有一个很好的总线和接口,但是没有好的协议,数据无法高效传输
- 有一个很好的协议,但是没有好的总线和接口,也就跑不动
不过厂商都会保证三者处于匹配状态,大部分时候我们不考虑协议和接口层面,重点看一块硬盘的总线的承载能力!
- 判断出一块硬盘的传输总线承载能力,就能判断一块硬盘的速率上限(指的是硬盘接口的速率上限,实际这块硬盘能跑多快,和本身的体质:设计用料有关系)
SATA总线
SATA总线比较普及的是SATA3.0 理论带宽6Gbps 8:10编码,Windows系统换算传输速度600MB/s
**SATA接口:**不论是固态还是机械,速率上限都无法突破550-600MB/s
**mSATA接口:**在老旧笔记本上常见,初衷是在SATA接口基础上缩小硬盘体积,不过在m.2接口出现后就没什么价值了,速率上限也是550MB/s
**M.2接口:**如果走SATA总线和AHCI协议,速率上限还是550MB/s
**SAS接口:**是从SATA接口改款而来,所以可以向下兼容SATA硬盘,走AHCI协议
PCIe总线
PCIe总线比较普及的是PCIe3.0和PCIe4.0
- PCIe3.0 x 4 ≈ 4GB/s
- PCIe4.0 x 4 ≈ 8GB/s
**SATA Express接口:**使用PCIe*2总线,可以走AHCI和NVMe协议,出现没两年就淘汰了
**M.2接口:**如果走PCIe总线,就可以走AHCI协议或者NVMe协议,速率上限由PCIe版本和长度决定(也就是PCIe?.0 x ?,大部分都是PCIe3.0x4=4GB/s)
M.2接口又有MKey和Bkey版本区别,不过不能通过外形判断总线和协议,具体的看说明书

**PCIe接口:**走PCIe总线,协议可以是NVMe(现在主流的PCIe接口硬盘都是这个协议,常见于超高性能等级或企业级硬盘)或者SCSI(早期企业级硬盘)
SAS总线
SAS总线比较普及的是SAS3.0,Windows系统换算传输速度1.2GB/s
**SAS接口:**走SAS总线SCSI协议,服务器用得很多,是从SATA接口改款而来,所以可以向下兼容SATA硬盘
**U2接口:**SAS接口基础上继续改款而来,可兼容SAS和SATA硬盘
举例子
学完各种协议、总线和接口之间的排列,混乱?没事的来看些例子:
西部数据SATA3 蓝盘 1T:550MB/s
SATA接口 SATA3.0总线 AHCI协议
铠侠TC10固态SATA3:550MB/s
SATA接口 SATA3.0总线 AHCI协议
三星860EVO M.2版本:550MB/s
M.2 B&M-Key接口 SATA3.0总线 AHCI协议
三星SM951 AHCI版本:4GB/s
M.2 M-Key接口 PCIe3.0x4总线 AHCI协议
三星XP941:2GB/s
M.2 M-Key接口 PCIe2.0x4总线 NVMe协议
西部数据SN500:2GB/s
M.2 B&M-Key接口 PCIe3.0x2总线 NVMe协议
西部数据SN750:4GB/s
M.2 M-Key接口 PCIe3.0x4总线 NVMe协议
三星980Pro:8GB/s
M.2 M-Key接口 PCIe4.0x4总线 NVMe协议
三星980ZET:4GB/s
PCIe接口 PCIe3.0x4总线 NVMe协议
Intel910:4GB/s
PCIe接口 PCIe2.0x8总线 SCSI协议
希捷银河4T:1.2GB/s
SAS接口 SAS3.0总线 SCSI协议
Intel P4510:4GB/s
U.2接口 PCIe3.0x4总线 NVMe协议
根据以上的例子,可以知道,想看一块硬盘的理论速率上限:看总线!
SATA3.0总线:550-600MB/s
PCIe2.0总线:0.5GB/s => PCIe2.0x8 4GB/s
PCIe3.0总线:1GB/s => PCIe3.0x4 4GB/s
PCIe4.0总线:2GB/s => PCIe4.0x4 8GB/s
PCIe5.0总线:4GB/s => PCIe5.0x16 64GB/s
SAS3.0总线:1.2GB/s
机械vs固态
机械硬盘工作原理
拆开机械硬盘的保护盖,可以看见四个主要部分:

工作时,磁头悬浮在磁盘盘面上几纳米,磁盘上有很多小格子,小格子里面又有很多小磁粒,也就是说磁盘是依靠改变里面很多磁粒的磁性,来存储数据的
- 磁头划过磁盘时,根据极性的不同,可以感应到每个格子的磁性,以此读取数据
- 而要写入数据时,可以让磁头产生磁场,改变当前磁盘里磁粒的极性
为了精准描述磁盘的位置,将一块磁盘根据磁道和扇区划分为若干扇形区域

比如说磁头想要了解第五磁道第七扇区的数据,就将磁头先移动到第五磁道,等第七扇区转过来就可以读取数据了
正因为机械硬盘利用磁粒的磁性存储数据,也称之为磁盘
固态硬盘工作原理
量子力学的实际应用
存储数据的基本单元是“浮栅晶体管”,它的主要组成部分是四个:
浮栅级
浮栅中存储一定的电子,数量高于一定值就是0,低于一定值或者没有就是1
控制级
P级
源级和漏级

当我们往控制级施加电压,如果源级和漏级导通,说明浮栅级存在一定量电子,当前晶体管就表示0;如果没有导通,说明浮栅级没有电子或少量电子,晶体管就表示1;这样就做到读取数据
如果要写入或者改写数据,往P级施加电压,就能从浮栅中析出电子;往控制级施加电压,就能将电子吸回浮栅
上述就是固态硬盘的工作原理
无数的浮栅堆叠在一块就可以存储大量的0/1,这个东西就是NAND颗粒,就像图书馆的书架一样,存储着无限的0101数据
固态硬盘除了NAND颗粒以外还有一个很重要的部分是主控,NAND颗粒是水库,要存储的数据是水,主控就是水坝,来控制水的流入流出

性能对比
相对于固态硬盘的电路结构,机械硬盘的机械结构存在很多弊端
延迟高
读取数据前要先移动磁头到对应的磁道,还要等待扇区转过来
而固态硬盘全程电子交互,电气信号速度超快
随机读写性能弱
如果数据是随机存放的,那就会在磁盘上各个角落存在,每次磁头都要进行多次的寻道和寻址
数据丢失与恢复
机械硬盘数据丢失
电脑是利用二进制储存和计算数据的,无论是电脑上的磁盘还是手机的闪存颗粒,也同样是利用二进制来存储数据
FAT表
当我们存储数据到介质中时,就是将介质中一块区域的0/1修改为对应我们数据的字符串0101等等。但是介质中那么多位置,为了表示我们的那个数据块,就用FAT表把整个数据占用的“位置”记录下来(说专业点就是:FAT表用来描述文件系统内存储单元的分配状态和文件内容的前后链接关系的表格)
有了FAT表之后,我们的磁盘才知道哪些数据合起来是一个文件
那磁盘的数据是如何恢复的?
当我们把系统内某个文件移动到回收站时,其实就是移动到一个“垃圾站文件夹”,本质上还是转移了文件。如果清空回收站的话,就会删除该文件在FAT表中的记录,但是!!!删除FAT表记录,并不代表着物理实际上磁盘介质中的0101发生变化,数据还是那个0101串,只不过没有了系统的FAT表记录
那为什么只删除FAT表的记录,而不是清空那一块区域为000呢?
- 因为机械硬盘的工作原理比较特殊,写入新数据时可以直接覆盖旧数据,所以删除旧数据时没必要把数据也归零,下一次的写入会覆盖的。如果删除FAT表之后还要把数据都改为默认的0000,就会占用一定的磁盘性能
数据恢复
想要找回机械硬盘删除的数据,其实找回FAT表的记录就可以,在没有进行下一次的写入之前,旧的数据的物理格式还是存在于磁盘介质之上
所以要做的就是利用软件,算法逆推原来的FAT表内容
- 数据找回软件也一大堆
退一万步来讲,就算FAT表无法恢复,比如磁隧道显微镜可以直接在硬盘上找0101的数据
数据的安全性来说,机械硬盘给你留更多后路,但是为了避免丢失,应该做的是多多备份而不是等丢失了想着机械硬盘好恢复再来复原
固态硬盘数据丢失
和机械硬盘不同的是,固态硬盘写入新数据时,必须保证那一块区域为空,如果不是空也会做擦除操作,也就是自动删除原数据的0101数据,恢复默认0000
TRIM回收指令
当我们要写入新数据的时候,如果检测到那一块区域还有老数据,没有恢复到000时不能进行新的写入,但是每次都写入前再擦除太影响性能,所以有了TRIM回收指令
当系统检测到当前没有进行数据读写的时候,会在空闲时做垃圾的“清理工作”,当旧数据被删除完成后,那一块区域就空了,下一次的写入性能就会很好
数据恢复
如果电脑开启了TRIM回收指令,当删除旧数据后,系统也执行了TRIM擦除,那就是在物理意义上都删除数据了
据说擦除后的数据也有人会恢复~
