玩转Linux,先把文件系统搞懂
文件系统中,每一页 (4KB) 被单独压缩,可以随机页访问,其压缩比高达 2:1, 为嵌入式系统节省大量的 Flash 存储空间,使系统可通过更低容量的 FLASH 存储相同的文件,从而降低系统成本。
Cramfs 文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以 XIP 方式运行,所有的应用程序要求被拷到 RAM 里去运行,但这并不代表比 Ramfs 需求的 RAM 空间要大一点,因为 Cramfs 是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时, Cramfs 文件系统自动计算压缩后的资料所存的位置,再即时解压缩到 RAM 中。
另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。
由于以上特性, Cramfs 在嵌入式系统中应用广泛。
但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。
Cramfs 映像通常是放在 Flash 中,但是也能放在别的文件系统里,使用 loopback 设备可以把它安装别的文件系统里。
(4) Romfs
传统型的 Romfs 文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以 XIP(eXecute In Place ,片内运行 ) 方式运行,在系统运行时,节省 RAM 空间。 uC linux 系统通常采用 Romfs 文件系统。
其他文件系统: fat/fat32 也可用于实际嵌入式系统的扩展存储器 ( 例如 PDA, Smartphone, 数码相机等的 SD 卡 ) ,这主要是为了更好的与最流行的 Windows 桌面操作系统相兼容。 ext2 也可以作为嵌入式 Linux 的文件系统,不过将它用于 FLASH 闪存会有诸多弊端。
2. 基于 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 的一个缺点是当系统重新引导时会丢失所有数据。
3. 网络文件系统 NFS (Network File System)
NFS 是由 Sun 开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式 Linux 系统的开发调试阶段,可以利用该技术在主机上建立基于 NFS 的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。
以上讨论的都是基于存储设备的文件系统 (memory-based file system) ,它们都可用作 Linux 的根文件系统。实际上, Linux 还支持逻辑的或伪文件系统 (logical or pseudo file system) ,例如 procfs(proc 文件系统 ) ,用于获取系统信息,以及 devfs( 设备文件系统 ) 和 sysfs ,用于维护设备文件。
附录: NOR 闪存与 NAND 闪存比较
- REDIce-Linux--灵活的实时Linux内核(11-12)
- linux文件系统基础(02-09)
- Linux标准趋向统一(11-12)
- linux基础技术(02-09)
- LINUX的目录树(02-09)
- 在Windows下启动Linux(02-09)