FAT 组织形式 与 I-NODE 组织形式(Ext)

转载链接:http://xingyaohuang.com/2017/11/16/fat/

仅为自记,想要了解更详细可以查看链接。

FAT

FAT文件系统曾经被广泛运用与DOS系统和早期的Windows系统,即使到了现在,部分U盘等存储设备使用的依然是FAT的文件系统格式。这种文件系统是最经典的一种文件系统。

基本设计思想

FAT的基本思想是: 由于文件是由一个一个block构成类似链表格式而组成的。我们可以为创建一个表专门表示block的分配信息。

File Allocation Table 文档分配表

以下给出一个例子:在这里插入图片描述

在此例中,file是我们需要研究的文件,从他的文件信息我们知道这个文件的数据起始于Block3,紧接着我们通过查询FAT发现下一个block是6,以此类推得到4,2。而block 2的next是-1,也就代表着这是文件的最后一个block。

FAT的作用是告诉我们在硬盘系统中怎么样将block数据块合成为一个文件

但是并没有告诉我们文件到底是从哪一个block开始的。所以我们还需要一个文件目录表(File Directory table)。

假设在上述例子中我们的File位于**/pi/File**,我们的 FDT看起来将会是这样的:在这里插入图片描述

/对应的FDT始终在index为0的位置,以方便我们可以找得到。FAT中我们把文件和目录统统看做文件。我们在/的FDT内发现文件(目录)pi的起始位置是在block 1,然后我们就继续在对应位置找到/pi的FDT表,就可以发现File的start block是Block 3,于是就知道了怎么样去访问这个文件。

说了半天,这个FDT表到底存在什么位置呢?

FAT16分区格式的FDT表占用固定的32个扇区,扇区地址紧跟在第2个FAT表之后(FAT在磁盘中的分配顺序下文将交代)

.FAT32分区格式没有固定的FDT表,在第2个FAT表之后就是数据区DATA。目录名和文件名也作为数据对待,存放在数据区内。

也就是说FAT16的FDT表是在一个固定位置的,而FAT32的目录信息可能并不叫FDT,但他也以相同的的格式存储。都使用一个32字节长的“目录登记项”来说明目录或文件的有关特性。FAT16分区的目录登记项存放在固定位置的FDT表里,而FAT32分区的目录登记项存放在数据区里。

实现方式

FAT系统由三个主要部分构成:保留区域、 FAT表和数据区域。
  • 保留区域是FAT系统的总体描述,也就是这个系统的”使用指南”,包括MBR,DBR这种引导相关的记录等。
  • FAT区域则保存了文件系统的所有簇的使用状况,即处于空闲状态的可用、已被使用和已损坏这三种状态。
  • 数据区域则保存了文件的数据,如一个文本文件的数据是 “pipipi” ,这三个数据就保存在这个区域。

FAT的主要实现有三种:

FAT12
FAT16
FAT32

FAT后面的数字代表了FAT表的大小(比特位数)。

分析

优点:

新建文件简单
扩充文件简单
空间利用率较高(不会有外部碎片,有内部碎片,与簇大小有关系)

缺点:
有时访问效率比较低下,由于查找一个文件的内容必须从头开始遍历,就算只需要最后的内容。

EXT

另外一种流行的文件系统是Ext(Extended Format)。EXT系统被广泛运用于Linux上,它有Ext2, Ext3, Ext4等版本,不过他们的基本思想比较类似。

基本设计思想

在EXT文件系统中,每一个文件都有一个对应的 inode数据结构对其进行描述:(图片来自于《鸟哥的Linux私房菜》)在这里插入图片描述

inode 数据结构
  • Inode的大小是固定的。
  • Inode的第一个部分是文件的Metadata,描述这个文件的各种性质。
  • 接着inode存储着15个地址:
    • 前12个地址中,每一个地址都直接指向一个数据块Data Block,这是为了对于小文件而言有更好的存储效率。
    • 第13个地址指向一个256个项的表,这个表的每一项都对应一个数据块,这瞬间就让inode可存储的数据大小大了许多。
    • 如果这还不够的话,第14个地址指向一个二重表,表的每一项都指向一个表,指向的表每一项都指向对应的数据块。
    • 第15个地址指向一个三重表,

这样的话文件的大小就可以非常大了。以每一个block大小为1K为例,单个文件的总存储大小可以达到12+256+256256+256256*256(K) = 16GB。

在这里插入图片描述

(图片来自Udacity)

上述例子描述了目录相关的存储方法。假设我们要找的文件位于/foo/File.txt。

首先我们找到根目录对应的 inode,
在他的数据区里找到 foo对应的 inode的地址,
然后找到foo的inode数据区域
在找到File.txt对应inode的地址,就可以访问到inode内部内容了。

实现方式

Ext文件系统由以下几个部分组成:superblock,文件系统描述,块对应表,inode对应表,inode table和Data Block。在这里插入图片描述
(1)superblock

Superblock是记录整个文件系统相关信息的地方,没有superblock就没有这个文件系统。记录的信息包括:

block与inode的总量
未使用和已使用的block/inode总量
block与inode的大小
文件系统的挂载时间,最近一次写入数据的时间等
validbit数值,若被挂载则valid bit为0,否则为1
superblock可能会在其他的block group内备份
可以用dumpe2fs查看

(2)文件系统描述

这个区段可以描述每个block group的开始与结束的block号码,以及说明每个区段(superblock, bitmap, inodemap, data block)分别介于哪一个block号码之间。也可以使用dumpe2fs查看。

(3)块对应表 - block bitmap

当我们在添加文件是需要用到新的block记录数据,那我们怎么知道哪一个block是空闲的呢?块对应表将记录这些。通过此表我们可以快速找到可使用的空间来处理文件。并且再删除文件中也记录下来,把对应的block好嘛设置为空闲。

(4)inode对应表 -inode bitmap
与block bitmap类似,记录的是使用中和未使用的inode的情况。

(5)inode table
inode的内容主要是记录文件的属性metadata以及该文件的实际数据放在哪一个block内。inode table的组成可见Ext的基本设计思想。

(6)Data Block

data block是用来放置文件内容的地方,在Ext2文件系统中所支持的block大小有1KB,2KB及4KB三种。在格式化的时候block的大小就已经固定了,且每个block都有编号,以方便inode的记录。由于block大小的差别可能会导致文件系统支持的最大磁盘容量不一样。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值