认识文件系统
物联网学院平震宇
文件系统
文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型,一种存储和组织计算机文件和数据的方法,它使得对其访问和查找变得容易。
Linux 最早的文件系统是Minix,但是专门为Linux 设计的文件系统——扩展文件系统第二版
(EXT2)被设计出来并添加到Linux中,这对Linux产生了重大影响。
EXT2文件系统功能强大、易扩充、性能上进行了全面优化,也是所有Linux发布和安装的标准文件系统类型。
虚拟文件系统
Linux支持ext,ext2,xia,minix,umsdos,msdes,fat32 ,ntfs,proc,stub,ncp,hpfs,affs 以及 ufs 等多种文件系统。
Linux 对所有的文件系统采用统一的文件界面,用户通过文件的操作界面来实现对不同文件系统的操作。
对于用户来说,我们不要去关心不同文件系统的具体操作过程,而只是对一个虚拟的文件操作界面来进行操作,这个操作界面就是 Linux 的虚拟文件系统(VFS ) 。
VFS 作为 Linux内核中的一个软件层,用于给用户空间的程序提供文件系统接口,同时也提供了内核中的一个抽象功能,允许不同的文件系统很好地共存。
VFS 使 Linux 同时安装、支持许多不同类型的文件系统成为可能。
VFS 拥有关于各种特殊文件系统的公共界面,如超级块、inode、文件操作函数入口等。
实际文件系统的细节,统一由 VFS 的公共界面来索引,它们对系统核心和用户进程来说是透明的。
Linux上有许多可用的文件系统。
每个文件系统都有其特定的用途,以便于特定用户解决不同的问题。
☐要求文件系统在频繁的文件操作(例如,新建,删
除,截断)下能够保持较高的读写性能,要求低碎
片化。
☐Linux下的日志文件系统能保持数据的完整性,但消
耗过多系统资源,的弱点使之不能成为嵌入式系统中
的主流应用。
并且这些都是专门为硬盘这类的存储
设备优化,对于flash这类的存储介质并不适用。
☐因为现有的嵌入式文件系统的碎片化的问题,大部分的嵌入式设备只给用户提供了只读文件系统,给用户带来不便。
☐嵌入式文件系统的载体是以Flash为主的存储介质,所以为了延长Flash的使用寿命,应该尽量减少对Flash的写入操作。
☐文件系统采用Direct I/O的话,使I/O效率明显降低,增加了写入次数;但采用延时写的话,虽然能够降低碎片问题,如果加入日志系统的话,有不能保证数据的安全性。
这是一个矛盾。
常用的嵌入式文件系统-Ext2fs
☐Ext2fs 是 Linux 事实上的标准文件系统,它已经取代了它的前任—扩展文件系统
(或 Extfs)。
Extfs 支持的文件大小最大为 2 GB,支持的最大文件名称大小为
255 个字符—而且它不支持索引节点(包括数据修改时间标记)。
☐Ext2fs 支持达 4 TB 的内存。
Ext2fs 文件名称最长可以到 1012 个字符。
当创建文件系统时,管理员可以选择逻辑块的大小(通常大小可选择 1024、2048 和 4096 字节)。
Ext2fs 了实现快速符号链接:不需要为此目的而分配数据块,并且将目标名称直接存储在索引节点(inode)表中。
这使性能有所提高,特别是在速度上。
☐uClinux系统多采用Romfs文件系统,Romfs是一种相对简单、占用空间较少的文件系统。
空间的节约来自于两个方面:首先内核支持Romfs文件系统比支持ext2文件系统需要更少的代码;其次romfs文件系统相对简单,在建立文件系统超级块(Superblock)需要更少的存储空间。
Romfs是只读的文件系统,禁止写操作,因此系统同时需要虚拟盘(RAMDISK)支持临时文件和数据文件的存储。
☐只读文件系统,可以放在ROM空间,也可以在系统的RAM中,嵌入式linux中常用来作根文件系统。
☐CRAMFS中的数据已被压缩,属于只读性文件系统,不能在闪存中修改。
用户想获取数据时,CRAMFS先把数据送到RAM中,用户从RAM中读取。
一般CRAMFS的上层为RAMFS文件系统,经修改过的文件都保存在RAM中。
☐RAMFS和CRAMFS结合的缺陷在于,一旦出现掉电等特殊情况,保存在RAMFS中的修改数据将全部丢失。
☐JFFS2是比较常用的嵌入式日志文件系统。
☐ JFFS2 在扇区级别上执行闪存擦除/写/读操作要比 Ext2 文件系统好。
☐ JFFS2 提供了比 Ext2fs 更好的崩溃/掉电安全保护。
当需要更改少量数据时,Ext2 文件系统将整个扇区复制到内存(DRAM)中,在内存中合并新数据,并写回整个扇区。
这意味着为了更改单个字,必须对整个扇区(64 KB)执行读/擦除/写例程― 这样做的效率非常低。
要是运气差,当正在 DRAM 中合并数据时,发生了电源故障或其它事故,那么将丢失整个数据集合,因为在将数据读入 DRAM 后就擦除了闪存扇区。
JFFS2 附加文件而是重写整个扇区,并且具有崩溃/掉电安全保护这一功能。
☐Yaffs(Yet Another Flash File System)文件系统是专门针对NAND闪存设计的嵌入式文件系统,目前有Yaffs和Yaffs两个版本,两个版本的主要区别之一在于Yaffs2能够更好地支持大容量的NAND Flash芯片。
☐专门为Nand flash设计的日志文件系统,提供磨损平衡和调电恢复的鲁棒性。
Yaffs将文件组织成固定大小(512B)的数据段,在进行文件修改时,总是先写入新的数据块,然后将旧的的数据块从文件中删除。