前言
学习 Linux Ext2/Ext3/Ext4 文件系统,不能直接上手 inode、块组。文件系统运行在磁盘硬件之上,必须先搞懂磁盘物理结构、逻辑寻址模型。本文按照目录脉络,逐层梳理磁盘硬件体系,为后续 Ext 文件系统原理打下底层基础。
1. 硬件层级:磁盘 → 服务器 → 机柜 → 机房
从最小存储单元向上分层:
- 磁盘(硬盘) :最小物理存储载体,分为机械硬盘 HDD、固态硬盘 SSD;服务器依靠磁盘持久化存储数据。在机房中使用的都是磁盘,第一是因为比较便宜,还有可以存储更多的空间

- 服务器 :多块磁盘安装在同一台主机,搭载 CPU、内存、网卡,对外提供服务。

- 机柜 :机房中标准化机架,一台机柜可以堆叠数十台服务器,统一供电、布线。

- 机房 :大量机柜集中部署,配套空调、UPS 不间断电源、消防、网络设备,提供稳定运行环境。

机房三问
一、为什么会有机房?
互联网业务需要大量服务器 7×24 小时持续运行。 个人电脑无法满足:稳定供电、恒温环境、大带宽、不间断运维、安全防护。 于是把成千上万台服务器集中放置,统一配套供电、制冷、网络设施,机房(数据中心)就此诞生。中小企业无力自建,可租用第三方 IDC 机房;体量巨大的大厂,选择自建大型数据中心。
二、为什么大多是大公司自建机房?
-
成本门槛极高 土地、机房土建、空调、UPS、发电机组、光纤带宽、运维团队,前期投入数十亿,小企业负担不起。
-
业务规模需求 大厂海量用户、海量数据,需要数万、数十万台服务器,租用第三方机房长期成本更高,自建更划算。
-
数据安全与自主可控 核心业务、用户敏感数据,放在自有机房,不受第三方托管服务商约束,合规可控。
-
定制化需求 可以按需设计供电、制冷、机柜布局,适配 AI 算力、存储集群等特殊硬件。
三、大厂数据中心偏爱选址偏远地区
- 电费是最大开销 服务器空调常年运转,电费占运营成本大头。偏远地区水电、风电等清洁能源充足,电价更低。
- 土地成本低廉 大型机房占地极大,一线城市土地昂贵;偏远区域地价便宜。
- 散热自然优势 北方高海拔、寒冷区域,可利用自然冷空气冷却,减少空调耗电(自然冷却),大幅省电。
层级关系:磁盘属于服务器硬件,服务器收纳于机柜,机柜集中部署在机房。
1-2 磁盘物理结构(机械硬盘 HDD)
机械硬盘核心物理组件:
- 盘片(Platter):圆形磁性薄片,正反两面均可存储数据;一块硬盘可以包含多张盘片。
- 磁头(Head):读写盘片上的数据,一个盘面对应一个磁头;读写时磁头悬浮在盘面上方,不接触盘面。
- 主轴电机:带动所有盘片高速旋转(常见 7200 转 / 10000 转)。
- 磁臂:承载磁头,负责径向移动,切换不同同心圆轨道。
核心概念:
- 磁道 (Track):盘面上一圈一圈同心圆。
- 扇区 (Sector) :磁道被切分出最小物理单元,传统磁盘扇区大小 512 字节,现代 4K 扇区。
- 柱面 (Cylinder):所有盘片上半径相同的磁道,构成一个柱面;磁臂移动一次定位一个柱面。

💡 机械硬盘读写开销:寻道时间(磁臂移动) >> 旋转等待时间 >> 数据传输时间。随机读写性能远弱于顺序读写。
1-3 磁盘存储结构
数据在磁盘上的组织层次(由大到小): 磁盘 → 柱面 → 磁道 → 扇区
- 一块硬盘由若干柱面构成;
- 单个柱面对应所有盘片同一半径磁道;
- 单条磁道分割为大量扇区;
- 扇区 = 磁盘最小物理读写单位,硬件层面无法读写小于 1 个扇区的数据。
1-4 磁盘逻辑结构
操作系统不会直接操作原始磁道、扇区,在内核和磁盘硬件之间建立逻辑抽象。
1-4-1 理想化理解过程
简化模型: 操作系统把整块磁盘视为连续线性地址空间。上层程序读写文件 → 文件系统转换 → 访问磁盘连续扇区。 理想模型:磁盘就是连续编号的块,顺序读写效率一致,不用关心物理磁道、柱面。
1-4-2 真实硬件访问过程(机械硬盘)
真实流程存在物理限制:
- 应用发起读写请求;
- 文件系统计算需要访问哪些磁盘块;
- 块设备驱动将块编号转换为磁盘地址;
- 磁盘执行:磁臂移动(寻道)→ 等待扇区旋转到磁头下方 → 读写扇区。
痛点:随机访问需要频繁移动磁臂,寻道开销巨大。 这也是文件系统设计优化的核心动机:尽量让文件数据连续存放,减少磁头移动。
1-5 CHS 寻址 && LBA 寻址
两种磁盘寻址方式,用来定位磁盘上唯一扇区。
CHS 寻址(老式寻址模式)
- C:Cylinder 柱面号
- H:Head 磁头号
- S:Sector 扇区号 通过
(柱面,磁头,扇区三维坐标定位扇区。 局限:寻址范围有限,只能支持小容量硬盘,现代系统基本淘汰。
LBA 寻址(现代主流寻址)
LBA (Logical Block Address) 逻辑块寻址 抛弃柱面、磁头、扇区物理概念,把磁盘所有扇区从头到尾分配连续线性编号 LBA0、LBA1、LBA2......。 操作系统只需要传入 LBA 编号,磁盘固件自动翻译成底层物理位置。 优点:
- 寻址空间巨大,支持大容量硬盘;
- 屏蔽硬件物理细节,操作系统更容易管理磁盘。
补充:内核中,操作系统继续在 LBA 之上封装块(block),Linux 默认块大小 4096 字节,由多个物理扇区组成,作为文件系统操作单位。

1.文件=内容+属性,在linux系统,内容和属性是分开存的
2.一个组里面要有文件数据和管理数据的信息
a.写入管理信息的过程就叫做写入文件系统
b.格式化就是重新写入管理信息



但是文件的文件名不属于inode的属性
inode是128字节
理论上一个文件一个inode
bash
ls -l -i

cpp
struct ext2_inode {
__u16 i_mode; // 文件类型、权限
__u16 i_uid; // 用户ID
__u32 i_size; // 文件大小(低32位)
__u32 i_atime; // 访问时间
__u32 i_ctime; // 创建/属性修改时间
__u32 i_mtime; // 修改时间
__u32 i_dtime; // 删除时间
__u16 i_gid; // 组ID
__u16 i_links_count; // 硬链接计数
__u32 i_blocks; // 占用块数量
__u32 i_flags; // 文件标志
__u32 i_reserved1;
// 核心:块指针数组(12直接 + 1一级 + 1二级 + 1三级)
__u32 i_block[15];
__u32 i_generation;
__u32 i_file_acl;
__u32 i_dir_acl;
__u32 i_faddr;
__u8 i_frag;
__u8 i_fsize;
__u16 reserved2[3];
__u32 reserved3[2];
};
找文件时
先找inode编号->inode table里面
属性里面有i_blocks ->datablocks的那个块,
实现属性和文件内容的相关链接


如何删文件
- inode Bitmap :对应 bit 置为
0,标记 inode 空闲,可以分配给新文件 - Block Bitmap :遍历 inode 内部
i_block[]所有数据块指针,每个对应 bit 置0,回收所有数据块 - 填写 inode 的
i_dtime(删除时间)
拷贝 = 需要大量读写数据块;删除 = 只修改少量元数据(位图、inode、目录项),完全不读写文件本体数据。


超级块本身是整个文件系统唯一的全局元数据,逻辑上只有一份;
为了防止损坏,EXT2 会在多个块组存放超级块副本 ,但不是每一个块组都一定存在副本。