一、根文件系统
根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。我们要明白文件系统和内核是完全独立的两个部分。所以明白“根文件系统”,首先要明白的是“什么是文件系统”,文件系统是对一个存储设备上的数据和元数据进行组织的机制。这种机制有利于用户和操作系统的交互。在一篇oracle的技术文章中看到这样一句话“尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具。这对 Linux 来说尤其如此,这是因为在 UNIX 传统中,它使用文件 I/O 机制管理硬件设备和数据文件”,这句话我是这样理解的,在Linux没有文件系统的话,用户和操作系统的交互也就断开了,例如我们使用最多的交互shell,包括其它的一些用户程序,都没有办法运行。在这里可以看到文件系统相对于Linux操作系统的重要性。
在Linux中一切皆文件,而这些所有的文件都是按照树状结构被层次化管理。如下图:
既然是树状结构那么就会有一个最高节点,在Linux中这个最高的节点就是根(/)。而根文件系统首先是内核启动时所挂载的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。我们的操作系统都是安装磁盘的某一个分区上面的(就以磁盘为例),所以根也同样存在于磁盘分区上面。这个有着根的磁盘分区也称之为根分区。所以当操作系统启动时需要把根分区作为起始分区,同样根也是由操作系统内核直接访问的(内核是存在于一个独立的/boot分区)。
根文件系统之所以在前面加一个”根“,说明它是加载其它文件系统的”根“,既然是根的话,那么如果没有这个根,其它的文件系统也就没有办法进行加载的。它包含系统引导和使其他文件系统得以挂载(mount)所必要的文件。根文件系统包括Linux启动时所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在 Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序bin目录等,任何包括这些Linux 系统启动所必须的文件都可以成为根文件系统。所以Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。成功之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。
在Linux系统中所有的文件都存在于根下,从这个根起始开始可以找到所有文件。在这个根下有一级二级子目录等,当在这个树状结构的文件系统下可以分叉的称为目录,目录只是一个路径的映射是一个特殊文件;当我们需要在磁盘上查找一个文件时就需要遍历整个磁盘速度太慢;可以根据文件的特性加以分类再使用路径的方式来寻找文件就会快的多,这也是文件系统用来管理文件的一个机制。而不可以分的称为文件。因此这种机制当找一个文件时从根出发查找文件的这种方式称绝对路径,而从当前目录开始查找称之为相对路径。