Linux 文件系统

下面主要讨论基于Flash的文件系统linux

 

在嵌入式Linux应用中,主要的存储设备为RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),经常使用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs等。网络

FLASH重要特性:写操做只能把对应位置1变0,而删除才能0变1,而且是整块(block)的删。(期待进一步分析工做原理)。并发

闪存主要就是NAND和NOR。FLASH擦写次数有限,NAND闪存还有特殊的硬件接口和读写时序,因此要针对FLASH的硬件特性进行文件系统的设计,传统的ext2等用在Flash会有诸多弊端(具体是?。。)oop

如图,MTD是一主要设备,为上下提供抽象接口。So:Flash文件系统基于MTD驱动层。使用MTD驱动程序的主要优势在于,它是专门针对各类非易失性存储器(以闪存为主)而设计的,于是它对Flash有更好的支持、管理和基于扇区的擦除、读/写操做接口。性能

有意思的特性:FLASH芯片既能够一分多(分区),分别用不一样的文件系统;也能够多合一(分区),采用一个文件系统。即文件系统是针对于存储器分区而言的,而非存储芯片。spa

 

JFFS2:Journalling Flash File System v2 ,第二版的JFFS,也可能有JFFS3,blabla....主要是给NOR FLASH。jffsx不适合用于NAND闪存主要是由于NAND闪存的容量通常较大,这样致使jffs为维护日志节点所占用的内存空间迅速增大,另外,jffsx文件系统在挂载时须要扫描整个FLASH的内容,以找出全部的日志节点,创建文件结构,对于大容量的NAND闪存会耗费大量时间操作系统

YAFFS/YAFFS2:Yet Another Flash File System。专为NAND设计的日志型文件系统.net

 yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减小了一些功能(例如不支持数据压缩),因此速度更快,挂载时间很短,对内存的占用较小。另外,它仍是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。设计

  yaffs/yaffs2自带NAND芯片的驱动,而且为嵌入式系统提供了直接访问文件系统的API,用户能够不使用Linux中的MTD与VFS,直接对文件系统操做。固然,yaffs也可与MTD驱动程序配合使用。调试

  yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提高。


 Cramfs:Compressed RAM File System

Linus参与开发,也基于MTD

 

Cramfs文件系统以压缩方式存储,在运行时解压缩,因此不支持应用程序以XIP方式运行,全部的应用程序要求被拷到RAM里去运行,但这并不表明比Ramfs需求的RAM空间要大一点,由于Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一会儿就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当咱们读取的档案不在内存时,Cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到RAM中。

  另外,它的速度快,效率高,其只读的特色有利于保护文件系统免受破坏,提升了系统的可靠性。

  因为以上特性,Cramfs在嵌入式系统中应用普遍。

  可是它的只读属性同时又是它的一大缺陷,使得用户没法对其内容对进扩充。

  Cramfs映像一般是放在Flash中,可是也能放在别的文件系统里,使用loopback 设备能够把它安装别的文件系统里。

 

Romfs

  传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,于是支持应用程序以XIP(eXecute In Place,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统一般采用Romfs文件系统。

  其余文件系统:fat/fat32也可用于实际嵌入式系统的扩展存储器(例如PDA, Smartphone, 数码相机等的SD卡),这主要是为了更好的与最流行的Windows桌面操做系统相兼容。ext2也能够做为嵌入式Linux的文件系统,不过将它用于FLASH闪存会有诸多弊端。

 

 

Other(Flash之外):

基于RAM的文件系统

  (1) Ramdisk

  Ramdisk是将一部分固定大小的内存看成分区来使用。它并不是一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,而且能够做为根文件系统。将一些常常被访问而又不会更改的文件(如只读的根文件系统)经过Ramdisk放在内存中,能够明显地提升系统的性能。

  在Linux的启动阶段,initrd提供了一套机制,能够将内核映像根文件系统一块儿载入内存。

  (2)ramfs/tmpfs

  Ramfs是Linus Torvalds开发的一种基于内存的文件系统,工做于虚拟文件系统(VFS)层,不能格式化,能够建立多个,在建立时能够指定其最大能使用的内存大小。(实际上,VFS本质上可当作一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)

  Ramfs/tmpfs文件系统把全部的文件都放在RAM中,因此读/写操做发生在RAM中,能够用ramfs/tmpfs来存储一些临时性或常常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提升了数据读写速度。

  Ramfs/tmpfs相对于传统的Ramdisk的不一样之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。

  Tmpfs的一个缺点是当系统从新引导时会丢失全部数据。

 

网络文件系统NFS (Network File System)

  NFS是由Sun开发并发展起来的一项在不一样机器、不一样操做系统之间经过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,能够利用该技术在主机上创建基于NFS的根文件系统,挂载到嵌入式设备,能够很方便地修改根文件系统的内容。

  以上讨论的都是基于存储设备的文件系统(memory-based file system),它们均可用做Linux的根文件系统。实际上,Linux还支持逻辑的或伪文件系统(logical or pseudo file system),例如procfs(proc文件系统),用于获取系统信息,以及devfs(设备文件系统)和sysfs,用于维护设备文件

相关文章
相关标签/搜索