了解
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)
⑨该文件真正内容的指向
- 特点
①每个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与数据区块中。