关于Linux文件系统的一些思考


最近在学习Linux的文件系统,尽管很多书对文件系统一章都做了较为细致的讲解,但感觉缺乏一个总体的概念,无法从总体上把握Linux文件系统。

以下谈谈笔者对Linux文件系统的一些理解和思考。

一、为什么要有文件系统?

我们在对新硬盘装操作系统的时候,都得先对硬盘进行分区。在分区的之后需要进行格式化,而这格式化的过程就是为分区创建文件系统的过程。由此,也可以看出,创建文件系统必须在安装操作系统之前完成。

那么为什么要有文件系统呢?笔者个人的理解是:磁盘分区之后,每个分区只是一块可以存储信息的磁性介质。我们当然可以顺序存储信息到这些磁盘中,然后顺序将磁盘中所存储的信息读取出来。但无疑这是低效的,尤其是在读取的过程中,我们甚至无法确定我们读操作的起始和结束位置。为了解决磁盘操作的实用性和效率问题,我们需要对磁盘进行有效的功能划分和管理,以便高效地存取文件,文件系统便是担任了这样的工作。

二、文件系统如何实现对文件的高效存取

文件系统通过在磁盘中划分出不同的功能区,如在Linux系统中:superblock,文件系统描述,块对应表,inode对应表,inode table和data block。每一个功能区自司其职。至于具体的每一个功能区的具体功能,笔者就不细说了,几乎每一本讲解Linux文件系统的书中都有详细说明。

利用这些功能区,在写文件操作中,在将具体的文件内容写在data block中的同时,也会对其他功能区进行一些更新操作。其中涉及到相关目录问题,也会进行细致的更新。(目录是文件系统为了更好地管理文件而提出的一种逻辑概念)从而,当进行读文件操作时,操作系统能够更快、更准确地找到相应位置。

三、文件系统中inode,block之间的关系,及其在目录和文件存取中的体现

inode和block是Linux ext2文件系统中最重要的两个元素,其中inode中会记录相应block的号码,block中又会存储inode的号码,再加上目录、文件什么的,显得尤为复杂。

笔者所理解的是:从总体上把握,如下图所示,block文件中记录文件内容目录内容(目录项和inode号码的对照表)和block号码(在多级块存储时用到);而inode只是记录目录或是文件最原始的block号码、权限信息等属性(之所以这里说最原始,是为了和多级块存储作区分,在多级块存储中只有第一级存在inode中)。也就是说,inode只是一个中间产物。

我们以下图(这图也是花了我一个钟头的时间,虽丑勿喷)为例,从根目录/开始描述文件系统inode和block中可能存储的内容:


  • 我们前面已经提及,无论目录还是文件都首先对应一个inode,并由inode指向该目录或文件的block,然后可以读取block中的内容。
  • 根目录/的inode通过挂载的信息可以直接找到,且通常为2。inode2中将记录相应block的号码,和用户拥有的权限用于查证(r、w和x)。
  • 在取得的block中将存储根目录下的内容:文件(如图中test和bigdata)或是子目录(/usr和/bin),每一项文件或子目录都对应一个inode号码。1)若为小文件(test),则该inode号码所对应的inode则将指向若干个block,该block中存储该文件的内容;2)若为大文件(/bin),则inode中除了会存储一些直接存有文件内容block号,还会存储另一些间接存有block的号码的block号,也就是所谓的间接多级块存储);3)若为目录(/usr),则该inode号码所对应的inode指向存储该目录的block,在该block中存储子目录项(/usr/bin和/usr/lib)和inode号码的对照表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值