一、前言

磁盘在分区完成之后,要使得操作系统能够识别文件系统,就需要进行格式化,把分区格式化成某一个操作系统能够识别的文件系统。 
一般来说,一个分区中装一个文件系统,但是现在技术发展了,一个分区可以装多个文件系统,也能将多个分区合并成一个文件系统。一个文件系统可以挂载到操作系统上。

二、EXT4文件系统

在Linux系统中,文件的权限与属性放到inode中,实际数据则放置到data block区块中。另外,还有一个超级区块superblock会记录整个文件系统的整体信息,包括inode与block使用量,剩余量等。

  • inode:记录一个文件的所有属性,以及这个文件所对应的block的号码(一个文件对应一个inode)
  • block:存放文件的实际数据(若文件数据太大,则使用多个block存放)
  • super block:记录文件系统的整体信息,包括:inode、block的数量、文件系统的使用量、剩余量等。

在Linux系统中,为每个文件分配一个称为索引节点的号码inode,可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。

系统是通过索引节点(而不是文件名)来定位每一个文件。

三、EXT4文件系统读取数据的过程

系统先格式化出inode与block的区块。如下图,要访问一个文件时,首先找到这个文件的inode,根据inode中的权限查看当前用户是否有权力读取这个文件;然后根据inode中记录的block的号码,操作系统据此排列磁盘阅读顺序,一口气将四个block内容读出。最后找到block,读出数据。这种文件系统就叫做索引式文件系统。

U盘(闪存)一般使用FAT文件系统,而FAT文件系统并没有inode,每个block中记录着本文件下一个block的位置。所以FAT文件系统无法通过inode一次性将这个文件所有的block号码读取出来,而只能一个个地读取block后才能知道下一个block的位置。如下图:

上图中我们假设文件的数据依序写入1->7->4->15号这四个 block 号码中, 但这个文件系统没有办法一口气就知道四个 block 的号码,他得要一个一个的将 block 读出后,才会知道下一个 block 在何处。如果同一个文件数据写入的 block 分散的太过厉害时,则我们的磁盘读取头将无法在磁盘转一圈就读到所有的数据, 因此磁盘就会多转好几圈能完整的读到到这个文件的内容。
所以如果同一个文件的block分散地太开,那么读取一个文件的时间就会很长,所以就有所谓的“碎片整理“,就是将同一个文件的block们尽量放到一起去。但Linux的EXT4文件系统由于是索引式的,因此不太需要碎片整理。

四、EXT4文件系统的一些补充说明

Linux之所以能支持多种文件系统,其实是由于Linux提供了一个虚拟文件系统VFS,VFS作为实际文件系统的上层软件,掩盖了实际文件系统底层的具体结构差异,为系统访问位于不同文件系统的文件提供了一个统一的接口。

  1. 有些文件系统非常大,高达数百GB,那么格式化后会有大量的inode和block,为了方便管理,文件系统对所有的inode和block进行分组,每一组叫做block group,每一组都有独立的inode/block/super block。
  2. data block数据块是用来存储文件实际数据的地方,只有1KB、2KB、4KB这三种。
  3. 所有的inode和block在格式化的时候大小和数量就固定了,而且每一个block都有固定的编号,便于inode查找。
  4. 文件系统支持的最大磁盘容量和单一文件容量是不一样的;
block大小 1KB 2KB 4KB
最大单一文件容量 16GB 256GB 2T

一个block只能存放一个文件的数据,如果文件太大,则使用多个block存放,如果一个block放不满,则剩下的就空着。

  1. 每个block的大小要合理地选择, 如果太大,会造成最后一个block中会有大量剩余的空间;如果太小,那么inode中就要记录更多的block号码,每次找block要耗时,所以这样效率也不高。
  2. 由于每个inode在格式化的时候大小就已经固定了,并且只有128bytes,并且每个文件仅能占用一个inode,因此,文件系统能够创建的文件数与inode的数量有关。除此之外:
  3. 当一个文件很大时,它的block太多,每个block号码需要4byte,那么inode记录不下了怎么办?这时候将block号码存在一个block中,inode仅仅需要记录这个block的号码即可,这就是一次间接索引。Linux的ext2文件系统最多支持3级间接索引。
  4. super block记录了整个文件系统的相关信息,是非常重要的,如果super block死掉了,那么系统会花费大量时间去挽救他。
  5. 一般super block的大小为1024bytes
  6. 每个block group中都含有一个super block,由于一个文件系统中只能有一个super block,所以这些group中的super block都是一样的,在第一个super block挂了的时候进行挽救用的。

我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!

参考文章

  1. https://blog.csdn.net/shimadear/article/details/81035477

操作系统(12)-【Linux】索引式文件系统相关推荐

  1. 【Linux】索引式文件系统

    1.文件系统的特性 每种操作系统能够使用的文件系统并不相同.例如: Linux上文件系统:EXT4(由最初EXT2发展而来) U盘:FAT32 windows:NTFS 磁盘在分区完成之后,要使得操作 ...

  2. linux 删除分区_详解linux系统架构--文件系统体系

    概述 之前已经对Linux系统架构的内核部分单独做了深入介绍,今天就拿Linux系统架构中的文件系统做一下介绍吧~先介绍下概念: 文件系统是文件存放在磁盘等存储设备上的组织方法.Linux系统能支持多 ...

  3. 浅谈Linux标准的文件系统(Ext2/Ext3/Ext4)

    Ext 全称Linux extended file system, extfs,即Linux扩展文件系统,Ext2就代表第二代文件扩展系统,Ext3/Ext4以此类推,它们都是Ext2的升级版,只不过 ...

  4. linux的常用文件系统格式

    文件系统指文件存在的物理空间.在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构.Linux的最重要特征之一就是支持多种文件系统,这样它更加灵活,并可以和许多其它种操作系统共存.Vi ...

  5. 《求职》第四部分 - 操作系统篇 - Linux基础

    常用命令 编辑相关 awk:awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将 ...

  6. linux系统12,Linux操作系统12则经典应用技巧

    1.处理特殊的文件名 假设Linux系统中有一个文件名叫"-ee",如果我们想对它进行操作,例如要删除它,按照一般的删除方法在命令行中输入rm -ee命令,界面会提示我们是&quo ...

  7. 操作系统课设--具有二级索引的文件系统

    山东大学操作系统课设lab5 实验五 具有二级索引的文件系统(lab5) 实验目的 实验环境 实验思路 调试记录 实验五 具有二级索引的文件系统(lab5) 实验目的 Nachos系统原有的文件系统只 ...

  8. linux之EXT2文件系统--理解block/block group/索引结点inode/索引位图

    0. 文件系统和图书馆 在linux上操作文件,和在图书馆借书是非常相似的. 硬盘上的文件系统,好比图书馆的书架:而vfs则是图书馆的管理系统. 内核的工作: 1. 维护一个文件的目录树(dentry ...

  9. 操作系统笔记——Linux系统实例分析、Windows系统实例分析

    文章目录 传送门 Linux进程管理 Linux进程组成 Linux进程链表 Linux进程控制 用户进程创建与撤销 0,1,2号进程 Linux进程切换 Linux进程调度 内核同步 Linux储存 ...

最新文章

  1. linux面试准备2
  2. java实现简单链表
  3. matlab 度分秒转换成度_如何利用matlab统一处理照片亮度对比度
  4. Python爬虫入门五URLError异常处理
  5. 用计算机打cf,CF能用的特殊符号有什么 CF特殊符号怎么打
  6. 2021-10-28 python爬虫学习
  7. Lua中强大的元方法__index详解
  8. FFA 2021 专场解读 - 生产实践 / 机器学习
  9. 3.2 如何判断Java对象的存活
  10. 摄像机成像原理图解析
  11. 3.2自编码器(变分自编码器,VAE)
  12. 【转载】SCI论文配图配色方案参考网站
  13. PPC2003SE开发日记-资源之工具安装(JONSON原创)
  14. 【嵌入式开发】STM8S103F3P6单线半双工串口通信
  15. 蛋花花:人工智能雏形是怎么出来的
  16. DNS解析域名解析过程
  17. 前程无忧、BOSS直聘、猎聘“抢”Z世代
  18. linux卸载带输入法,Ubuntu删除自带的输入法之后设置不见了
  19. Freebie:专业业务信息图表模板
  20. RTX Excption integer divided by zero at loc (proc= thread=)Process image has been *unloaded

热门文章

  1. Java8 中的 Optional
  2. Go实现Raft第四篇:持久化和调优
  3. EMQX源码阅读笔记
  4. Dynamo论文导读
  5. 统计一个长度为2的子字符串在另一个字符串中出现的次数.例如:假定输入的字符串为“asd asasdfg asd as zx67 asd mklo”,子字符串为“as”,函数返回值为6。
  6. python 字符串%和format_Python必懂知识点,格式化字符串,到底用.format还是%
  7. vue项目图片403
  8. 手机端滚动屏幕加载更多
  9. zookeeper专题:zookeeper集群搭建和客户端连接
  10. 看面试题感觉生疏的知识点