Linux虚拟文件系统

Posted 四季帆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux虚拟文件系统相关的知识,希望对你有一定的参考价值。

1. 磁盘分区与目录

所有磁盘分区都必须被挂载到目录上才能使用。所谓的“挂载”就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下,即进入该目录就可以读取该分区的数据,这个操作称之为“挂载”,进入点的那个目录称为“挂载点”。

由于整个Linux系统最重要的是根目录,因此根目录一定需要挂载到某个分区的,其它的目录可依据用户需求挂载到不同的分区。

上图中,假设我的硬盘分为三个区,分区1被挂载到根目录,分区2被挂载到/home这个目录,分区3被同时挂载到/var和/tmp目录===》即通过/及其以下的目录可以访问到分区1的数据;通过/home可以访问到分区2的数据;通过/var和/tmp目录可以访问到分区3的数据。

所有磁盘分区都必须被挂载后才可以使用,一个分区只有建立了文件系统(即分区的格式化)后,才可以被使用。

2. 虚拟文件系统的作用

为了能够支持各种实际文件系统,VFS定义了所有文件系统都支持的基本的、概念上的接口和数据结构;同时,实际文件系统也需要提供VFS所期望的抽象接口和数据结构,将自身的诸如文件、目录等概念在形式上与VFS的定义保持一致。

换句话说,一个实际的文件系统想要被Linux支持,就必须提供一个符合VFS标准的接口,才能与VFS协同工作。实际文件系统在统一的接口和数据结构下隐藏了具体的实现细节,所以在VFS层和内核的其它部分看来,所有文件系统都是相同的。下图显示了VFS在内核中与实际文件系统的协同关系:

3. 关于文件系统的三个易混淆的概念

创建:以某种方式格式化磁盘的过程就是在其之上建立一个文件系统的过程。创建文件系统时,会在磁盘的特定位置写入关于该文件系统的控制信息。
注册:向内核报到,声明自己能被内核支持,一般在编译的时候注册,也可以加载模块的方式手动注册。注册过程实际上是将表示各实际文件系统的数据结构struct file_system_type实例化。
安装:执行mount操作进行挂载,将文件系统加入到Linux的跟文件系统的目录树结构上。

4. 索引节点(inode)

inode有两种,一种是VFS的inode,一种是具体文件系统的inode。前者在内存中,后者在磁盘中,所以每次其实是将磁盘中的inode填充到内存中的inode。

inode号是唯一的,表示不同的文件,在Linux内部,访问文件都是通过inode号来进行的。

当创建一个文件的时候,就给文件分配了一个inode。一个inode只对应一个实际文件,一个文件也会只有一个inode。

5. sys_open函数调用关系图

sys_open()
    do_sys_open()
        getname()
        get_unused_fd_flags()
        do_filp_open()
            set_nameidata()
            path_openat()
                get_empty_filp()
 
                path_init()
                link_path_walk()
                do_last()
                    lookup_open()
                        atomic_open()
                            error = dir->i_op->atomic_open()
                    may_open()
                    vfs_open()
                        do_dentry_open()
                            f->f_op = fops_get(inode->i_fop);
                            open = f->f_op->open;
                            error = open(inode, f);
 
            restore_nameidata()
        fsnotify_open()
        fd_install()

6. 挂载命令

mount命令使用格式

mount [-参数] [设备名称] [挂载点]

 

 

 

以上是关于Linux虚拟文件系统的主要内容,如果未能解决你的问题,请参考以下文章

linux虚拟机输入修改主机名代码后现实该文件不存在

虚拟机装linux使用samba共享,本地看代码会卡。

构建调试Linux内核网络代码的环境MenuOS系统

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

虚拟机数据恢复Linux系统下误删除KVM虚拟机的数据恢复案例

Linux内核虚拟文件系统