Linux一个重要的哲学是:
一切皆文件。而文件与文件系统是密切相关的,本篇笔记我们来一起学习、理清那些令我们眼花缭乱的文件系统。
文件系统的粗略分类:
下面依次介绍:
根文件系统
根文件系统是内核启动时挂载的第一个文件系统,内核代码镜像文件存储在根文件系统中,系统引导启动程序会将一些基本的初始化脚本和服务加载到内存中,在挂载根文件系统后运行。
根目录/根文件系统下有许多子目录:
虚拟文件系统
从上面的分类图中,我们可以知道Linux中有很多文件系统,并且它们是共存的。那么在Linux中如何把所有东西都做成一个文件呢?这是由于虚拟文件系统软件抽象层的存在,为用户屏蔽了底层文件系统的差异,为上层提供了统一的访问接口。如图所示:
无论最底层的文件系统是什么,我们的顶层客户端都可以访问文件系统中的文件,即使使用系统调用接口或glibc接口,这使得一切都有可能是一个文件。
真实文件系统
真正的文件系统实际上是实际存储设备的文件系统,安装在EEPROM、Nor FLASH、NAND FLASH、eMMC等内存中。
1、ext2
Ext2 second extended filesystem是Linux内核早期使用的文件系统,但随着技术的发展,不再推荐ext2文件系统。Ext2是一个非日志文件系统。
2、ext3
Ext3是第三个扩展文件系统,它是一个日志文件系统。主要特点:
高可用性:系统使用ext3文件系统后,它不会 即使在异常关闭后,也不需要检查文件系统。停机后,恢复ext3文件系统只需要几十秒。
数据完整性:ext3文件系统可以大大提高文件系统的完整性,避免意外停机对文件系统的损害。
3、ext4
EXT4是第四个扩展文件系统,是一个日志文件系统,是ext3文件系统的继承者。主要特点:
子目录更多:Ext3目前只支持32000个子目录,而Ext4取消了这个限制,理论上支持无限子目录。
块数和I节点数更多:Ext3文件系统使用32位空间记录块数和I节点数,而Ext4文件系统将其扩展到64位。
伪文件系统
Linux内核提供了sysfs、procfs、devtmpfs等伪文件系统。伪文件系统存在于内存中,不占用硬盘。以文件的形式向用户提供一些系统信息,用户可以通过读写这些文件来读取和修改一些系统信息。
1、过程文件
Procfs是process file system的缩写,包含一个伪文件系统,用于通过内核访问进程信息。这个文件系统通常安装在/proc目录中。
因为/proc不是一个真正的文件系统,它不占用存储空间,只是有限的内存。
/proc目录的内容如下:
其中,这些以数字命名的文件夹是与进程相关的部分,这些数字是进程的PID号。
我们可以访问系统信息,例如读取CPU相关信息:
检查内核支持的文件系统类型:
可以看出内核支持很多文件系统,上面我们的文件系统总结中只列出了其中的一小部分。有兴趣的朋友可以自己去了解别人。
我们可以通过/proc目录了解到很多信息,你也可以自己尝试查看其他信息。
2、sysfs
Sysfs是一个基于内存的文件系统,它的作用是以文件的形式向用户程序提供内核信息。Sysfs文件系统挂载在/sys挂载点上。/sys目录的内容如下:
与proc相比,sysfs有很多优点,其中最重要的是设计的清晰性。sysfs的设计原则是一个属性文件只做一件事。sysfs属性文件一般只有一个值,可以直接读写。
整个/proc/scsi目录在2.6内核中已被标记为LEGACY,其功能已被相应的/sys属性文件完全取代。新设计的内核机制应该尽可能使用sysfs机制,同时保持proc为pure quot进程文件系统 quot。
3、devtmpfs
tmpfs的作用是在Linux内核启动的前期建立一个初步的/dev,让一般的启动程序不必等待udev。它的主要功能是管理/dev目录下的设备节点。)来缩短GNU/Linux的引导时间。
在devtmpfs出现之前,/dev/下的设备节点应该都是udev-daemon用mknod程序接收内核事件或者直接调用mknod系统后创建的;基本上现在不用udev了。几乎所有的设备文件都是由内核直接创建的。
在我们之前的hello驱动和led驱动的实验中,动态加载我们的驱动后,会在/dev目录下生成相应的节点。只要我们在应用程序中操作这个节点,我们就可以间接控制我们的led:
再次体现了Linux中一切都是文件的概念。
网络文件系统
NFS,即网络文件系统,使用户能够访问网络上其他地方的文件,就像他们使用自己的计算机一样。它通过使用客户机/服务器体系结构来工作:
服务器向其他计算机提供对文件系统的访问,其过程称为输出。当NFS的客户程序访问共享文件系统时,它 quot运输 quot他们来自NFS服务器。
文件通常以块的形式传输。在我们的嵌入式Linux中,NFS的主要应用是将宿主文件共享给目标板,以便目标板方便地运行程序。例如,我们以前笔记中的实验框图:
以上是笔记分享。如有错误,请指出。谢谢大家!本文主要讨论共享几个重要的文件系统。了解这些文件系统有助于我们学习嵌入式Linux。
王者之心2点击试玩