Linux内核文件系统

2021SC@SDUSC       

        Linux发展多年,形成了庞大且复杂的体系结构,源码中不同的文件目录实现了不同的功能,文件系统的实现就位于fs文件夹内。它对各种文件系统都进行了适配,阅读源码可以了解Linux如何实现文件系统的管理。

        那么关于源码阅读,我的想法是第一步先从早期的文件系统开始学习,例如ext2(second extended filesystem),是Linux内核早期所用的文件系统。相比Linux现在常用的ext4,ext2的结构相对简单且功能更少,源码阅读更简单,并且能降低ext4的难度。即顺着ext2的发展逐步推进。

文件系统

        指某种具体的文件格式。文件系统类型有很多例如FAT、NTFS、NFS、ext2、ext3、ext4等等,目前Linux上常用的是ext4,Windows常用的是NTFS。

        物理介质例如磁盘,在存入文件之前要进行分区,对各分区格式化可以创建不同的文件系统,使其可以被操作系统使用,文件系统会将整个分区划分成若干个块组,并按以下管理该分区:

  1. Super Block:描述整个分区的文件系统信息
  2. 块组描述符表(GDT,Group Descriptor Table):由若干个块组描述符组成。每个块组描 述符存储一个块组的描述信息,如inode Table和Data Blocks的起始位置,空闲的inode 数和数据块数量等等。
  3.  Block Bitmap:存储每个块的使用情况
  4.  inode Bitmap:存储每个inode使用情况。
  5. inode Table:由一个块组中的所有inode组成。
  6. Data Block:是用来放置文件内容数据的地方。

        Linux文件系统中一个文件由dentry、inode、data block组成,dentry包括文件名和inode节点,inode存放了文件基本信息和并指向data block的存储地址,data block是文件的存储地址。

虚拟文件系统(VFS)

        文件系统类型有很多,他们都有各自的API接口,因此用户想要直接访问一个文件就需要对其文件系统类型做出相应的调整,VFS的作用是将不同的文件系统抽象化,并为用户提供一组标准的文件操作,使其不必关注文件系统的具体细节。

上一篇:磁盘挂载


下一篇:Linux Ext4文件系统的老祖宗长什么样