明远智睿技术论坛

 找回密码
 立即注册
搜索
查看: 3023|回复: 0
打印 上一主题 下一主题

文件系统介绍

[复制链接]

56

主题

60

帖子

644

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
644
跳转到指定楼层
楼主
发表于 2020-4-30 15:59:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原贴:https://blog.csdn.net/silent123go/article/details/52642841
一、linux文件系统结构

(1)Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。
(2)在嵌入式Linux下,MTD(Memory Technology Device,存储技术设备)为底层硬件(闪存)和上层(文件系统)之间提供一个统一的抽象接口,即Flash的文件系统都是基于MTD驱动层的。
(3)使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主)而设计的,因而它对Flash有更好的支持、管理和基于扇区的擦除、读/写操作接口。

二、linux文件系统与根文件系统
1.文件系统
文件系统决定了数据在磁盘上的存储和访问方式,不同的存储介质有着不同的特性,需要选择适当的文件系统。Norflash一般使用jffs2,Nandflash早期使用的是yaffs2,现在一般使用ubifs,因为随着技术的进步Nandflash的容量越来越大,yaffs2已经hold不住了。而mmc我们现在使用的是ext4文件系统。

2.根文件系统
       根文件系统是一种特殊的文件系统,特殊就在于它必须有目录结构。
       Linux启动时,第一个必须挂载的是根文件系统,若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。成功之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统
        根文件系统之所以在前面加一个”根“,说明它是加载其它文件系统的”根“,既然是根的话,那么如果没有这个根,其它的文件系统也就没有办法进行加载的。它包含系统引导和使其他文件系统得以挂载(mount)所必要的文件。根文件系统包括Linux启动时所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在 Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序bin目录等,任何包括这些Linux 系统启动所必须的文件都可以成为根文件系统。  

3.常见文件系统
1.JFFS2日志闪存文件系统版本2 (Journalling Flash FileSystem v2)
            JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中。
            主要用于NOR型闪存,基于MTD驱动层。
            优点:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。
            缺点:主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。
            目前jffs3正在开发中。关于jffs系列文件系统的使用详细文档,可参考MTD补丁包中mtd-jffs-HOWTO.txt。
            jffsx不适合用于NAND闪存,主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外,jffsx文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。
2.yaffs:Yet Another Flash File System
            yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。
            另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。
            yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与MTD驱动程序配合使用。
            yaffs与yaffs2的主要区别:yaffs仅支持小页(512 Bytes) NAND闪存,yaffs2则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。
3.nfs网络文件系统
            NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。
            在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。
4.ubifs(UnsortedBlock Image File System,UBIFS)无排序区块图像文件系统
            UBIFS可以认为是JFFS2文件系统的下一代。最早在2006年由IBM与Nokia的工程师ThomasGleixner,ArtemBityutskiy所设计,专门为了解决MTD(MemoryTechnology Device)设备所遇到的瓶颈。由于NandFlash容量的暴涨,YAFFS等皆无法再去控制NandFlash的空间。UBIFS通过子系统UBI处理与MTDdevice之间的动作。
            UBIFS在设计与性能上均较YAFFS2、JFFS2更适合NAND FLASH。UBIFS支持write-back,其写入的数据会被cache,直到有必要写入时才写到flash,大大地降低分散小区块数量并提高I/O效率。UBIFSUBIFS文件系统目录存储在flash上,UBIFSmount时不需要scan整个flash的数据来重新创建文件目录。支持on-the-flight压缩文件数据,而且可选择性压缩部份文件。另外UBIFS使用日志(journal),可减少对flashindex的更新频率。
5.ext4文件系统
             ext4和yaffs2是日志类型的文件系统。日志文件系统就是一种具有故障恢复能力的文件系统,它利用日志来记录尚未提交到文件系统的修改,以防止元数据破坏。
            一般来说,ext2或者ext4的文件系统不适用于nand flash,因为nand flash的读写特性,一般使用专为nand flash开发的文件系统,如yaffs2,jffs2,ubifs等。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|明远智睿  

GMT+8, 2024-11-23 08:56 , Processed in 0.057826 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表