Linux学习怎么能不知道电脑的重要组成硬盘的知识呢?
前文有学习文件系统的概念。介绍了Linux组织文件的方式和文件的分类。
但是最初的时候,最先有的并不是文件系统。而是磁盘。
要我说,最关键的那句话就是:分区存在自己的文件系统。而磁盘存在自己的分区。
磁盘
我们一般指的是在linux中以sd开头的设备名称的存储设备。
很早之前有IDE磁盘,说实在的,我到目前为止并没见过这种磁盘,或者说见过但是根本不认识。。
在学习计算机组成的时候,学过这方面的知识,磁盘,磁道,柱面,扇区,磁头。
ai就能解释的很好:
磁盘(Disk): 磁盘是存储数据的物理介质,通常由一个或多个圆形的盘片组成。每个盘片由磁性材料制成,可以存储二进制数据。
磁道(Track): 磁盘上的每一个盘片都被划分为多个同心圆,每个圆称为一个磁道。磁道是磁盘上信息记录的路径,数据就存储在这些磁道上。
柱面(Cylinder): 柱面是指硬盘上所有盘片上相同编号的磁道构成的垂直柱状区域。例如,如果硬盘有三个盘片,每个盘片上编号为5的磁道会构成一个柱面。
扇区(Sector): 扇区是磁道上的一个分割区域,是磁盘可寻址的最小数据单元。每个扇区可以存储一定量的数据,通常是512字节,但现代硬盘可能有更大的扇区大小,如4KB。
磁头(Head): 磁头是硬盘驱动器用来读写磁盘上数据的部件。每个盘片都有一个对应的磁头,磁头悬浮在磁盘表面之上,但不接触磁盘,以避免磨损。
HDD
磁道这些概念,这里一般指的是hdd也就是机械硬盘。由于其结构的原因,会导致其有一些特点,比如随机读写慢,抗震性能差等等。很容易就能想明白,毕竟它是用一个磁头在磁道上读取的嘛。
SSD
ssd指的是我们常说的固态硬盘,和hdd的本质区别是存储数据的方式。使用的内部结构不再是磁盘磁道,而是闪存芯片。同样的,由于它们的内部结构特征,很明显它也有自己的特点。
首先是随机读写性能提高,然后是读写速度整体也有所提升,这是我们大部分人都知道的。
和hdd比较缺点就是过于昂贵,还有读写次数的限制。闪存单元有一定的擦写次数限制,每次擦写都会逐渐损坏存储单元,最终导致单元失效。
不过目前已经在各种技术的加持以及国产的发挥下,有很大的缓解。目前来说我认为ssd更符合大部分个人电脑的需要。
目前来说,如果你要选购硬盘设备,最具性价比的配置是512g的固态加上1t的机械硬盘。如果你是一个游戏玩家,也可以直接购买1t固态。
QLC,TLC是什么
还有不怎么常见的slc,mlc,其实都是闪存的一种技术。
闪存由许多存储单元组成,每个单元可以存储一位、两位、三位或四位数(SLC, MLC, TLC, QLC)
这样你也许就懂了,也就是说,1tb的qlc耗费的单元数目只有tlc的一半。同样的单元数目,存更多的数据就意味着同一个单元要承受更多次数的读写。(闪存单元有一定的擦写次数限制,每次擦写都会逐渐损坏存储单元,最终导致单元失效)
目前对于普通用户来说,tlc是比较优秀的选择,qlc一般价格上比较优惠,如果你确实没有很大的频繁写入的需求,也许qlc很适合你。
至于mlc,slc,对于有稍大容量的需求来说过于昂贵了。
不过如果拥有一个mlc的u盘作为随身存储设备也许很可靠。
Sata是什么
我们都知道usb是一种接口,也对应一个协议,sata也是。sata协议:
- SATA 1.0(2003年):数据传输速率达到1.5 Gbps(150 MB/s)。
- SATA 2.0(2004年):数据传输速率达到3 Gbps(300 MB/s)。
- SATA 3.0(2009年):数据传输速率达到6 Gbps(600 MB/s)。
- SATA 3.2(2013年):引入了SATA Express,理论上支持最高16 Gbps的传输速率,但实际使用中通常限制在8 Gbps。
sata不仅仅是一个协议,还是一种接口。
m.2
一种外形规格,或者说一种硬盘的接口类型。支持的协议包括sata也包括pcle。
支持不同长度的模块(如 2242、2260、2280),数字分别代表宽度(22mm)和长度(如 80mm)
PCLE
一种通道技术,不仅仅用于磁盘的连接,网卡之类,乃至于显卡内也有这一通道。
可以理解成类似于sata协议中管理数据通道的用处但是比sata快。
nvme
NVMe 是一种专为高速闪存存储设计的通信协议,运行在 PCIe(Peripheral Component Interconnect Express) 通道上。可以理解成基于pcle提供的通道进行传输的存储传输协议。
交通类比
SATA 接口 传统公路,只适合普通汽车(HDD、SATA SSD),速度有限,规则传统(AHCI)。
PCIe 接口 多车道高速公路,支持高性能交通,但需要专用规则(如 NVMe)才能高效利用。
NVMe 协议 高速公路专用的交通规则,减少等待时间,支持大量并发,专为现代高速车辆设计(SSD)。
M.2 接口 一个收费站,可以连接传统公路(SATA)或高速公路(PCIe),具体路径取决于车辆类型(SSD 类型)。
磁盘分区
一个硬盘,你刚刚拿到手,是一个完完全全的空白状态。
怎么使用呢?我们知道一个电脑启动,有一个叫引导程序的阶段,引导程序正是存在硬盘之中的。
很容易想到,引导程序存在系统能够立刻找到的地方才对。那就是硬盘的最开始。
接下来呢?我们怎么管理磁盘呢?如果按照最简单的想法,硬盘直接作为存储设备,作为一个整体,似乎也是可以的,但是实在是浪费,也不好管理。
比如我要安装多个操作系统,就需要多个引导程序,这怎么办?
比如我要使用不同类型的文件系统,这又该怎么办?
和我们需要文件系统管理文件几乎是一个道理,如果磁盘不用一个好的方式管理,就很难得到全面的利用。
磁盘分区正是对磁盘进行管理的重要手段。
MBR分区
MBR是什么?master boot record。
一种经典的分区方式。磁盘最开始的第一个扇区,总共512字节。虽然现在存在一个扇区4k字节的情况。但是当时还是普遍为512.
这种分区有两个重要的地方:
第一个就是所谓的引导程序区域,MBR区域。最多可以占第一个扇区512的前446字节空间。
第二个就是分区表,占剩下的64字节。
64字节最多记录4个分区,一个分区要占16字节。除了要记录的是分区的起始扇区和结束扇区以外还要标注一系列其他的信息,实际存储扇区起始和结束的只有3-4字节,也就是24位到32位。这也是限制了MBR分区能够允许磁盘的大小。
也就是说MBR实际包含两种:
chs地址字段记录:磁道磁头和扇区。CHS:Cylinder-Head-Sector
LBA地址记录:Logical Block Addressing。逻辑块地址
主要是为了兼容使用不同地址记录的设备。
MBR还有一个扩展分区的理念。
分区表的16字节中可以标识分区的类型(例如:0x07 为 NTFS,0x0F 为扩展分区)。
如果标识位扩展分区:
也就是在主分区表中存在一个分区的分区类型被指定为扩展分区,之后扩展分区内部可以进行逻辑分区。
逻辑分区也有一个分区记录在最前端,但是并不是全部逻辑分区的信息,反倒像一个链表。
理解:
首先是MBR,MBR最多记录四个分区.
如果我们选中一个作为扩展分区。那么就会在这个分区内部有新的分区方法,叫做逻辑分区。
逻辑分区的管理不像我们主分区。主分区使用MBR分区表完全表示,而逻辑分区由于数目不固定,我们采用的是类似链表的方法。
扩展分区内,一开始就是一个逻辑分区表项EBR,其中包含两个分区的分区记录(扩展分区记录),EBR和MBR类似,但是只使用两个表项。也就是32字节。
每个表项也记录了以下信息。
- 起始 LBA 地址:逻辑分区在扩展分区中的起始地址。(在扩展分区中,这一项表示的是相对地址)
- 分区大小:逻辑分区的大小,以扇区为单位。
- 分区类型:逻辑分区的类型(例如,FAT32、NTFS、ext4 等)。
为什么使用两项,第一项用来记录这个逻辑分区,第二项用来记录下一个逻辑分区。(这可不就是链表吗?)
举个例子:
如果我现在有一个主分区一个扩展分区,扩展分区内有三个逻辑分区。
那么硬盘里首先是一个MBR,存着两个分区的信息,其中一个分区的分区类型为扩展分区。
然后这个扩展分区内一开始就是一个EBR1,其中有两个项,分别指向当前逻辑分区,和下一个逻辑分区,下一个逻辑分区在表中的分区类型也是扩展分区。
下一个逻辑分区的开头是一个EBR2,中间也是两项,指向逻辑分区2和下一个逻辑分区3。
扩展分区是针对于MBR来说的,而逻辑分区是在扩展分区内真正被读取作为计算机一个分区的部分。
EBR结构类似MBR,但是在每一个逻辑分区开头都存在。指向自己和下一个逻辑分区。
lba是什么?chs已经解释过了,是给古早设备读取的找到磁盘上指定位置的东西,后来的操作系统都使用LBA来寻找地址。
到这就理解MBR怎么分区了,总而言之,这是一个很经典的分区方法,最重要的就是第一个扇区。
GPT分区
GUID partition table。
LBA
LBA和chs在MBR分区中都有提到,但是关键是chs的磁头磁道这些概念在其他设备上难以适用,或者难以通用。
同时有些容量巨大的盘,它的扇区大小是4KB。为什么使用这个大小的扇区,有很多影响因素。
所以为了不同设备兼容,这里的LBA是一个逻辑上的地址。代表的是逻辑上的区块地址。
GPT分区主要是为了解决一些MBR的缺陷以及适应新的计算机引导启动技术而生的。
GUID
GUID 是 全局唯一标识符(Globally Unique Identifier),它用于标识每个分区的类型或 GUID 分区表的一个特定分区。
MBR只用了第一个512字节来存储分区信息。
GPT则不然,使用了多个LBA来存储。
- LBA 0:MBR。虽然 GPT 替代了传统的 MBR 分区表,但仍保留了一个 MBR,用于兼容旧系统和 BIOS 启动(特别是对于混合启动模式的硬盘)。
- LBA 1:GPT 主头,包含 GPT 的基本信息。
- LBA 2:分区表开始的位置,通常占用32个LBA。
- LBA33:最后一个分区表位置。
- 分区数据区:硬盘上的实际数据部分,存储了每个分区的数据。
- LBA N-33:GPT 备份分区表。
- LBA N:GPT 备份头,位于磁盘的最后一个扇区。
主头
GPT 主头存储在硬盘的 第一个扇区(即 LBA 1)。主头包含有关 GPT 的基本信息,例如:
- 硬盘的 GUID:每个硬盘都有一个唯一的 GUID(全局唯一标识符)。
- 分区表的起始位置:指向分区表的起始位置。
- 分区表的大小:GPT 允许更多的分区,因此它会记录分区表的大小。
- 分区数量:硬盘上可以包含多少个分区条目。
- 校验和(CRC32):用于验证 GPT 主头的完整性。
分区表中:
分区表(Partition Entries)
分区表存储着硬盘上的所有分区的信息,分区表条目包含:
- 分区类型 GUID:表示该分区的类型(例如,EFI 系统分区、Linux 分区、Windows 操作系统分区等)。
- 分区唯一 GUID:唯一标识一个分区。
- 起始 LBA 和结束 LBA:指定该分区的开始和结束扇区地址。
- 分区属性:一些额外的属性,如只读标志等。
- 分区名称:分区的名称,通常是操作系统可见的分区标签。
最后我们理解以下:
一个GPT分区占用空间用了34加备份34,一共68个LBA。
第一个LBA是兼容MBR的引导程序区,以及原本存放MBR分区表的位置是一个填了特殊字符的标志。(让只能读懂MBR分区识别,从而不让不兼容GPT的设备使用)用来保护磁盘。
LBA1为表头,记录了分区表本身的大小和位置,还记录了备份分区的位置,以及校验码。
之后是分区表,每个分区用128字节描述,一个LBA(512字节)可以存放4个,32个LBA存放128个分区,当然这个可以扩展。
每个表项空间用64位也就是8字节来表示开始和结束的扇区号码。这比MBR'的32位大了太多。
之后磁盘最后是备份数据。使得我们可以在GPT头或者分区表损坏时恢复。
如果扇区是4KB
那么一个扇区就能存放32个表项。只需要32/8=4个LBA就能存放原本的分区表了。
是不是理解了呢?大家可以关注我一起学习。