查看原文
其他

什么是文件系统,以Linux中的Ext4为例细聊一下

SunnyZhang 数据存储张 2024-05-06

      非结构化的数据大多通过文件系统管理。我们使用的手机或者个人电脑上面存储着大量的文件,比如视频文件、音乐文件或者照片等。这些文件都是通过文件系统来管理的。在文件系统中有两个非常基础的概念,也就是文件和文件夹(又称为目录)。

我们以Windows的资源管理器为例进行一个简要的介绍。左侧是各种文件夹,然后文件夹里面又有各种文件和文件夹,这些东东就是文件系统的表象。那本质是什么呢?我们知道这些东西其实都是存在磁盘上的,具体磁盘空间是什么样的我们并不知道,但文件系统软件给我们呈现出来了一个层级结构的、逻辑清晰的表象。我们可以基于文件系统创建、删除和复制这些文件。

  

任何技术的出现是为了解决问题,文件系统也是为了解决某些问题。那文件系统是为了解决什么问题呢?

我们有了一个相对形象的概念,文件系统管理着很多文件。而这些文件其实就是数据,这些数据又是存储在磁盘上的。因此,实质上文件系统是管理硬盘的软件系统,它简化了用户对硬盘空间的使用方法,并降低了硬盘空间的使用难度,通过更加形象的方式将硬盘中的数据展示给用户。

可以将硬盘空间类比成上图中的大房间。如果对空间的使用缺乏规划,那么使用的最终结果可能是下图这个样子的。空间的利用率非常低,想找东西也非常费劲。

如果对空间进行合理的规划,如下图这样通过货架对空间进行规划和编排,这样根据编号可以方便的找到具体的货物。

         

硬盘与仓库类似,也是一个非常大的空间。硬盘的内部虽然非常复杂,但硬盘生产厂商做了很多工作,将硬盘的复杂性掩盖起来了。对于普通用户来说,硬盘就是一个线性空间,就好像C语言中的数组一样,通过偏移就可以访问其空间(读写数据)。

文件系统与仓库管理类似,将硬盘空间进行规划和编号处理,这样通过文件路径和文件名就可以找到具体的数据,而不用关心数据到底是怎么存储的。

以Ext4文件系统为例,它将硬盘空间进行划分,并通过元数据实现对硬盘空间的管理,具体如下图所示。这样,用户对文件的操作就转化为文件系统对硬盘空间的操作。在用户层面就是目录树的结构,而在文件系统的内容则进行着非常复杂的管理操作。

    Ext4文件系统本身是非常复杂的,很难通过一篇文章介绍清楚,我们这里介绍一下其核心的内容。文件系统基础功能有两个,一个是管理整个硬盘逻辑空间,另外一个是为用户提供方便使用的接口。

       在管理硬盘空间方面,Ext4通过数据块位图来实现的。硬盘的空间被划分为一个一个等大小的逻辑块,每个逻辑块对应着位图中的一位。如果位图的某一位比置位,说明这块空间是被使用。如果没有被置位,说明空间是可用的。

       在接口方面,文件系统提供了两个非常基本功能,一个是文件,用于存储数据;一个是目录,用于组织数据。目录中可以容纳文件或者目录,由于这种组织关系,可以将数据形成一个树状的结构,称为目录树。

       如上图所示,文件系统实现了目录树结构与硬盘线性空间的一个转换的过程。在具体实现方面,Ext4是用过inode来实现文件和目录的。一个inode对应着一个文件或者一个目录,具体视类型而定。文件和目录中的数据就是通过inode来管理的。这个过程似乎不是特别容易理解,我们举一个具体的例子。

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存