嵌入式系统电子课件-3.5 文件系统.pptx
文件系统
Linux系统中常见的文件系统构建YAFFS2文件系统0102文件系统
Linux系统中常见的文件系统1JFFS文件系统是由瑞典AxisCommunications公司开发的基于Linux2.0内核的文件系统,于1999年发布,采用GNUGPL许可证。2001年,RedHat公司的DavidWoodhouse决定对JFFS进行了改进,设计了第二个版本——JFFS2文件系统,全称为日志闪存文件系统版本2。JFFS/JFFS2是基于MTD和哈希表的日志文件系统,在意外掉电后仍可以保持数据的完整性,不会丢失数据,主要使用在Flash存储设备上,支持数据压缩、可读写、提供崩溃/掉电安全保护、提供“写平衡”支持、提供垃圾回收机制。JFFS2的缺点是挂载时间较长,当文件系统已满或接近满时,运行速度较慢,另外,采用概率方式很难保证擦写块的机会平衡。
YAFFSYAFFS是专为嵌入式系统使用NandFlash而设计的一种日志型文件系统,适用于大容量的存储设备,遵从GPL许可证。YAFFS文件系统有些类似于JFFS/JFFS2文件系统,不同之处在于后者最初是针对NorFlash设计,而NorFlash与NandFlash本质上有较大的区别,所以尽管JFFS/JFFS2文件系统也能应用于NandFlash,但并不是最优的方案。而YAFFS文件系统在功能方面比JFFS/JFFS2有所减少,例如不支持数据压缩,但是有较快的速度和较短的挂载时间,对内存的占用也较小。YAFFS还是一种跨平台的文件系统,支持Linux、eCos、WindowsCE、pSOS和ThreadX等操作系统。
YAFFS2YAFFS2与YAFFS同样是专为嵌入式系统使用NandFlash而设计的文件系统。由于嵌入式系统的发展,对于更大的存储空间和更快的读写提出了更高的要求。开发YAFFS2最初的目的是为了增加支持页大小为2K字节的更大容量NandFlash存储器,并具有更加节省内存、更高回收垃圾速度以及读写速度等特点。
CRAMFS嵌入式设备中,可以使用基于ramdisk的文件系统,但是这样做也有显著的缺点。系统运行时,需要从Flash中把ramdisk解压出来,释放到RAM中,然后通过内存来访问数据,这就导致ramdisk在Flash中占有一定的空间,同时运行时在内存中占有更大的空间,对于资源比较昂贵的嵌入式设备来说,无疑是一种浪费。采用CRAMFS文件系统,可以避免这种资源的浪费。
CRAMFSCRAMFS是压缩的文件系统,每一个页容量为4KB,单独压缩,压缩比高达2:1,可以把文件保存在容量很小的Flash中,节省了Flash空间。CRAMFS文件系统运行时解压缩,因此不支持应用程序以XIP(eXecuteInPlace,片内运行)方式运行,必须把应用程序复制到RAM中才能运行。由于其按页压缩的特点,解压时也按页进行,不需要把文件一次性全部解压缩,只根据需要解压缩相关页,对于暂时不用的页,不会出现在内存中,因此运行速度快,并且节省内存空间。因为有以上特点,CRAMFS非常适合嵌入式系统应用。但是,CRAMFS的只读属性是一个缺陷,使得用户无法对文件系统进行扩充,CRAMFS一般与基于RAM的其他文件系统配合使用。
ROMFS传统型的ROMFS文件系统是一种只读文件系统,结构简单、紧凑,节约空间。一方面内核支持ROMFS文件系统比支持EXT2文件系统需要更少的代码;其次ROMFS文件系统相对简单,在建立文件系统超级块(superblock)时需要更少的存储空间。ROMFS不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟RAM盘的方法进行处理。ROMFS按顺序存放数据,因而支持应用程序以XIP方式运行,在系统运行时,节省RAM空间。uCLinux系统通常采用ROMFS文件系统。
ramdiskramdisk建立在内存当中,实际并非一种文件系统,而是一种将文件系统加载到内存当中的机制。ramdisk是将制作好的根文件系统压缩后存储于Flash中,系统启动时解压缩到RAM,然后挂载到“/”,这种方法简单易行,但是由于RAM中的文件系统不是压缩的,因此比较占用宝贵的内存资源。
RAMFSRAMFS是LinusTorvalds开发的一种基于内存的文件系统,它在RAM中放置所有的文件,所有读/写操作也发生在RAM中,可以用来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,既避免了对Flash存储器的读写损耗,也提高了数据读写速度。Ramfs相对于传统的ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。
NFS网络文件系统NFS是由Sunmicrosystems公司开发,基于TCP/IP