JFFS3 文件系统

闪存对文件系统的影响 闪存转换层 JFFS3 JFFS2 的问题 Index 的存储 The Journal Garbage collection Superblock Links 看完了闪存,继续看文件系统。网上搜了一圈,发现都是讲 Andriod 的目录结构的,讲文件系统本身的少。目前能确认的是历史上曾经用过 ext4,yaffs,yaffs2 等。 估计目前主流的应该是 ext4。不过在搜索的时候先发现了一篇讲 jffs3 的,它在嵌入式系统上应用比较广泛,也是针对 Flash 存储特定设计的文件系统。不太确定现在的使用范围,但是拿出来研究下还是不错的。 闪存对文件系统的影响 闪存跟磁盘有很多不同的地方,在设计文件系统的时候,二者有很多不同的考量。简单的对比表格如下 闪存 磁盘 最小寻址单位(读) 字节 扇区 最小寻址单位(写) NOR FLASH 是字节,NAND FLASH 是页,擦除是块 扇区 寿命 由擦写块的最大可擦写次数 机械故障 闪存的这些特性,导致我们在设计文件系统的时候,必须考虑以下的问题: out of place update: 对于磁盘来讲,我们更新数据可以直接原地更新。但是闪存不行,因为无法将 bit 位从 0 -> 1。所以对于闪存的数据更新只能是在另外一个地方写入数据,然后将原数据标记为 dirty,再通过 GC 来定期回收. wear leveling: 磨损平衡。闪存的使用寿命是由擦写块的最大可擦写次数来决定的。超过了最大可擦写次数,这个擦写块就成为坏块(bad block)了。因此为了避免某个擦写块被过度擦写,以至于它先于其他的擦写块达到最大可擦写次数,我们应该在尽量小的影响性能的前提下,使擦写操作均匀的分布在每个擦写块上 闪存转换层 为了能让普通的文件系统(磁盘上的)能够在闪存上正常运行,需要有一个转换层:Flash Translation Layer(FTL)。它的功能就是将底层的闪存模拟成一个具有 512 字节扇区大小的标准块设备(block device)。对于文件系统来说,就像工作在一个普通的块设备上一样,没有任何的差别。 ...

2019-04-20 · 2 分钟 · 360 字 · 涯余