前言
根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统而言它还是内核启动时所挂载(mount)的第一个文件系统,系统引导启动程序会在根文件系统挂载之后把一些初始化脚本(如inittab、rcS)和服务器加载到内存中去运行。我们要明白文件系统和内核是完全独立的两个部分。
在Linux中将一个文件与一个存储设备关联起来的过程叫做挂载(mount)。在执行挂载时,要提供文件系统类型、文件系统和一个挂载点。根文件系统被挂载到根目录下“/”上后,在根目录下就有根文件系统的各个目录,文件:/bin /sbin /mnt等,再将其他分区挂接到/mnt目录上,/mnt目录下就有这个分区的各个目录,文件。
以下有这几种常见的根文件系统类型:
1.initramfs型
initramfs 该文件系统直接将根文件系统直接打包进Linux内核里,这样内核和根文件系统绑定在一块成为一个单独的文件,它在Linux系统启动后加载到内存中运行,所以速度快,但浪费内存,系统升级的时候内核和根文件系统一起升级比较方便。但因为它是基于内存的文件系统,所以系统掉电之后针对根文件系统下所有文件的修改都会丢失,如果要升级根文件系统只有重新编译、烧录内核;
优缺点:正如介绍所说,由于是运行在内存之中,运行速度取决于CPU,但因此对文件系统的任何修改以及所写的任何文件都不可以保存,只有对根文件系统的修改后重新编译、烧录内核才行;
2.jffs型
jffs专门针对Norflash设计的文件系统,小页的Nandflash也可以使用,只是效率不高;因为根文件系统存放在Flash上,所以根文件存放在Flash上,所以根文件系统路径下的文件修改后掉电任然存在;
优缺点:
jffs2其功能就是管理MTD设备上实现的日志型文件系统,极适合使用于嵌入式系统;由于保存在Norflash/Nandflash上,所以不会因掉电而损失写保存在Norflash/Nandflash上的数据。但是由于挂载速度漫长,使其消耗的时间也漫长。当jffs2空间使用率过大时,读取速度会因此受到影响。
3.yaffs2型
yaffs2早期专门针对大页Norflash设计的文件系统,他的源码独立于Linux内核维护着,所以可以在单片机等裸机环境下使用(只有在该文件系统可以),linux内核想用它必须要打上补丁;在分区较大时,nandflash的挂载时间较长,现在逐渐被ubifs广泛替代。
4.ubifs型
ubifs专门针对Nandflash设计的一种文件系统,他在内核的MTD一层上面又建立了UBI一层,挂载速度、磨损均衡、读写速度非常快,目前nandflash上应用的最广的一种根文件系统;
优点:
1.可拓展性:文件挂载时间,内存消耗以及I/O速度都不依赖于Flash大小;
2.快速挂载:UBIFS mount的时间只是毫秒级,时间不依赖Flash大小;
3.write-back 支持:文件改变并不是立即提交到flash media上,而是cache这些修改,直到达到写入的条件,这减少了I/O的数目因此改善I/O性能和系统性能;
4.容忍不清洁性、快速I/O、自我恢复功能、数据完整性等。