首页 > 编程知识 正文

hadoop完全分布式,fatfs文件系统详解

时间:2023-05-06 13:31:49 阅读:153689 作者:797

F2FS源代码分析系列文章主目录1、 文件系统布局和元数据结构的总体结构(超级块区域检查点区域段信息表区域(SIT )节点地址表区域(NAT )段摘要区域) Area区域文件数据的保存和读写三、文件和目录的创建和删除(未完成)四、垃圾回收机构五、数据恢复机构六、重要数据结构或函数的分析F2FS概要F2FS都与Flash Friendly File System 作为专门为闪存设备设计的日志结构化文件系统(log-structuredFred ),相对于传统的日志结构化文件系统,F2FS在处理wandering tree和gc的高时间开销等问题方面,有了一定的改进和最优

wandering tree问题:在传统的LFS中,当文件数据被更新或写入日志末尾时,指向文件数据存储位置的直接指针也会更新,而指向该直接指针的间接指针也会更新

33558www.Sina.com/LFS是对变更后的数据执行异地更新的特性,因此在数据被更新为新的地址之后,旧地址的回收和再利用的过程被称为垃圾回收(GC )

F2FS系统特性F2FS的基本数据单位高gc开销问题:F2FS的数据存储基本单位为block,大小为4KB,整个闪存设备格式化为由多个block组成的结构。 许多数据结构也设计为4KB大小。 这是因为许多flash设备的单次IO读写操作都是基于4KB的倍数进行的。block:segment是一种管理块的机制,一个segment的大小为512个块,即2MB。segment:默认下,一个segment等于一个section,section是GC的基本操作单位,每次GC都在section中选择并回收特定的segment。 F2FS将section分为6类,分别是hot-node、warm-node、cold-node、hot-data、warm-data、cold-data、hot-cold是否为数据较高者由于LFS异地刷新功能F2FS是日志结构化文件系统(LFS ),因此将使用section:策略。 用一个简单的例子就可以说明什么是异地更新。 假设有某个文件,该文件数据被保存在物理地址100的位置。 此时,用户更新:文件的内容

zone:使用就地更新策略将更新的数据写入物理地址100。

当使用异地更新场外更新策略时,首先新的物理地址101被分配,接着数据被写入到新的物理地址101,接着文件指针指向新的物理地址101,最后

这个设计的优点是:

可以将随机写入转换为顺序写入,以提高性能。 flash的粒子program的寿命有限,通过LFS的异地更新特性,可以使其具有磨损平衡。 但是,LFS也有一些缺点。 最明显的缺点之一是F2FS回收旧的物理地址。 此过程称为垃圾回收(GC ),错误的GC机会会影响系统性能。 另一个缺点是LFS依赖Checkpoint来保证一致性,但是Checkpoint不是每次写入数据都进行,而是隔一段时间进行Checkpoint,因此除了jfs(journalfilesystem )之外

多头记录特性Log区域是指在文件系统中分配了free block (空闲且未写入数据的块)的区域,例如在需要向F2FS的文件写入新数据的情况下,在Log区域中传统的LFS通常维护一个较大的日志空间,所有数据分配都由该较大的日志空间处理,而F2FS根据数据的访问冷热特性不同,每个LFS维护6个日志空间,分别为:

非LFS::用于目录的direct node。 因为打开和读取目录是最频繁的操作。 http://www.Sina.com//普通文件的direct node到http://www.Sina.com//indirect

node使用,一般而言只有较大的文件才会使用到这个log区域。HOT DATA区域:给目录的数据使用,目录数据记录了当前目录有多少个子文件、子文件夹。WARM DATA区域:给普通文件的数据使用,常规的fwrite/write函数写入的数据都是在这里分配。COLD DATA区域:给不频繁修改的数据使用,如多媒体文件(多为只读文件),或者用户指定的只读文件,如GC产生写的数据(gc会挑热度最低的数据)。

注: direct node、indirect node的概念和作用会在第二章的第一节进行介绍。

F2FS的闪存设备物理区域布局

通过mkfs.f2fs工具,可以将整个flash设备格式化成特定的格式。整个存储设备区域被F2FS格式化为6个区域,分别是Superblock,Checkpoint,Segment Info Table,Node Address Table,Segment Summary Area,以及Main Area。前5个区域总称为元数据区域(Metadata Area),保存的是跟F2FS直接相关的元信息,而最后一个区域是保存文件数据的主要区域,主要保存了node数据、文件data数据、目录数据。它们的作用分别是:

Superblock: 记录整个文件系统的分区信息,包括一共有多少个block,使用了多少block这些最基本同时也是最重要的信息。F2FS在挂载的时候,会创建一个内存数据结构struct f2fs_sb_info,然后从设备的Superblock区域读取相关数据。

Checkpoint: 记录了上次卸载F2FS的时刻,系统的block、node等分配状态(如当前free block分配了到哪个位置),用于给下次挂载F2FS的时候,复原整个系统的block、node的分配状态。在F2FS的运行过程中,F2FS会定时将当前的block、node分配状态写入Checkpoint区域,用于由于F2FS被关闭/崩溃时恢复数据。Checkpoint在内存中对应的数据结构是struct f2fs_checkpoint。

Segment Information Table(SIT): 保存了每一个segment的信息,例如这个segment已经分配了多少个block、哪一个block正在使用,哪一个block是无效的需要回收。通过这些信息去管理已经被使用了的block和未使用的block,使系统可以合理分配block。每一个segment都对应了一个segment number(segno),系统可以通过segno快速地查询到该segment的分配信息。SIT在内存中对应的数据结构是struct f2fs_sm_info。

Node Address Table(NAT): 建立了一张表保存了每一个node的物理地址信息。F2FS的每一个node都有一个node id(nid),系统可以通过nid在NAT找到对应node的物理地址,从而在闪存设备读取出来。NAT在内存中对应的数据结构是struct f2fs_nm_info。

Segment Summary Area(SSA): 这个区域主要保存了jounal(SIT/NAT临时的修改信息)以及summary(记录了逻辑地址和物理地址关系的结构,主要用与GC)。SSA区域在内存中没有专门的数据结构。

Main Area: Main Area被4KB大小的block所填充,这些block可以分配给文件的data或者文件的node,是F2FS的主要数据保存区域。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。