TQFS文件系统架构说明(又一个最适合Nandflash的轻量级嵌入式文件系统)

前言  根据NandFlash的一些特性,读写速度快,生产工艺问题或多或少存在坏块,最小擦除单位为块,最小读取单位为字节,并且不能频繁对其进行擦写操作,最先对NandFlash支持最好的就是Yaffs文件系统,但Yaffs文件系统最大支持的页大小为512Byte,Yaffs2支持页大小可以达到2048Byte 但针对那些像linux的大型操作系统不管是Rom和Ram的开销确实不算什么,但如果只是把它应用在ram只有几十Kbyte的单片机上也是经过裁剪再裁剪才能放进去,这就需要诞生一种集Yaffs优点于一身,而且对硬件要求很低的文件系统,这是TQFS文件系统的初衷。

TQFS文件系统的优点

需要的Rom少:大概一千五百多行代码

需要的Ram少:平均需要建立的全局变量不大于基本都是用来存储一些使用Tab表的偏移位置及内容存储区的偏移位置等信息,其他局部变量的最大开销不会超过80Byte。

文件系统稳定性好:就算文件系统局部出现灾难性的故障,依然可以读取文件系统中完整的个别文件,这点是在其他类型文件系统中不具备的。

对硬件伤害小:在一块格式化完整的NandFlash上进行写入文件,在NandFlash没有写满的情况下,TQFS是不会对其进行擦出块操作。

文件大小没有限制:文件最大可以在一个存储设备上存储一个文件,最小可以存储的文件个数,理论上是,一个存储设备上除去Tab占据的一个块外,剩余块上每页都可以存放一个文件,不足占据一页的算作一页,以K9f2g08为例最多可以存放文件为2048*64-64个文件,每个文件大小为2Kbyte。

高效率性:存储一个文件不需要整块空间,当需要对很久以前的文件进行内容追加时,系统会寻找空白页写新的内容并且与之前的文件通过地址关联链接成一个文件,删除文件也可以只删除文件头,文件中间页可以在块回收的时候进行整理,

文件类型多样性:可以存放的文件类型除了文件夹文件类型还增加了一些特殊类型,如链接类型和和根目录类型,可以在文件系统中建立多个根目录,相当于硬盘中的多个分区一样。

如下是每个存储页的首字节标志,用来标识该页的内容。利用NandFlash的擦除过程是从非1擦除到1的过程,为了避免再次擦除,文件类型确定了是不能进行修改,但该页属于整个文件的的组成部分位置可以从文件头,改为文件按中或文件尾,但一旦改为文件尾,该文件的大小就确定了,不能对其进行追加操作。

enumFileType{

FT_NotUsed=0xff,//页未被使用

FT_ReadyRoom=0x7f,//未定义长度的泛型文件存储区

FT_File=0x1f,//文件类型的未定义长度存储区

FT_FileHead=0x1e,//文件首

FT_FileCenter=0x1c,//文件中

FT_FileEnd=0x18,//文件尾部

FT_Folde=0x2f,//文件夹类型的未定义长度存储区

FT_FolderHead=0x2e,//文件夹头标志

FT_FolderCenter=0x2c,//文件夹中间标志

FT_FolderEnd=0x28,//文件夹尾标志

FT_Link=0x3f,//链接类型的未定义长度存储区

FT_LinkHead=0x3e,//链接文件头标志

FT_LinkCenter=0x3c,//链接文件中间标志

FT_LinkEnd=0x38,//链接文件尾标志

FT_RootDir=0x4f,//路径文件标志

FT_RootDirHead=0x4e,//根文件头标志

FT_RootDirCenter=0x4c,//根文件中间标志

FT_RootDirEnd=0x48,//根文件尾标志

FT_Delete=0x08,//文件被删除标志

FT_Tab=0x6f,//文件页被用来存放Tab表标志

FT_Bad=0x00     //页损坏标志

};

文件系统的可扩展性:该套文件系统架构是在k9f2g08上测试的,理论上可以兼容所有规模的NandFlash,且如果文件TAB表损坏或丢失,都可以花一些时间去搜索文件存储区来重构文件TAB表。

文件的坏块管理:文件的坏块管理通过写页的标志位为0x00来却别该页是否是不可用页,这比传统的坏块管理好在,如果一个存储设备的某个块并不是全部算坏,而只是某个页上局部位置损坏,(NandFlash坏区的定义为,擦除不为全1的为损坏),那么该块的其他页照常可以使用。

文件的擦除平衡:往文件系统里写入文件是从前往后找可用页一次向后写,当写到不能再写入内容的时候,系统会自动启用删除块回收,回收是也是从前往后的顺序找出所有可擦除块对其进行擦写,保证了系统不会频繁的对某个特定块进行反复擦写。从而实现了均衡擦除。

TQFS文件系统底层架构包含对NandFlash的整体规划使用区域划分,文件Tab位置的确定是在格式化NandFlash的过程中决定的,通常,Tab的位置被定在首个非坏块上,Tab占用一个存储块,文件其余块为文件内容存储区,文件内容存储区的位置都是使用的相对偏移位置,即认为紧跟Tab所在块后面一个非坏块的位置为基地址,Tab中每页的Data区域(存放数据内容的区域)的每个字节对应内容存储区的每页,且与内容存储区每页的Spare的首字节的内容是保持一致的,Tab实际上是为加快文件搜索和统计的速度而设定的。

泛型文件管理层该层定义了文件内容存储区的每页数据结构,每页的Spare区域左对齐存放File_Infor结构类型数据,描述该页的详细信息,每页的数据内容存储区域存放文件内容数据,该文件内容由File_Infor数据结构中的FileType决定,如果是普通文件类型,那么在该区域存放的是文件内容数据,这跟其他文件系统一样,如果是文件夹类型,那么该页存放的是链接,链接的长度通常是8字节对齐,每8字节描述一个链接文件,首字节存的是链接指向文件的文件类型,紧接着存放的是链接指向的文件地址,链接指向的类型也可以是全部类型,文件夹里存放的链接与链接文件里存放的链接基本是相同的,但是链接文件中的存放的链接地址指向的可以是文件的非头部分,但文件夹里的链接就只能指向文件的首部。

TQFS文件系统架构说明(又一个最适合Nandflash的轻量级嵌入式文件系统)

时间: 2024-11-11 02:14:04

TQFS文件系统架构说明(又一个最适合Nandflash的轻量级嵌入式文件系统)的相关文章

Ceph:一个开源的 Linux PB 级分布式文件系统

探索 Ceph 文件系统和生态系统 M. Tim Jones , 自由作家 简介:  Linux®持续不断进军可扩展计算空间,特别是可扩展存储空间.Ceph 最近才加入到 Linux 中令人印象深刻的文件系统备选行列,它是一个分布式文件系统,能够在维护 POSIX 兼容性的同时加入了复制和容错功能.探索 Ceph 的架构,学习它如何提供容错功能,简化海量数据管理. 标记本文! 发布日期:  2010 年 6 月 12 日 级别:  中级 其他语言版本:  英文 访问情况  5726 次浏览 建议

[转载] 【冬瓜哥手绘雄文】集群文件系统架构演变终极深度梳理图解

原文:  http://mp.weixin.qq.com/s?__biz=MzAwNzU3NzQ0MA==&mid=209298809&idx=1&sn=70f93b7d71fa7ac9caf3c737fb20a2ad&scene=1&key=c76941211a49ab58a5fed01be2b1651eadbc89e3a9495b276185efdb2282d0fdd5b3aca4129a665495d1b65b77a9a848&ascene=0&

分布式文件系统架构GFS、HDFS、TFS、Haystack

分布式文件系统架构GFS.HDFS.TFS.Haystack 分布式文件系统很多,包括GFS,HDFS,淘宝开源的TFS,Tencent用于相册存储的TFS (Tencent FS,为了便于区别,后续称为QFS),以及Facebook Haystack. 分布式文件系统通常可以作为底层存储,如GFS作为Google bigtable的底层,EBS作为 Amazon RDS的底 层,HDFS作为HBase的底层文件系统 其中,TFS,QFS以及Haystack需要解决的问题以及架构都很类似,这三个

Ext4文件系统架构分析(二)

接着上一篇博文,继续分析Ext4磁盘布局中的元数据. 1.7 超级块 超级块记录整个文件系统的大量信息,如数据块个数.inode个数.支持的特性.管理信息,等待. 如果设置sparse_super特性标志,超级块和块组描述符表的冗余备份仅存放在编号为0或3.5.7的幂次方的块组中.如果未设置sparse_super特性标志,冗余备份存在与所有的块组中.以下是2.6.32.18内核中对Ext4超级块的描述: 3.0的内核中,Ext4的超级块加入了以下相关元数据:快照.文件系统错误处理相关.挂载选项

一个特别适合新手练习的Android小项目——每日一妹纸

介绍 每天更新一张精选妹纸图片,第一版目前已完成,本项目会持续更新,遇到任何问题欢迎与我联系^_^ 为什么说这是一个特别适合新手练习的小项目? 服务器API接口功能丰富且无访问次数限制 包含了常见的网络通信,数据缓存等功能 使用了流行的Realm,Retrofit,Glide,Butterknife等开源项目,方便新手学习他们的使用 遵循Material Design规则 示例 项目当然是开源的啦,源码请戳下面的链接 https://github.com/SparkYuan/Meizi ----

如何在cocos2d-x中使用ECS(实体-组件-系统)架构方法开发一个游戏?

引言 在我的博客中,我曾经翻译了几篇关于ECS的文章.这些文章都是来自于Game Development网站.如果你对这个架构方式还不是很了解的话,欢迎阅读理解 组件-实体-系统和实现 组件-实体-系统. 我发现这个架构方式,是在浏览GameDev上的文章的时候了解到的.很久以前,就知道了有这么个架构方法,只是一直没有机会自己实践下.这一次,我就抽空,根据网上对ECS系统的讨论,采用了一种实现方法,来实现一个. 我很喜欢做游戏,所以同样的,还是用游戏实例来实践这个架构方法.我将会采用cocos2

FastDFs 开源的轻量级分布式文件系统部署

1.技术背景介绍; FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务,如相册网站.视频网站等等.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下载等服务. 2.基础环境介绍; 主机名 IP地址规划 相关软件源码包汇总 服务器角

轻量级分布式文件系统FastDFS使用安装说明手册(新手入门级)

轻量级分布式文件系统FastDFS使用安装说明手册(新手入门级) 实验室所在的课题组以研究云计算为主,但所有的研究都是在基于理论的凭空想像,缺少分布式环境的平台的实践,云计算神马的都是浮云了.因此,我想借助Hadoop把实验室的服务器搭建出一个基础的分布式实验环境,方便于以后进行实验测试神马的.无意中,看到了一款开源的轻量级分布式文件系统FastDFS,它是用纯C语言实现,详细信息可参见博客:分布式文件系统FastDFS架构剖析.通过收集资料,自己动手做了一些安装和测试使用,现在对前人的一些经验

FastDFS轻量级分布式文件系统部署

FastDFS介绍 FastDFS 是一个由 C 语言实现的开源轻量级分布式文件系统,作者余庆,支持 Linux.FreeBSD.AID 等 Unix 系统,解决了大数据存储和读写负载均衡等问题,适合存储 4KB~500MB 之间的小文件,如图片网站.短视频网站.文档.app 下载站等,UC.京东.支付宝.迅雷.酷狗等都有使用. FastDFS上传下载的流程 4.4 利用Java客户端调用FastDFS 服务器安装完毕后,咱们通过Java调用fastdfs 加载Maven依赖 fastdfs 没