当前位置: 首页 > Linux

【学习与理解】文件系统的解读

时间:2023-04-07 01:30:55 Linux

是按照我个人的理解慢慢讲的。顺序可能不是很顺畅,但我尽量说顺畅。先梳理一下自己的思路,再慢慢整理格式。首先想想如何写文章的上下文。写文章真的很慢!!!先写大概的上下文结构,后面再组织课文。最后,自己组织语言。意图:是整理自己的理解,让自己更好的解释,但是写写方法,或者别人的思路,实在是不好。这只能说明理解还不够深入,加强理解。可以去掉一些多余的解释和写作思路,以问题解决1、文件系统的来源是计算机中比较大的存储介质:磁盘。(关于磁盘的介绍这里就不展开了。)所谓文件系统就是按照我们很容易理解的文件的概念(好像是看出来的)把它对应的结构和数据存储在磁盘中。就像我们安装电脑时,将文件系统的内容保存到磁盘中,需要经过以下几个小步骤。使用文件系统初始化、格式化和挂载分区。步骤1、2、3分开说总觉得莫名其妙,但是看看每一步所做的工作,以及以后最终形成的系统格式。每一步的必然性就很明显了。第一步:可以在虚拟机中添加移动硬盘,然后模拟分区。第2步:文件系统中有许多不同的文件格式。可以使用命令mkfs预览,选择比较常用的ext4格式化分区。注意:查看上面ext文件系统格式化分区sdb1后的提示信息,特别重要和重要的备注信息如下:2618884kblocks65536inodessuperblockinodetable因为这些是文件系统的基本结构,决定如何读取而writefiles使用的时候,后面介绍文件的时候,里面的概念都会一直讲到。第三步:挂载到不同目录后,对挂载文件夹的mnt操作等同于对磁盘的操作。如果当前inode有mount信息,则忽略自身的file函数。搜索文件时也是如此。我稍后会解释这些错误。如果不格式化提示,直接mount,按结构的顺序介绍,会感觉一头雾水,一头雾水。简单解释一下我们为什么要这样做,先看看我们使用文件系统来做什么,然后逐步介绍不同的术语和概念术语是不同程序员之间交流的关键,可以减少很多交流偏差成本。2、什么是文件?查看:我们在电脑或客户端看到的文件和文件夹(前面说过,它们以一定的形式存储在磁盘上)开发使用:用户使用系统调用进行读写。我们知道,磁盘数据是通过在扇区中存放00011字节来保存的,而磁盘的最小单位就是扇区。本质上,我们在读写时,都是选择固定磁道的Noxxx扇区来读写数据。2.1文件的信息内容是如何存储在磁盘上的?文件的格式是什么?他是如何读取和存储它的?带着这些疑问,我们来看看文件的具体内容。首先,根据我们日常的使用习惯,进入一个目录,查看一个文件的详细信息ls-ahl-i第一列:比如262547就是文件的inode。我们每天通过inode查找文件信息和文件内容。2.2创建一个新文件当文件系统创建一个新文件,比如hello.txt,它是如何记录这个文件的。上图分为两部分,第一部分是inodetable,第二部分是data。我们通过inode表选择一个空闲地址,生成一个inode节点,然后将数据保存在数据层,然后将数据的地址写回到inode结构中。比如表会保存文件的inode节点对应的扇区地址号(上图是为了更好的解释,为了更好的理解不做纠错)。当我们通过上图查询一个文件时,我们可以定位到一个固定的扇区,然后通过diskseek来读取其中的内容。2.3不同的块文件系统有不同的扇区大小,有的是512b,有的是1024b,等等。为了统一,引入了一个中间层块。例如,块大小定义为4k。不同的文件系统和不同大小的扇区可以填充不同的数字。比如用4个1024B扇区和8个512B扇区来实现。这样可以确保每个块的大小相同。所谓磁盘的最小单位是:一个扇区文件的最小单位是:块这是开头提到的分区后包含的块数。2.4存储映射如图所示,当我们查看一个文件的内容时,我们会按照一定的规则找到文件的inode,然后通过inode获取文件的数据。大文件可以存储在n个块中。(比如一个4G的mv可能需要很多block)小文件保存在一个block中。与块关联的扇区是记录文件的内容。(如果地方比较好利用,按照一定的电梯算法)通过记录的扇区,依次开始旋转轨道,将数据读入内存。2.5inode中记录了哪些信息Linux根据inode查找文件的存储位置和文件信息2.6inode表找到一个空闲的inode,然后存储在一个block中,然后将地址写入inode中的每一个文件需要一个inode节点来describe3。superblock我们可以通过stat查看文件的使用情况。但是当我们新建一个文件的时候,需要分配inode和dataaddr对应的block。他们怎么知道他们的系统中还有空闲的inode和块。所以次数需要一个字段,或者一个结构体来记录当前文件的inode和block的使用情况。让我们先回到磁盘的格式化,看看它们做了什么。磁盘的结构:MBR:记录启动磁盘的一些信息分区结构:bootsectorext文件系统不同的分区可以使用不同的文件系统在文件系统中,通过超级块记录了整个文件系统的使用信息。在每个块组中,使用块位图和inode位图记录组内inode和数据的使用情况。易于分发和管理。先从数据块中找到一个空闲的存放文件数据,然后从innode表中找到一个空闲的节点来描述文件的地址和属性,存放数据块的地址。因此,在创建新文件时,这两个位置会发生变化。superblock:磁盘分区时专门提到的。到目前为止,我们从整体上看文件在磁盘上的存储。我们如何找到一个文件?在找到文件路径之前,我们先了解下目录4.目录和目录项4.1问题介绍文件中保存了inode信息各种信息,具体可以看他的struct,里面的字段。我们都是通过inode来查找文件的。但是inode不保存文件名,用户习惯通过文件名查找文件内容。4.2目录datablock文件存放数据,目录存放表。如果看一个文件,首先根据路径找到根目录的inode目录,文件内容是一个表。找到/bin的地址是6029313,inode号inode表找到对应的inode节点包括文件名。inode有一个约束2:必须是根目录的inode1:一般表示文件初始化保留5.文件路径文件的相对路径:.文件夹的..和..分别对应当前目录的硬链接和父目录的硬链接。然后通过上层目录的块表一点一点回溯,找到6.挂载的父文件系统就是电脑磁盘上的系统子文件系统:可以是U盘上的一个文件。6.2如何从U盘根目录访问文件寻址路径,到固定inode,如果编辑为不挂载,则访问文件。如果标记为已挂载,则到哈希表中查找已挂载的vfsmout信息,找到挂载点的根目录,然后依次查找该路径下的文件。这也解释了为什么在挂载一个文件夹目录之后,在7.VFS8之前。文件描述符文件如何动态操作文件?可以参考操作系统。结构体fd的概念是从内核空间返回给用户空间的句柄。8.2一个进程fd打开的一个文件,更多的是数组的偏移量9.硬链接和软链接过程通过前面的理解,我们已经知道文件在磁盘上的硬链接就是inode和datablock软链接--符号链接--快捷方式软链接本身就是一个文件,文件的内容就是一个文件地址路径。硬链接相当于别名软链接的内容:是一个路径名。9.2两种硬链接的区别不能跨越分区不同的分区有不同的inode软链接可以跨越,因为它存放的是文件的内容。文件内容为路径名硬链接,不能在ln目录下。是硬链接,建立硬链接后执行文件混乱。因此,禁止对目录建立硬链接。10.查看文件的使用情况。statdu就是要深入群众。查看每个目录的文件大小,使用du统计每个目录的大小。如果你看了这篇文章觉得我说的很不清楚,可以去看王老师的精彩讲解第01期:揭开文件系统之谜视频教程