一、理解硬件

我们把文件存在磁盘上,OS是如何帮助我们精准的找到我们需要的文件?
在系统中,文件是一种目录结构,是树状的;我们可以通过**路径【绝对或者相对】**来定位文件;所以就需要文件在磁盘上的保存是合理、合法、合规
从磁盘的物理存储到逻辑寻址,从文件系统的组织管理到文件的软硬链接,每一个环节都决定了 Linux 对文件的高效操作。
1.1 磁盘、服务器、机柜、机房
- 机械磁盘是计算机中唯一的一个机械设备
- 磁盘在我们的体系结构中:属于外设
- 速度比较慢:离CPU比较远
- 容量大,价格便宜
例如:其实我们生活中的一些数据,很少查看。比如5、6年前的朋友圈,所以公司会把冷门数据分离,存在一些便宜且容量大的磁盘上。

磁盘盖上之后 , 很密封的 ~




- 我们可以把一个盘片想象成由若干个小磁铁组成的 , 被打磨光滑的;因为磁铁它有N/S两级,正好可以表示我们计算机世界的二进制 0/1 ;
- 计算机硬件的物理结构不同,但是最终都会做成两态的(网络的有无 ;波形的高低)
- 在高温环境下,磁盘会退磁; 所以机房一定是禁止高温 / 禁止火种的 , 防止磁盘退磁 , 数据丢失
1.2 磁盘物理结构

磁盘的核心物理组件包括盘片、磁头、磁头臂、主轴,其存储的核心单位是扇区 (512 字节),这是磁盘读写数据的最小物理单位,磁盘也因此被称为块设备。
- 磁道 :盘片表面的同心圆轨迹 ,从外圈到内圈编号 ,靠近主轴的磁道仅用于停靠磁头,不存储数据;
- 柱面 :所有盘片上相对位置相同的磁道 构成柱面,磁头臂上的所有磁头是 "共进退" 的,这是磁盘寻址的关键特性;(记住:共进退 != 共写入)
- 磁头 :每个盘片有上下两个盘面 ,每个盘面对应一个磁头,负责读写对应盘面的磁道数据。
1.3 磁盘的存储结构


扇区:是磁盘存储数据的基本单位 ,512字节,块设备

磁头在传动臂的带动下,共进退
b)图:有3片磁片,6面磁面

磁盘在写入数据的时候 , 是向 柱面 进行批量写入的!!!


问:512字节,写入一个扇区中 , 磁盘应该如何运动 ???
1. 寻道阶段:移动磁头到目标柱面(Cylind)
磁臂带着所有磁头一起径向移动 (共进退),直到目标磁道所在的柱面位置
2. 旋转等待阶段:等待目标扇区转到磁头(Head)下
- 盘片以恒定转速(如 7200 转 / 分钟)持续旋转。
- 磁头已经停在目标柱面后,等待目标扇区旋转到磁头正下方。
- 这段等待时间称为旋转延迟,平均为半圈旋转时间。
3. 数据写入阶段:磁头写入数据
- 当目标扇区(Sector) 完全对准磁头时,磁头在盘片旋转过程中连续写入 512 字节。
- 写入时磁头不径向移动,仅随盘片旋转完成扇区数据的磁化记录。
- 整个扇区写入完成后,磁头保持当前柱面或准备下一次寻道。
CHS地址定位:
文件 = 内容 + 属性 ; 内容是数据 , 属性(权限、创建时间、名字....)也是数据 ;对文件的存储,无非就是存储在一个又一个的扇区里 ,能定位一个扇区 , 也能定位多个扇区。


1.4 磁盘的逻辑结构
1.4.1 理解过程

磁带上面可以存储数据,我们可以把磁带"拉直",形成线性结构

那么磁盘本质上虽然是硬质的 ,**但是逻辑上 ,我们可以把磁盘想象成为卷在一起的磁带,**那么磁盘的逻辑存储结构我们可以类似于 :

定位一个扇区 , 我们就可以只用一个数字【数组下标】来表示 ;

1.4.2 真实过程
一个细节 : 传动臂上的磁头是共进退的

| 概念 | 编号起点 | 编号方向 / 规则 | 备注 |
|---|---|---|---|
| 磁道 | 0 | 盘片外圈 → 内圈递增 | 单盘面内的环形轨迹 |
| 柱面 | 0 | 与磁道号一致,外圈 → 内圈递增 | 多盘面同半径磁道的集合 |
| 物理扇区 | 1 | 单磁道内圆周方向递增 | CHS 寻址中使用 |
| 逻辑扇区 | 0 | 全磁盘线性递增(柱面→磁头→扇区) | LBA 寻址中使用,与 CHS 可转换 |
柱面是一个逻辑上的概念 , 其实就是每一个面上 , 相同半径的磁道逻辑上构成柱面。
所以 , 磁盘物理上分了很多面 , 但是 , 在我们看来 , 逻辑上 , 磁盘整体是由 " 柱面 "卷起来的~
磁道 :

柱面 :


- 柱面上的每个磁道 , 扇区个数都是一样的
- 这不就是二维数组
整盘:

- 整个磁盘不就是多张二维的扇形数组表
- 所有寻址一个扇区 : 先找到哪一个柱面 , 再确定柱面内哪一个磁道(其实就是磁头位置),再确定扇区 , 所以就有了CHS
- 之前学过C/C++的数组,在我们看来,其实全部都是一维数组

所以,每⼀个扇区都有一个下标,我们叫做LBA(Logical Block Address)地址,其实就是线性地址。所以 怎么计算得到这个LBA地址呢?

LBA把磁盘上的所有扇区从0开始顺序编号,形成一个一维的大数组。操作系统只需告诉磁盘"我要读LBA地址为1000的扇区",磁盘内部的固件会自动将其转换为实际的CHS位置。
所以 , OS只需要使用LBA就可以了 !
LBA地址转成CHS地址 , CHS地址 转换为LBA地址 , 谁做 ?
磁盘自己来做 (硬件电路 , 伺候系统)
操作系统不再需要关心磁盘有多少个磁头、多少个柱面,只需要把磁盘当作一个巨大的字节数组即可。
1.5 CHS&&LBA地址
CHS转成LBA:


LBA转成CHS:


二、引入文件系统
2.1 引入"块"概念
1. 硬盘是典型的 "块" 设备 , 支持随机读取
2. OS文件系统访问磁盘 , 不以扇区为单位 , 而是以 "块"为单位 , 一般是4KB(可以调整)
- 虽然扇区是磁盘的最小物理读写单位 ,但操作系统不会逐个扇区读取数据 ------ 效率过低。因此,文件系统引入了块(Block) 的概念,将连续的多个扇区划分为一个块 ,作为文件存取的最小逻辑单位。
- 最常见的块大小为 4KB(即 8 个 512 字节的扇区),块的大小在磁盘格式化时确定 ,且不可修改。块与 LBA 的转换关系也非常简单:
- 块号 = LBA ÷ 8
- LBA = 块号 × 8 + 块内扇区编号(n=0~7)

2.2 引入"分区"概念

柱面是分区的最小单位 , 我们可以利用参考柱面号码 的方式来进行分区 , 其本质就是设置每个区的起始柱面 和 结束柱面号码。把硬件上的柱面(分区)进行平铺,如下 :



