1. 理解硬件
1.1 磁盘、服务器、机柜、机房
- 磁盘:是计算机中用于存储数据的核心设备,主要分为机械硬盘(HDD)和固态硬盘(SSD)两大类。HDD 通过磁头在高速旋转的磁性盘片上读写数据,由盘片、磁头、马达等机械部件组成,容量大、成本低,但速度较慢、怕震动。SSD 基于闪存芯片,无机械部件,速度快、抗震、低功耗,但容量相对较小、成本较高。
- 服务器:是一种高性能计算机,专门为其他设备提供数据、服务或资源,通常运行在网络环境中,承担存储、计算、应用托管等任务。可按形态、用途、架构等分类,关键组件包括大容量 ECC 内存、高速 SSD 或大容量 HDD、万兆或更高网卡等,还常配备冗余电源和 RAID 磁盘阵列。
- 机柜:是一种标准化框架结构,用于集中安装和保护服务器、网络设备等 IT 硬件,提供设备安装、散热管理、布线整理、物理安全等功能。按结构可分为开放式机架和封闭式机柜,按尺寸宽度标准为 19 英寸,高度以 U 计算,按用途可分为服务器机柜、网络机柜等。
- 机房:是专门用于集中存放和管理服务器、网络设备及存储设备的物理空间,为 IT 设备提供稳定运行所需的电力、制冷、安防和网络环境。按规模可分为微型机房、中小型机房、大型数据中心,按用途可分为企业机房、IDC、灾备机房等。
1.2 磁盘物理结构
以机械硬盘为例,其物理结构主要包括盘片、磁头、马达、控制电路、缓存等部件。盘片是存储数据的介质,一般由坚硬金属材料制成并涂以磁性介质;磁头用于读写盘片上的数据;马达带动盘片高速旋转;控制电路负责控制磁头的移动和数据的传输等;缓存用于临时存储数据,提高数据读写性能。固态硬盘的物理结构则主要由闪存芯片、主控芯片、缓存芯片(部分 SSD 有)等组成。

1.3 磁盘的存储结构
磁盘(这里主要以机械硬盘为例)的存储结构是实现数据存储与读取的基础,可从磁道、扇区、柱面等核心概念,以及数据定位方式来理解。
一、核心存储单位
- 磁道(Track):磁盘盘片高速旋转时,读写磁头在盘片表面划出的同心圆轨迹就是磁道。盘片最外圈的磁道编号为 0,从外向内磁道编号依次递增。磁道之间有间隙,避免数据干扰,且靠近主轴的同心圆磁道(最内圈)主要用于停靠磁头,不存储数据。
- 扇区(Sector) :每个磁道被等分为多个弧段,每个弧段就是一个扇区。扇区是磁盘读写数据的最小单位,通常大小为 512 字节(部分现代磁盘也支持 4096 字节等更大容量的扇区)。
- 柱面(Cylinder) :硬盘通常由多个重叠的盘片组成,所有盘片上相同编号的磁道共同构成一个圆柱形的空间,即柱面。柱面的数量与单个盘片上的磁道数量相等。

二、多盘片结构与磁头
一个盘片通常有上下两个盘面(如盘片 0 有面 0、面 1 两个盘面),每个盘面对应一个独立的读写磁头。所有磁头都连接在同一个传动臂上,因此磁头只能 "共进退",移动时会同时定位到各个盘片的相同磁道位置。

三、数据定位方式(CHS 寻址)
要定位磁盘上的一个扇区,需通过 磁头(Head)、柱面(Cylinder,对应磁道)、扇区(Sector) 三者配合,即 CHS 寻址方式:
- 定位磁头:确定使用哪个盘面的磁头来进行读写操作;
- 确定柱面(磁道):让传动臂带动磁头移动,定位到目标磁道所在的柱面;
- 定位扇区:在目标磁道上,等待盘片旋转至目标扇区经过磁头下方,即可进行数据读写。

不过,CHS 寻址对磁盘容量支持有限(系统用 8bit 存磁头地址、10bit 存柱面地址、6bit 存扇区地址,结合每个扇区 512 字节,最大支持容量较小),现代磁盘更多采用 LBA(逻辑块寻址)方式,但 CHS 仍是理解磁盘存储结构的基础逻辑。
1.4 磁盘的逻辑结构
磁盘的逻辑结构是从软件视角对磁盘存储的抽象,方便系统进行数据管理与寻址,可从理解过程 和真实过程两方面剖析。
1.4.1 理解过程
我们可以用 "磁带" 来类比理解磁盘的逻辑结构:磁带能存储数据,若把磁带 "拉直",就形成了线性的存储结构,数据单元依次排列。
磁盘虽然是硬质的物理设备,但逻辑上可想象成 "卷起来的磁带"。磁盘的基本存储单元是扇区,将这些扇区按顺序线性排列,每个扇区就像数组的一个元素,拥有一个线性的地址标识,这就是LBA(逻辑块地址)。
比如,把多个盘片的扇区依次串联,就如同把多段 "磁带" 拼接成一条长带,每个扇区都有唯一的 "数组下标" 式的 LBA 地址,系统通过这个线性地址就能快速定位数据。

1.4.2 真实过程
从真实的硬件交互与逻辑抽象来看,磁盘的逻辑结构围绕柱面、磁头、扇区(CHS)和LBA展开,且存在 "传动臂磁头共进退" 的关键细节:
-
磁头与柱面的逻辑关联 :传动臂上的所有磁头是 "共进退" 的,即磁头移动时,会同时定位到各个盘片的相同半径磁道上。而所有盘片上相同半径的磁道 ,在逻辑上共同构成了柱面。也就是说,磁盘物理上分为多个盘面,但逻辑上,我们可以把磁盘看作是由 "柱面""卷起来" 的存储体。
-
磁道与扇区的逻辑形态:
- 单个盘面的某一磁道展开后,扇区是按顺序排列的,如同一维数组,扇区依次分布在磁道上。
- 整个磁盘所有盘面的同一个磁道(即一个柱面)展开后,不同盘面的同磁道扇区整齐排列,此时磁盘的逻辑结构类似多张二维的扇区数组表(甚至可抽象为三维数组,维度对应柱面、磁头、扇区)。并且,柱面上每个磁道的扇区数量是相同的。

- 寻址与 LBA 的作用:要寻址一个扇区,原本需先找柱面,再确定柱面内的磁头(对应盘面),最后定位扇区,即通过 CHS 方式寻址。但从逻辑简化角度,所有扇区可线性编号形成 LBA 地址(如同一维数组下标)。系统只需使用 LBA 地址,磁盘自身的固件(硬件电路、伺服系统等)会负责完成 LBA 地址与 CHS 地址的相互转换 ------ 将 LBA 转换成 CHS,实现对物理扇区的访问;也能把 CHS 转换为 LBA,满足系统线性寻址的需求。
1.5 CHS && LBA 地址
CHS转成LBA:
磁头数*每磁道扇区数 = 单个柱⾯的扇区总数
LBA = 柱⾯号C*单个柱⾯的扇区总数 + 磁头号H*每磁道扇区数 + 扇区号S - 1
即:LBA = 柱⾯号C*(磁头数*每磁道扇区数) + 磁头号H*每磁道扇区数 + 扇区号S - 1
扇区号通常是从1开始的,而在LBA中,地址是从0开始的
柱⾯和磁道都是从0开始编号的
总柱⾯,磁道个数,扇区总数等信息,在磁盘内部会⾃动维护,上层开机的时候,会获取到这些参
数。
LBA转成CHS:
柱⾯号C = LBA // (磁头数*每磁道扇区数)【就是单个柱⾯的扇区总数】
磁头号H = (LBA % (磁头数*每磁道扇区数)) // 每磁道扇区数
扇区号S = (LBA % 每磁道扇区数) + 1
"//": 表⽰除取整
所以:从此往后,在磁盘使用者看来,根本就不关心CHS地址,而是直接使用LBA地址,磁盘内部自⼰转换。所以:
从现在开始,磁盘就是⼀个 元素为扇区 的⼀维数组,数组的下标就是每⼀个扇区的LBA地址。OS使⽤磁盘,就可以用⼀个数字访问磁盘扇区了。
2. 引入文件系统
2.1 引入"块"概念
其实硬盘是典型的"块"设备,操作系统读取硬盘数据的时候,其实是不会⼀个个扇区地读取,这样
效率太低,而是⼀次性连续读取多个扇区,即⼀次性读取⼀个"块"(block)。
硬盘的每个分区是被划分为⼀个个的"块"。⼀个"块"的大小是由格式化的时候确定的,并且不可
以更改,最常见的是4KB,即连续八个扇区组成⼀个 "块"。"块"是⽂件存取的最小单位。
注意:
磁盘就是⼀个三维数组,我们把它看待成为⼀个"⼀维数组",数组下标就是LBA,每个元素都是扇
区
每个扇区都有LBA,那么8个扇区⼀个块,每⼀个块的地址我们也能算出来。
知道LBA:块号 = LBA/8
知道块号:LAB=块号*8 + n. (n是块内第几个扇区)
文件系统使用磁盘块,是以4KB为单位的。
2.2 引入"分区"概念
其实磁盘是可以被分成多个分区(partition)的,以Windows观点来看,你可能会有⼀块磁盘并且将它分区成C,D,E盘。那个C,D,E就是分区。分区从实质上说就是对硬盘的⼀种格式化。虽然Linux的设备都是以文件形式存在,但是磁盘分区的核心逻辑与 Windows 有共通之处,且和磁盘物理结构(柱面等)紧密关联。
柱面是分区的最小单位,我们可以利用参考柱⾯号码的方式来进行分区,其本质就是设置每个区的起始柱面和结束柱面号码。 此时我们可以将硬盘上的柱面(分区)进行平铺,将其想象成⼀个大的平面,如下图所示:
柱⾯大小⼀致,扇区个位⼀致,那么其实,只要知道每个分区的起始和结束柱面号,以及每个柱面包含的扇区数,就能清楚该分区的大小,也能弄明白对应的 LBA(逻辑块地址)是多少了。

2.3 引入"inode"概念
之前我们说过 文件=数据+属性 ,我们使用 ls -l 的时候看到的除了看到文件名,还能看到文件属性。
bash
[root@localhost linux]# ls -l
总⽤量 12
-rwxr-xr-x. 1 root root 7438 "9⽉ 13 14:56" a.out
-rw-r--r--. 1 root root 654 "9⽉ 13 14:56" test.c
使用ls -l
命令显示文件信息时,每行输出所包含的 7 列信息分别具有以下含义:
- 模式 :10 个字符,首字符表文件类型(
-
普通文件、d
目录等),后 9 个分 3 组(所有者 / 所属组 / 其他用户),r
读、w
写、x
执行,无权限用-
。- 硬链接数:指向该文件的硬链接数量,普通文件初始为 1,目录至少为 2。
- 文件所有者:拥有该文件的用户名,对文件权限最高。
- 组:文件所属的用户组,方便管理组内用户权限。
- 大小:文件大小(字节),目录显示其元数据占用空间。
- 最后修改时间:文件内容最后一次修改的时间。
- 文件名:文件 / 目录的名称,特殊字符会用双引号包裹。
使用ls -l时,ls -l会读取存储在磁盘上的文件信息,然后显示出来
其实这个信息除了通过这种方式来读取,还有⼀个stat命令能够看到更多信息
到这我们要思考⼀个问题,文件数据都储存在"块"中,那么很显然,我们还必须找到⼀个地方储存
文件的元信息(属性信息),比如⽂件的创建者、⽂件的创建⽇期、⽂件的⼤小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
在ls -li
命令的输出中,最前面的数字是inode 编号(索引节点编号)。
每⼀个⽂件都有对应的inode,⾥⾯包含了与该文件有关的⼀些信息。为了能解释清楚inode,我们需要是深⼊了解⼀下文件系统。
注意:
Linux下,文件的内容和属性是分开储存的
Linux下,保存文件属性的集合叫做inode,⼀个⽂件,⼀个inode,inode内有⼀个唯⼀
的标识符,叫做inode号