当前位置:首页>Linux>拆解Linux最简单的文件系统|Minix文件的架构原理

拆解Linux最简单的文件系统|Minix文件的架构原理

  • 2026-09-08 20:40:26
拆解Linux最简单的文件系统|Minix文件的架构原理
转载于公众号:linux内核那些事
最近在分析文件系统的实现,先整理下Linux下最简单的文件系统Minix文件系统的原理和结构图。后面会分析一些比较复杂的文件系统,比如Ext2、Ext3文件系统等。

磁盘分区

磁盘可以被分区,分区中可以安装文件系统,常见的文件系统有 fat32、ext2、ext4 等。分区后的磁盘结构布局如下图,其中主引导扇区记录了分区信息,并且包含引导代码可用于引导操作系统。

Minix文件系统

分区内可以安装指定文件系统,同一磁盘多个分区文件系统不要求相同。MINIX文件系统布局如下:

  • 引导块:若作为引导分区,将存放操作系统的引导程序代码,否则空置。
  • 超级块:用于存放磁盘设备上文件系统结构的信息,说明各部分的大小。
  • i节点位图:标记i节点数据元素是否被使用
  • 逻辑块位图:标记磁盘数据块是否被使用
  • i节点区:用于存放inode节点数据,一个文件对应一个inode节点,inode节点存储文件属性数据。
  • 数据区:以固定大小盘块(1k)为单位进行动态分配和回收,用于存储数据,类似内存分页。

超级块

用于存放磁盘设备上文件系统结构的信息,说明各部分的大小。

图中列出的数据包含两部分:出现在盘上和内存中的字段和仅在内存中使用的字段,仅在内存中使用的字段是内核读取超级块后所附加的一些用于管理使用的字段信息。

inode节点

inode节点保存对应文件的属性信息,其中i_zone数组使用类似多级页表的方式维护文件数据块,即记录文件逻辑块到物理块之间的映射关系。

i_zone数组

i_zone数组包含直接盘块号、一次间接盘块号和二次间接盘块号。一次盘块号可视为单级页表,一次间接盘块号可视为二级页表、二次间接盘块号可视为三级页表。

这种处理方式的好处在于,对于小文件,通过直接块号可快速定位数据块;对于中等类型的文件,一次间接块可以维护较多数据块的同时,具有较快的访问速度;对于大型文件,二次间接盘块号可以维护大量磁盘块,但访问速度较慢。

内存多级页表与i_zone直接区别:不同进程具有固定大小的虚地址空间,并且对其整个虚地址空间的内存,都有可能访问到,因此使用多级页表。文件系统内存在很多大小不一的文件,综合考虑对不同大小文件的特点,使用1-3级磁盘块表可以分别处理小、中、大文件。

目录结构

树形目录结构

文件系统目录结构为树形,根节点为根目录,目录可以指向若干个子目录或子文件。

文件查找过程

通过文件inode节点,可以定位文件数据块,那如何通过文件路径定位到具体文件?

文件系统主要包含文件和目录两种文件,目录是一种特殊的文件,其文件内容存储其目录下文件名->inode节点号的映射信息。文件查找开始于根目录,根目录号固定为0,不需要查找即可直接打开。

举例说明文件查找过程,给定存在路径/name1/name2/name3查找具体文件过程:

  • 1)通过根节点inode号,打开根目录,读取其文件内容,即目录下文件名->inode节点号映射表,找到name1目录inode节点号n1
  • 2)通过name1的inode号n1,打开name1目录,读取其文件内容,即目录下文件名->inode节点号映射表,找到name1目录inode节点号n2
  • 3)通过name2的inode号n2,打开name2目录,读取其文件内容,即目录下文件名->inode节点号映射表,找到name3目录inode节点号n3
  • 4)通过name3的inode号n3,打开name3文件

文件数据块定位过程

  • 1)打开文件:先通过文件查找找到文件inode节点号,然后打开文件,即读取inode至内存。
  • 2)定位数据块:通过文件inode节点,访问其i_zone数组,进一步可以定位具体的数据所在磁盘块号。

文件链接

硬链接

硬链接,在指定目录文件中,生成一个文件,即建立文件名->inode节点号的映射。不同之处在于,硬链接文件的inode号是其它文件的inode号,即多个文件共享一个inode。多个文件共享inode节点时,会引起inode节点引用计数增加。

硬链接示意图如下。

软链接(符号链接)

软链接,在指定目录文件中,生成一个文件,建立文件名->文件路径的映射。软链接文件项不直接指向被指向文件的inode号,而是记录其文件路径。符号链接不直接共享inode,不会引起inode节点引用计数增加。

打开软链接文件时,先获取其指向的文件路径,再通过指向的文件路径打开文件。

软链接文件示意图如下,其中蓝色线表示软链接。

删除被链接文件

  • 硬链接:多个文件指向同一个inode节点,引用计数等于文件数量,删除其中一个文件,只会导致引用计数减小1,引用计数为零时,文件才会被删除。

  • 软链接:删除软链接,不会对被指向文件产生任何影响;删除被指向文件,软链接可能会失效。

星标公众号,第一时间看文章!

最     后   

小哥搜集了一些嵌入式学习资料,公众号内回复【1024】即可找到下载链接!

推荐好文点击蓝色字体即可跳转

☞专辑|Linux应用程序编程大全
☞ 专辑|学点网络知识
☞ 专辑|手撕C语言
☞ 专辑|手撕C++语言
☞ 专辑|经验分享
☞ 专辑|从单片机到Linux
☞ 专辑|电能控制技术
☞ 专辑|嵌入式必备数学知识

☞  MCU进阶专辑

☞  嵌入式C语言进阶专辑

☞  经验分享 

最新文章

随机文章