闪存文件系统是什么
闪存文件系统(Flash file system),是一种为了在闪存设备上存储资料而设计的文件系统,如 JFFS2 与 YAFFS 等。随着移动设备的日渐增加,闪存的存储能力增加以及价格下降,这类型的文件系统变得越来越普遍。
电脑上通行的大部分文件系统,都是针对碟盘存储设备设计的,应用到闪存上并不适合。一般的文件系统,可以透过闪存转换层(Flash Translation Layer,FTL)写入闪存,但是它的缺点是写入的效率较差。因此,设计闪存文件系统仍然是有必要的。
系统概述
闪存设备跟碟盘存储设备,在硬件上有不同的特性,例如:
- 抺除区块(Erasing blocks):闪存的区块(block)在写入之前,要先做抹除(erase)的动作。抺除区块的时间可能会很长,因此最好利用系统闲置的时间来进行抹除。
- 耗损平均技术(Wear leveling):闪存的区块有抺写次数的限制,重复抺除、写入同一个单一区块将会造成读取速度变慢,甚至损坏而无法使用,因此闪存设备的驱动程序需要将抺写的区块分散,以延长闪存寿命。用于闪存的文件系统,也需要设计出平均写入各区块的功能。
- 随机存取(Random access):一般的硬盘,读写资料时,需要旋转磁盘,以找到存放的扇区,因此,一般使用于磁盘的文件系统,会作优化,以避免搜索磁盘的作用。但是闪存可以随机存取,没有查找延迟时间,因此不需要这个优化。
设计闪存文件系统的基本概念是,当存储资料需要更新时,文件系统将会把新的复本写入一个新的闪存区块,将文件指针重新指向,并在闲置时期将原有的区块抺除。例如 JFFS2 与 YAFFS,都是这样设计。
历史
最早的闪存文件系统之一,是微软所研发的 FFS2(Flash File System 2),在 1990 年代,它被应用在 MS-DOS 上。
在 1994 年间,PCMCIA 组织,通过了闪存转换层(Flash Translation Layer,FTL)的规格,允许 Linear Flash 设备能够看起来像是 FAT 磁盘设备,但是仍然保有耗损平均技术的能力。应用相同概念,但为了避免专利争议,资料光公司(Datalight)创造了 FlashFX 与 FlashFX Pro,作为商业产品。
在 Linux 上实现的闪存转换层,称为 MTD。MTD 是一个硬件的抽象层,能够让闪存设备看起来像是一种区块设备,因此能够将既有的文件系统,如 FAT、Ext、XFS 等,直接应用在闪存上。