Linux常用文件系统概述-Flash篇

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:      总的来分,Linux文件系统分为两类,基于Flash和基于RAM的文件系统。两者的特点是,基于Flash的文件系统是掉电可保存的,但对于RAM的文件系统掉电是会丢失的。        一、基于Flash的日志型的文件系统        1、只读的CramFS文件系统简介        CramFS是一个压缩式的文件系统,它并不需要一次性的将文件系统中的所有内容都解压缩到内存之中,而是在系统需要访问某个位置的数据时,首先计算出该数据在CramFS文件系统中的位置,将这段数据实时地解压缩到内存中,而不是所有的数据。
     总的来分,Linux文件系统分为两类,基于Flash和基于RAM的文件系统。两者的特点是,基于Flash的文件系统是掉电可保存的,但对于RAM的文件系统掉电是会丢失的。
 
     一、基于Flash的日志型的文件系统
 
     1、只读的CramFS文件系统简介
 
     CramFS是一个压缩式的文件系统,它并不需要一次性的将文件系统中的所有内容都解压缩到内存之中,而是在系统需要访问某个位置的数据时,首先计算出该数据在CramFS文件系统中的位置,将这段数据实时地解压缩到内存中,而不是所有的数据。
     A、特点:
     a. 采用实时解压缩方式;
     b. CramFS的数据都是经过处理、打包之后的,所以其通常不支持写操作(通常tmp目录是可以写的,这个目录应该是默认挂载成了RamFS),这个特性刚好适合嵌入式应用中ROM类型的只读存储设备使用;
     c. 在CramFS中的文件大小不能超过16MB;
     (根据网友 MicrochipEmbed 的提醒,源码之中是可以修改这个大小的cramfs_fs.h
       #define CRAMFS_MODE_WIDTH 16)
     d. 当前版本的CramFS只支持PAGE_CACHE_SIZE为4096的内核,因此要特别注意内核的配置。
     B、制作方法
     准备好一个根文件系统rootfs,利用工具mkcramfs生成镜像文件cram.img(本文环境为ubuntu10.04,有些镜像制作工具如果没有的话,可以自行安装)
    
  1. $mkfs.cramfs /rootfs cram.img
  2. 可以挂载测试一下,采用虚拟的loopback的块设备
  3. $mount -o loop -t cramfs /cram.img /mnt
  4. $ls /mnt
  5. 查看一下,是否有/rootfs中的例如bin、sbin、usr等目录
  6. 可以将其下载到nand MTD的root分区,设置好uboot的启动参数,例如
  7. $set bootargs noinitrd root=/dev/mtdblock4 console=ttyS0,115200 rootfstype=cramfs mem=64mb
  并且特别注意内核配置时要选上 File systems  --->[*] Miscellaneous filesystems  --->    Compressed ROM file system support (cramfs) 以支持cramfs文件系统,同时还应该将MTD相关的块设备和分区选上,那么,系统正常挂载cramfs之后会出现 VFS: Mounted root (cramfs filesystem) readonly.
     2、基于NAND Flash的yaffs文件系统简介

 
     yaffs文件系统是专门为NAND Flash设计的文件系统,是一种日志型的文件系统。
     A、特点:
     a. 源码公开,具有很好的移植性,可以在Linux、uClinux和WinCE等平台运行,甚至于没有操作系统的环境也能够使用;
     b. yaffs利用NAND闪存提供的每个页面16字节的备用空间类存放ECC和文件系统的组织信息,能够实现错误检测和坏块处理;
     c. 对于小页面(512B+16B/页)通常采用yaffs,而对于大页面(2KB+64B/页)或者总量超过512MB的NAND Flash则采用yaffs2。
     B、制作
     关于yaffs镜像的制作工具应该根据具体的NAND flash的页大小有所区分

  1. $mkyaffsimage /rootfs yaffs.img

     C、使用
     烧写yaffs镜像到NAND分区也是很有讲究的因为该镜像的文件里面除了以512字节为单位的一个页面的数据外,还有16字节的NAND Flash备份数据,应该如以下方法烧写

  1. $usbload
  2. DNW下载镜像 //注意下载地址
  3. $nand erase 0x2000000 0x3E000000
  4. $nand write.yaffs 0x41000000 0x2000000 $(filesize)
可以有两种方法使用,在uboot启动参数的时候就指定好根文件系统采用yaffs(从延长nand寿命角度和运行速度来讲不赞同这么使用)

  1. $set bootargs root=/dev/mtdblock2 console=ttyS0,115200 rootfstype=yaffs mem=208mb

或者采用其他文件系统(如cramfs、ramdisk、initramfs或者tmpfs等)作为根文件系统,在系统和根文件系统起来之后,在运行
 
  1. $mount -t yaffs /dev/mtdblock3 /mnt
  2. 在/mnt目录下建一个文件
  3. $touch /mnt/test
  4. 卸载之后重新挂载该文件系统
  5. $umount /mnt
  6. $mount -t yaffs /dev/mtdblock3 /mnt
  7. 在看一下刚才的test文件还是存在的
  8. $ls /mnt

或者建一个专门的system目录,以用作QT等较大型的图形界面的镜像的挂载点。

     3、基于NOR Flash的jffs文件系统简介

     JFFS日志闪存文件系统最早是由瑞典Axis Communications公司基于Linux 2.0的内核未嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统。JFFS基于MTD驱动层,主要用于NOR型闪存。JFFS3还处于设计阶段,主要为了解决JFFS2的不可扩展性,其设计目标是支持大容量闪存(>1TB)的文件系统。
     A、特点:
     a. 可读写;
     b. 支持数据压缩(YAFFS不支持压缩,适合存储容量较大的文件系统);
     c. 基于哈希表的日志型文件系统;
     d. 提供了崩溃/掉电安全保护;
     e. 提供“写平衡”支持等;
      B、制作和使用
  1. $mkfs.jffs2 -d /rootfs -o jffs2.img
  2. 在ubuntu上直接挂载测试
  3. $mount -t jffs2 jffs2.img /mnt -o loop
  4. $ls /mnt
能正确显示之前准备的根文件系统,则说明制作成功。

 
     4、UBI/UBIFS文件系统简介
 
     UBIFS是由Thomas Gleixner,Artem Bityutskiy等人于2006发起的,致力于开发性能卓越、扩展性高的Flash专用文件系统。UBI是一种类似于LVM的逻辑卷管理层,主要实现损益均衡,逻辑擦除块、卷管理和坏块管理等,而UBIFS则是基于UBI的Flash日志文件系统。UBI并不直接工作于MTD之上而是工作于UBI卷之上,这是它与JFFS2、YAFFS2的一个显著区别。
     使用UBIFS时,内核选项配置
 
  1. Device Drivers --->
  2.   *> Memory Technology Device (MTD) support --->
  3.     UBI - Unsorted block images --->
  4.      *> Enable UBI
  5.      *> MTD devices emulation driver (gluebi)
  6. File systems --->
  7.   [*] Miscellaneous filesystems --->
  8.     *> UBIFS file system support
     在ubuntu上使用mtd-utils制作UBI镜像,例如

  1. $mkfs.ubifs -r rootfs -m 2048 -e 129024 -c 4096 -o ubifs.img
  2. $ubinize -o ubi.img -m 2048 -s 512 -p 128KiB ubifs.conf
     关于ubifs文件系统的相关知识,可以参考
     http://blog.chinaunix.net/uid-15706699-id-2670964.html  让uboot支持ubi
     这些文章对uboot和内核中如何烧写和支持ubifs给出了详细的描述,引用之,在此谢过。

 

相关参考:

《ARM嵌入式Linux系统开发技术详解》杨水清等

《LINUX设备驱动开发详解》宋宝华等


相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
6月前
|
自然语言处理 监控 Linux
Linux 内核源码分析---proc 文件系统
`proc`文件系统是Linux内核中一个灵活而强大的工具,提供了一个与内核数据结构交互的接口。通过本文的分析,我们深入探讨了 `proc`文件系统的实现原理,包括其初始化、文件的创建与操作、动态内容生成等方面。通过对这些内容的理解,开发者可以更好地利用 `proc`文件系统来监控和调试内核,同时也为系统管理提供了便利的工具。
250 16
|
8月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
443 15
|
9月前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
1786 7
|
9月前
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
209 7
|
10月前
|
人工智能 Java 关系型数据库
Red Hat Enterprise Linux 9.5 发布下载,新增功能亮点概述
Red Hat Enterprise Linux 9.5 发布下载,新增功能亮点概述
547 4
Red Hat Enterprise Linux 9.5 发布下载,新增功能亮点概述
|
9月前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
10月前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
254 8
|
10月前
|
存储 Linux 文件存储
Linux文件系统
Linux文件系统 一切皆文件 在Linux中,“一切皆文件”的概念意味着系统中的所有资源,包括硬件设备、目录及进程等,均被视为文件。这种设计简化了操作和管理,具体包括: 普通文件:存储数据的常规文件。 目录文件:包含其他文件和子目录的文件。 进程文件:在/proc目录下代表系统中运行的进程。 设备文件:位于/dev目录,代表硬件设备。 网络字节流套接字文件:用于网络通信的数据流。 链接文件:指向另一个文件的符号链接或硬链接。 管道文件:用于进程间通信的文件。
157 7
|
编解码 Linux 程序员
深度探索Linux操作系统 —— 构建根文件系统2
深度探索Linux操作系统 —— 构建根文件系统
151 12
|
存储 Linux 索引
Linux 下最主流的文件系统格式——ext
【9月更文挑战第8天】硬盘被划分为若干相同大小的块(Block),默认大小为4K,便于灵活管理文件数据。文件数据分散存放于这些块中,提高了数据添加、删除和插入的便利性。