如何修改网站后台密码,做企业网站还有市场吗,如何做公司的英文网站,企业管理系统咨询1 “块”的概念
前面讲过可以通过LBA#xff0c;来找到对应的扇区进行访问#xff0c;一个一个扇区的访问是不是效率有点太低了#xff0c;其实硬盘就是典型的“块”设备#xff0c;块的大小一般都是八个扇区也就是4KB#xff0c;是不可更改的#xff0c;“块”也就是文…1 “块”的概念
前面讲过可以通过LBA来找到对应的扇区进行访问一个一个扇区的访问是不是效率有点太低了其实硬盘就是典型的“块”设备块的大小一般都是八个扇区也就是4KB是不可更改的“块”也就是文件存取的最小单位。
通过LBA地址也可以确定对应的“块”号即块号LBA/8。 2 “分区”的概念
已经划分出来这么多“块”号就需要将这些“块”进行管理所以就有了分区的概念这里可以通过windows下我看到自己电脑被分为C盘D盘其实这就是分区并不是有两块物理盘哦。
柱面是分区的最小单位
我们可以利用参考柱面号码的方式来进行分区其本质就是设置每个区的起始柱面和结束柱面号码。
此时我们可以将硬盘上的柱面分区进行平铺将其想象成⼀个大的平面如下图所示 3 inode的概念
之前一直强调文件内容属性可以通过ls -l查看具体细节。
这里还可以通过stat命令进行查看
stat test.c继续思考这里文件有属性那这里的属性存放在那里这是候inode也叫“索引节点”就闪亮登场这是一个结构体用来存放文件元信息属性信息比如问件的创建者、文件的创建日期、文件的大小等等。inode大小一般为128字节还有个细节就是文件名并未存放在inode结构体中后面会有讲解inode中有一个成员是inode number是用来标识文件唯一性的。
4 文件系统ext2
我们想要在硬盘上储文件必须先把硬盘格式化为某种格式的文件系统才能存储文件。文件系统的目的就是组织和管理硬盘中的文件。
linux中早期中比较常见的就是ext2文件系统那ext2是如何管理的呢 ext2文件系统将整个分区划分成若干个同样大小的块组(Block Group)。只要能管理⼀个分区就能管理所有分区也就能管理所有磁盘文件。
启动块BootBlock/Sector的大小是确定的为1KB由PC标准规定用来存储磁盘分区信息和启动信息任何文件系统都不能修改启动块。启动块之后才是ext2文件系统的开始。每个分区又被划分为block group组块。
4.1 块组内部构成
4.1.1 超级块Super Block
存放文件系统本身的结构信息描述整个分区的⽂件系统信息。记录的信息主要有bolck和inode的总量未使用的block和inode的数量⼀个block和inode的大小最近⼀次挂载的时间最近⼀次写入数据的时间最近⼀次检验磁盘的时间等其他文件系统的相关信息。
这个超级块每个块组中都有一份原因是Super Block的信息被破坏可 以说整个文件系统结构就被破坏了为了保证文件系统在磁盘部分扇区出现物理问题的情况下还能正常工作可以通过其他块组中super block恢复出来。
通过下面部分成员可以看到 4.1.2 GDTGroup Descriptor Table
块组描述符表描述块组属性信息整个分区分成多个块组就对应有多少个块组描述符。每个块组描 述符存储⼀个块组的描述信息从哪里开始到哪里结束是描述block bitmapinode bitmapinode TableData Blocks以及空闲的inode和数据块还有多少个。 4.1.3 Data Block
数据区存放文件内容也就是⼀个⼀个的Block。
Block 号按照分区划分不可跨分区。用来存放文件信息的分为一个一个4KB的块。
4.1.4 块位图Block Bitmap
Block Bitmap中记录着Data Block中哪个数据块已经被占用哪个数据块没有被占用就是通过位图结构来表示可以理解为0就是未占用1就是占用第几个比特位就表示第几个块。
4.1.5 i节点表(Inode Table)
当前分组所有Inode属性的集合。
inode编号以分区为单位整体划分不可跨分区。 4.1.6 inode位图Inode Bitmap
和block bitmap效果一样每个bit位表示⼀个inode是否被占用。
4.2 文件的创建和删除
4.2.1 文件的创建
首先需要确定的是一个文件无论有没有内容一定要有文件的属性所以一定会创建一个inode结构体再在inode bitmap位图中找到未占用的inode再在inode table中加入该结构体填入对应的文件属性如果需要进行对文件有内容那个就还需要在block bitmap中找到未被使用的Data block再在Data block中写入文件内容最后在inode结构体中有一张映射表本质是数组将块进行映射填入表中。
4.2.2 文件的删除
我们一定有过这样的经历就是下载一个几个G的视频可能要下载十多分钟但是删除它时间就短短几秒就好了这是为什么呢其实是在删除时并未对Data block中的内容进行清空也并未对inode table中对应的inode 进行清空而是将inode bitmap对应bit位的1改为0block bitmap进行同样的操作将对应的bit位由1改为0即可等到要创建新的文件时就直接对这部分内容进行覆盖就可以了。
当你误删除一些文件之后往往可以通过某些修复软件来进行文件修复就是这样做到的但是误操作之后就不要再去创建新的文件一旦将要修复的文件覆盖掉后就很难再找回了
4.3 目录与文件名
我们一直说“Linux下一切皆文件”所以理所当然目录也是文件因此目录文件也应该有文件属性文件内容那目录文件中的内容存放的是什么呢前面有提到文件名并没有存放在inode结构体中哦其实目录文件内容就是用来存放文件名和inode号的映射关系的。
但是用户使用的都是直接使用文件名所以访问文件必须要知道当前工作目录本质是必须能打开当前工作目录文件查看目录文件的内容
/home/iu/code/study/test例如如果test目录下有一个文件test.c,要访问test下的文件就必须要知道test当前工作路径才能获取到对应的inode进而对test.c文件进行访问。
4.3.1 路径解析
刚刚说到要打开文件就必须要找到工作路径目录文件那目录文件是不是也有对应的目录这样一层一层向上就会来到根目录‘/’。
实际上任何文件都有路径访问目标文件都要从根目录开始依次打开每⼀个目录根据目录名依次访问每个目录下指定的目录直到访问到test.c。这个过程叫做Linux路径解析。
注意两点 访问文件必须要有目录文件名路径的原因 根目录固定文件名inode号无需查找系统开机之后就必须知道 新的问题出现谁来提供路径 访问文件时都是指令/工具访问本质是进程访问进程有CWD进程提供路径。 使用open函数时需要传入一个参数就是文件路径。 最开始的路径来自哪里 其实linux下为什么会存在根目录根目录下存在那么多缺省参数还有为什么有家目录用户自己也可创建目录。 本质就是在磁盘文件系统中新建目录文件。而你新建的任何文件都在你或者系统指定的目录下新建这不就是天然就有路径了 4.3.2 路径缓存
前面说到打开一个文件需要路径解析要从根目录开始解析那我访问大量的文件每一次都从根目录开始解析这样是不是太慢了
所以Linux会缓存历史路径结构打开的文件是目录的话由OS自己在内存中进行路径维护。
Linux中在内核中维护树状路径结构的内核结构体叫做 struct dentry 1.每个文件其实都要有对应的dentry结构包括普通文件。这样所有被打开的文件就可以在内存中形成整个树形结构 2.整个树形节点也同时会隶属于LRU(Least Recently Used最近最少使用)结构中进行节点淘汰 3.整个树形节点也同时会隶属于Hash方便快速查找 更重要的是这个树形结构整体构成了Linux的路径缓存结构打开访问任何文件都在先在这 棵树下根据路径进行查找找到就返回属性inode和内容没找到就从磁盘加载路径添加dentry 结构缓存新路径。