Linux:Ext系列⽂件系统(二)

我们每天在电脑上创建、编辑、删除文件,却很少思考:这些文件是如何被磁盘 "记住" 的?为什么删除文件后空间能回收?其实这一切的背后,都是文件系统在默默工作。它就像磁盘的 "管理员",负责组织、管理和调度磁盘上的所有数据。今天我们就从最基础的 "块、分区、inode" 说起,揭开文件系统的底层逻辑

一、先搞懂 3 个核心概念:块、分区、inode

1. 块(Block):磁盘的 "最小存储单元"

磁盘的最小物理存储单位是扇区(512 字节),但操作系统读取数据时不会逐个扇区读取 ------ 效率太低。于是文件系统引入了 "块" 的概念:一个块是连续的多个扇区,最常见的大小是 4KB(相当于 8 个扇区)

块是文件存取的最小单位:无论文件大小是 1 字节还是 3KB,都会占用至少一个块。这就像我们租仓库,哪怕只放一个箱子,也得租一整个储物间

2. 分区(Partition):磁盘的 "功能分区"

一块磁盘容量可能很大(比如 1TB),如果全用来存一种数据,管理起来会很混乱。文件系统允许我们把磁盘分成多个 "分区",比如 Windows 的 C 盘、D 盘,Linux 的/根分区、/home分区

分区的本质是 "划定磁盘的一段连续柱面"(柱面是磁盘的物理结构,由所有盘片的同编号磁道组成)。每个分区都是独立的 "存储区域",可以单独格式化、单独管理,就像把一栋大楼分成多个独立的房间,各自用途不同

3. inode:文件的 "身份证"

我们知道 "文件 = 内容 + 属性":内容是文件的实际数据(存在块里),属性是文件的元信息(比如大小、所有者、创建时间、权限)。那么属性存在哪里?答案是inode(索引节点)

  • 每个文件对应一个唯一的 inode,里面存储了所有属性(唯独不包含文件名)
  • inode 有唯一的编号(inode 号),是文件的 "身份证号"
  • 一个分区的 inode 数量是固定的(格式化时确定),如果 inode 用完,哪怕磁盘还有空间,也无法创建新文件

举个例子:用ls -li命令查看文件,第一列就是 inode 号,后面的权限、大小、时间等,都来自 inode 存储的属性

二、文件是如何被 "找到" 的?inode 与块的映射

文件的内容存在块里,属性存在 inode 里,两者如何关联?答案藏在 inode 的结构中:每个 inode 都有一个 "块指针数组"(比如 ext2 文件系统有 15 个指针),这些指针直接或间接指向存储文件内容的块。

这个指针数组的设计很巧妙:

  • 前 12 个指针是 "直接块指针",直接指向存储数据的块(适合小文件)
  • 第 13 个是 "一级间接块指针",指向一个 "索引块",索引块里存储的是多个数据块的地址(适合中文件)
  • 第 14、15 个分别是二级、三级间接块指针,支持更大文件的存储

简单说:找到文件的 inode,就能通过指针数组找到所有存储内容的块,进而读取完整文件

三、目录的本质:文件名与 inode 的 "映射表"

我们访问文件时用的是文件名(比如test.txt),但文件系统认的是 inode 号 ------ 这中间的桥梁就是 "目录"

很多人不知道:目录也是一种文件!它的属性同样存在 inode 里,而它的 "内容" 非常特殊 ------ 是一张 "文件名→inode 号" 的映射表

比如我们在/home目录下创建test.txt/home目录的内容会新增一行记录:test.txt → 1052007(1052007 是test.txt的 inode 号)。当我们访问/home/test.txt时,文件系统会先读取/home目录的映射表,通过文件名找到 inode 号,再通过 inode 找到文件的属性和内容

四、总结

文件系统的基础逻辑其实很简单:

  • 用 "块" 存储文件内容,提高读写效率;
  • 用 "分区" 划分磁盘功能,方便管理;
  • 用 "inode" 存储文件属性,作为文件的唯一标识;
  • 用 "目录" 维护文件名与 inode 的映射,让我们能通过文件名访问文件。

理解了这 4 个核心组件,就相当于掌握了文件系统的 "骨架"。下一篇我们会深入实战:路径是如何被解析的?多个分区怎么用?软硬连接的区别是什么?

相关推荐
石像鬼₧魂石2 小时前
内网渗透靶场 攻击 & 排错命令分类速查表
linux·windows·学习·ubuntu
信仰JR2 小时前
Linux系统安装Maven私服Nexus3.X
linux·运维·maven
scan7242 小时前
python mcp 打印出参数
linux·服务器·数据库
KingRumn2 小时前
Linux进程间通信System V IPC 与 POSIX IPC 跨平台兼容性分析
linux·运维
IT运维爱好者2 小时前
【Linux】抓包工具mtr命令的使用教程
linux·mtr
JiMoKuangXiangQu2 小时前
Linux 内存管理:TLB ASID
linux·内存管理·tlb·asid
乾元2 小时前
基于时序数据的异常预测——短期容量与拥塞的提前感知
运维·开发语言·网络·人工智能·python·自动化·运维开发
梓仁沐白2 小时前
操作系统:进程通信和死锁
linux·服务器·网络
Bruce_Liuxiaowei2 小时前
Nmap主机发现与在线主机提取实用指南
服务器·网络·安全