[Linux 基础] -- Linux 根文件系统

本文深入解析了文件系统和根文件系统的基本概念,阐述了根文件系统在Linux启动过程中的重要作用,以及其与其他文件系统的关系。文章还详细介绍了根文件系统中各常用目录的功能和作用。

一、文件系统

文件系统是操作系统用于明确存储设备(常见的时磁盘,也有基于 NAND Flash 的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构成为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口、对对象操作和管理的软件集合、对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体的说,它负责未用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

根文件系统只是文件系统的一种比较特殊的形式而已。

尽管内核是 Linux 的核心,但文件确实用户与操作系统交互所采用的主要工具。这对 Linux 来说尤其如此,这是因为在 UNIX 传统中,它使用文件 I/O 机制管理硬件设备和数据文件。

二、根文件系统

跟文件系统首先是内核启动时所 MOUNT 的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。

根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,相对与普通的文件系统,它的特殊之处在于,它是内核启动时所挂载的第一个文件系统,内核代码的映像文件保存在跟文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如 rcS, inittab)和服务加载到内存中去运行。我们要明白文件系统和内核是完全独立的两个部分。在嵌入式中移植的内核下载到开发板上,是没有办法真真的启动 Linux 操作系统的,会出现无法加载文件系统的错误。

三、根文件系统的重要性

根文件系统之所以在前面加一个 “根” ,说明它是加载其他文件系统的 “根” ,那么如果没有这个根,其他的文件系统也就没有办法进行加载。

根文件系统包含系统启动时所必须的目录和关键性的文件,以及使其他文件系统得以关在所必要的文件。例如:

  1. init 进行的应用程序必须运行在根文件系统上;
  2. 根文件系统提供了目录 "/";
  3. Linux 挂载分区时所依赖的信息存放于跟文件系统 /etc/fstab 这个文件中;
  4. shell 命令程序必须运行在根文件系统上, 譬如 ls、cd 等命令;

总之,一套 Linux 体系,只有内核本身是不能工作的,必须要 rootfs (上的 etc 目录下的配置文件、/bin /sbin等目录下的shell命令,还有 /lib 目录下的库文件等等 )想配合才能工作。

 Linux 启动时,第一个必须关在的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。成功之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。在 Linux 中将一个文件系统与一个存储设备关联起来的过程称为挂载(mount)。使用 mount 命令将一个文件系统附着到当前文件系统层次结构中(根)。在执行挂载时,要提供文件系统类型、文件系统和挂装点。根文件系统被挂载到根目录下 “/” 上后,在根目录下就有根文件系统的各个目录,文件:/bin /sbin /mnt 等,再将其他分区挂接到 /mnt 目录上,/mnt 目录下就有这个分区的各个目录和文件。

四、如何在内核中挂载根文件系统

init/main.c->

    start_kernel()->vfs_caches_init(totalram_pages)–>

        mnt_init()–>

            /* sysfs用来记录和展示linux驱动模型,sysfs先于rootfs挂载是为全面展示linux驱动模型做好准备 */
            /* mnt_init()调用sysfs_init()注册并挂载sysfs文件系统,然后调用kobject_create_and_add()创建fs目录 */
            sysfs_init();

            /* init_rootfs()注册rootfs,然后调用init_mount_tree()挂载rootfs */
            init_rootfs();

            init_mount_tree();

  1. sysfs 文件系统目前还没有挂载到 rootfs 的某个挂载点上,后续 init 程序会把 sysfs 挂载到 rootfs 的 sys 挂载点上;
  2. rootfs 是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,Linux 在启动阶段使用 rootfs 文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,Linux 系统会将系统跟目录从 rootfs 切换到磁盘文件系统。

五、根文件系统各个常用目录简介

正常来说,根文件系统至少包括以下目录:

  1. /etc/:存储重要的配置文件;
  2. /bin/:存储常用且开机时必须用到的执行文件;
  3. /sbin/:存储着开机过程中所需的系统执行文件;
  4. /lib/:存储 /bin/ 及 /sbin/ 的执行文件所需的链接库,以及 Linux 的内核模块;
  5. /dev/:存储设备文件。

注 :五大目录必须存储在根文件系统上,缺一不可。

六、Linux 文件系统的常用目录

Linux文件系统中一般有如下几个目录:

   1、/bin目录

    该目录下存放所有用户都可以使用的、基本的命令,这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。

    /bin目录下常用的命令有:cat,chgrp,chmod,cp,ls,sh,kill,mount,umount,mkdir,mknod,test等,我们在利用Busybox制作根文件系统时,在生成的bin目录下,可以看到一些可执行的文件,也就是可用的一些命令。

    2、/sbin 目录

    该目录下存放系统命令,即只有管理员能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基本的系统命令,它们用于启动系统,修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。

    /sbin目录下常用的命令有:shutdown,reboot,fdisk,fsck等,本地用户自己安装的系统命令放在/usr/local/sbin目录下。

    3、/dev目录

    该目录下存放的是设备文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。比如通过”dev/ttySAC0”文件可以操作串口0,通过”/dev/mtdblock1”可以访问MTD设备的第2个分区。

   4 、/etc目录

    该目录下存放着各种配置文件,对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。

    5、/lib目录

    该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。

    6、/home目录

    用户目录,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。

    7、/root目录

    根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。

    8、/usr目录

    /usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享,这些主要也符合FHS标准的。/usr中的文件应该是只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。/usr目录在嵌入式中可以精减。

    9、/var目录

    与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。

    10、/proc目录

    这是一个空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。

    11、/mnt目录

    用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram /mnt/hda1 。用来临时挂载光盘、硬盘。

    12、/tmp目录

    用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值