linux文件系统

了解

Windows98以前的操作系统主要使用的是FAT,Windows 2000以后的版本使用NTFS文件系统,至于Linux的正统文件系统为ext2

Linux文件系统

一个可被挂载的数据为一个文件系统

  • 超级区块:记录此文件系统的整体信息,包括inode与数据区块的总量,使用量,剩余量以及文件系统的格式与相关信息等。
  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的数据区块的号码。
  • 数据区块:实际记录文件的内容,若文件太大时,会占用多个区块。

区块群组

当一个文件系统过大时,ext2文件系统格式化时基本上是区分为多个区块群组,每个区块群组都有独立的inode,数据区块,超级数据区块系统。

  • 数据区块
    ①原则上,区块的大小与数量在格式化完成后,就不能再修改。
    ②每个区块最多只能放置一个文件的数据。
    ③如果文件大于区块的大小,则一个文件就会占有多个区块数量
    ④若文件小于区块,则该区块的剩余容量就不能够再被使用了(磁盘空间会浪费)
block大小 1kb 2kb 4kb
最大单一文件限制 16GB 256GB 2TB
最大文件系统限制 2TB 8TB 16TB
  • inode表
    1.内容
    ①该文件的读写属性
    ②该文件的拥有着与用户组
    ③该文件的大小
    ④该文件建立或状态改变的时间(ctime)
    ⑥最后一次读取的时间(atime)
    ⑦最近修改内容的时间(mtime)
    ⑧定义文件特性的表示(SUID,SGID,SBIT)
    ⑨该文件真正内容的指向
  1. 特点
    ①每个inode大小均固定为128B(新的ext4与xfs可设置到256B),记录一个数据区块为4B。
    ②每个文件都仅会占用一个inode
    ③文件系统能够建立的文件数量与inode的数量有关
    ④系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够读取区块的内容。
    ⑤为扩大支持单个文件的大小,将inode记录区块号码的区域定义为12个直接,1个间接,一个双间接,一个三间接。
  • 超级区块
    ——超级区块是记录整个文件系统相关信息的地方,没有超级区块,就没有这个文件系统
    ①数据区块与inode的总量
    ②未使用与已使用的inode与数据区块的数量
    ③数据区块与inode的大小(block为1,2,4k,inode为128B或256B)
    ④文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘的时间等文件系统的相关信息。
    ⑤一个有效位数值,若此文件系统已被挂载,则有效位为0,若未被挂载,则有效位为1;
  • 文件系统描述性说明
    描述每个区块群组的开始与结束的区块,以及说明每个区段分别介于哪一个区块之间。
  • 区块对照表
    记录使用与未使用的区块的号码
  • inode对照表
    记录使用与未使用的inode号码

dumpe2fs:查询ext系列超级区块信息的命令

目录文件与一般文件在文件系统中是如何记录数据的?

  • 目录
    当我们在linux下的文件系统建立一个目录时,文件系统会分配一个inode与至少一个数据区块给该目录。其中inode记录该目录的相关权限与属性,并可记录分配到那块数据区块的号码,而数据区块则是记录在这个目录下的文件名与该文件名占用的inode号码数据
  • 文件
    当我们在linux下的ext2建立一个一般文件时,ext2会分配一个inode与相对于该文件大小的数据区块数量给该文件。
  • 目录树读取
    以读取/etc/passwd为例
    ①根目录/的inode
    ②/的数据区块
    ③etc/的inode
    ④etc/的数据区块
    ⑤passwd的inode
    ⑥passwd的数据区块

新增一个文件时,文件系统的操作

①先确定用户对于欲增加文件的目录是否具有w和x的权限,若有的话才可以新增。
②根据inode对照表找到没有使用的inode号码,并将新文件的权限/属性写入。
③根据区块对照表找到没有使用的数据区块的号码,并将实际的数据写入区块中,且更新inode区块指向数据区块。
④将刚写入的inode与数据区块同步更新inode对照表,区块对照表,并更新超级区块的内容。
inode区块与数据区块称为数据存放区
inode对照表,区块对照表和超级区块被称为元数据(因为每次新增,修改,删除时都会影响这三部分的数据)
e2fsck:强制进行数据一致性的检查

linux内存与磁盘的异步处理方式

当系统加载一个文件到内存后,如果该文件没有被修改,则在内存区段的文件数据会被设置成clean,但如果内存中的文件被修改,在内存区段的文件数据就会被设置成dirty,此时所有的操作都还在内存中执行,并没有写入到磁盘中。系统会不定时的将设置为dirty的数据写回磁盘,以保持磁盘与内存数据的一致性。sync命令手动强制写入磁盘

linux系统上的文件系统与内存的关系

①系统会将常用的文件数据放置到内存的缓冲区,以加速文件系统的读写操作。
②Linux的物理内存最后都会被用光,这是正常现象。
③可以手动使用sync命令来强制内存中设置为Dirty的文件回写到磁盘中。
④正常关机时,关机命令会主动调用sync将内存中数据回写入磁盘中。
⑤若不正常关机,由于数据尚未回写入磁盘中,因此启动后可能会花很多时间进行磁盘校验,甚至导致文件系统的损坏。

xfs文件系统的配置

xfs文件系统在数据的分布上,规划为三部分,数据区、文件系统活动登录区、实时运行区

  • 数据区
    xfs的数据区与ext系列一样,包含inode、数据区块、超级数据区块等数据,也分为多个存储区群组分别放置文件系统所需要的数据。每个存储区分组都包含①整个文件系统的超级区块②剩余空间的管理机制③inode的分配与追踪。inode与区块都是系统需要时才动态配置产生的,所以格式化操作非常快
  • 文件系统活动登录区
    用来记录文件系统的变化。文件的变化会在这里记录下来,直到该变化完整的写入到数据区,该条记录才会被结束。如果文件系统由于某些缘故而损坏时,系统会拿这个登录区块进行检验,看看系统挂掉之前,文件系统正在运行啥操作,借以快速地修复文件系统。
  • 实时运行区
    当有文件要被建立时,xfs会在这个区段里面找一个或数个的extent区块,将文件放置在这个区块内,等到分配完毕后,再写入到数据区的inode与数据区块中。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容