打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Linux文件系统相关知识汇总
1. linux下分区和目录的关系是怎么样的?
       任何一个分区都必须挂载到某个目录下。目录是逻辑上的概念,分区是物理上的概念。磁盘linux分区都必须挂载到目录树上的某个具体的目录上才能进行读写操作。根目录是所有linux的文件和目录所在的地方,需要挂载上一个磁盘分区。 这也是我们通过adb工具来操作(读写数据)Android手机(或平板)时,需要先将执行“adb remount ”命令,把手机设备挂载到电脑上的原因。

2.为什么要分区?
        可以把不同资料,分别放入不同分区中管理,降低资料丢失的风险。大硬盘搜索范围大,效率低,分区后可提高搜索率。磁盘配合只能对分区做设定。Linux下的/home /var /usr/local经常是单独分区,因为经常会操作,容易产生碎片。

3.什么是挂载?
        当要使用某个设备时,例如要读取硬盘中的一个格式化好的分区、光盘或软件等设备时,必须先把这些设备对应到某个目录上,而这个目录就称为“挂载点(mount point)”,这样才可以读取这些设备,而这些对应的动作就是“挂载”。 将物理分区细节屏蔽掉。用户只有统一的逻辑概念。所有的东西都是文件。Mount命令可以实现挂载:
mount [-fnrsvw] [-t vfstype] [-o options] device dir

4.机器上的硬盘分区是如何被挂载的
        这主要是它利用了/etc/fstab文件。每次内核加载它知道从这里开始mount文件系统。每次系统启动会根据该文件定义自动挂载。若没有被自动挂载,分区将不能使用。

5.linux中查看分区和目录及使用情况的命令
 fdisk:查看硬盘分区表
df:查看分区使用情况
du: 查看文件占用空间情况   

6.文件的存储结构
                                                         (图片来自网络)
linux正统的文件系统(ext2、3等)将硬盘分区时会划分出目录块、inode Talble区块和data block数据区域。一个文件由一个目录项、inode和数据区域块组成。Inode包含文件的属性(如读写属性、owner等,以及指向数据块的指针),数据区域块则是文件内容。当查看某个文件时,会先从inode table中查出文件属性及数据存放点,再从数据块中读取数据。
 
 

(目录项结构,图片来自网络)

目录项:包括文件名和inode节点号。
 
 (inode结构,图片来自网络)

Inode:又称文件索引节点,是文件基本信息的存放地和数据块指针存放地。
数据块:文件的具体内容存放地。

7.软连接与硬连接
        硬连接:给文本一个副本,同时建立二者间的连接关系,修改其中一个,与其连接的文件同时被修改。如果删除其中一个,其他连接的文件不受影响。
        软连接:也叫符号连接,类似windows中的快捷方式。当源文件删除时,符号链接的文件就没有意义。删除这个连接不会影响到源文件,但对连接文件的使用、引用斗志直接调用源文件的。
 
 
(软/硬连接示意图,图片来自网络)
     二者的区别:
     1)硬链接原文件和新文件的inode编号一致。而软链接不一样。
     2)对原文件删除,会导致软链接不可用,而硬链接不受影响。
     3)对原文件的修改,软、硬链接文件内容也一样的修改,因为都是指向同一个文件内容的。

8. Linux下目录与文件的关系
        Linux中目录也被作为文件看待,只是目录是一种比较特殊的文件。其特殊之处在于文件的内容是该目录中文件和子目录的dentry的描述符,通过这些dentry的描述符可以找到文件或子目录的dentry,进而找到相应的inode。

9. 多个进程打开同一个文件到底发生了什么?
    一个文件可以被多次打开,并且多个进程对一个文件的访问权限可能不同,因此打开方式就会不同(只读、读写、可执行)。而dentry 和 inode 只能描述一个物理的文件,无法描述“打开”这个概念。
因此有必要引入 file 结构,来描述一个“被打开的文件”。每打开一个文件,就创建一个 file 结构,该结构包含以下信息:
1)打开这个文件的进程的 uid,pid
2)打开的方式
3)读写的方式
4)当前在文件中的位置  
实际上,打开文件的过程正是建立file, dentry, inode 之间的关联的过程。

10.虚拟文件系统(VFS)
        Linux 通过虚拟文件系统 (VFS) 来支持不同的具体的文件系统。从程序员的角度看, VFS 就是一套代码框架(framework),它将用户与具体的文件系统隔离开来。每个要通过mount 命令挂接到Linux系统的存储设备,如磁盘、光盘等(它们各自对应具体的文件系统),每个设备对应的文件系统都要按照VFS的要求提供一套统一的接口。这样,用户就可以使用这些统一的接口在不同的文件系统中拷贝数据了。
 
 
        最顶层的文件系统叫做“根文件系统”。Linux 在启动的时候,要求用户必须指定一个“根设备”,内核在初始化阶段,将“根设备”安装到“根安装点”上,从而有了根文件系统。这样,文件系统才算准备就绪。此后,用户就可以通过 mount 命令来安装新的设备。

11. mount设备(文件系统)
    通过mount命令向Linux系统mount了一个设备。其实该命令触发了两个过程,一个是文件系统注册过程(当然,如果文件系统已注册过的话,就不需要该步骤了),另一个才是真正意义上的mount设备的过程。

文件系统注册过程
(图片来自网络)
   Linux内核是可加载的,许多模块式可选的,只有真正需要使用时才加载他们。文件系统注册过程就是把对应某类型文件系统相关的模块加载到内核,并创建相关的数据结构。每个文件系统模块都有一个初始化例程,它的作用就是VFS中进行注册,即填写一个叫做file_system_type的数据结构。所有已注册的文件系统的file_system_type结构形成一个链表,我们把这个链表称为注册链表。
    每个设备在mount时都要搜索该注册链表,选择适合自己设备文件系统的一项,并从中取出read_super()函数获取设备的超级块(存储在具体设备上,记录存储设备各种信息的一个存储块),并解析其内容。因为每种类型文件系统的超级块的格式不同,并且各自有特定的信息,每种文件系统必须使用对应的解析函数,否则内核就因为不认识该文件系统而无法完成安装。这就是注册文件系统的意义所在。

设备真正mount过程
1) 创建一个设备的 vfsmount
2)为“被安装设备”创建一个 super_block,并由具体的文件系统来设置这个 super_block。在super_block中包含了该类型设备操作的各种接口的结构成员s_op,类型为super_operations。
3)为被安装设备的根目录节点创建 dentry
4)为被安装设备的根目录节点创建 inode, 并由 super_block->s_op->read_inode() 来设置此 inode
5)将 super_block 与“被安装设备”根目录节点 dentry 关联起来
6)将 super_block中的s_root与“被安装设备”的根目录节点 dentry 关联起来



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
《LINUX内核源代码情景分析》——文件系统(2) - 月静水 - 博客大巴
linux文件的操作 流程
嵌入式 Linux根文件系统移植(一)——Linux文件系统简介
linux文件系统中的超级块结构和 inode
linux文件系统知识
解析 Linux 中的 VFS 文件系统机制
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服