【Linux】详解文件系统以及周边知识

一、磁盘的基本知识

        磁盘中可以被划分成一个一个的环,每个环都是一个磁道。每个磁道又可以被均分成一个一个的扇区,扇区是磁盘IO的基本单位(想要修改扇区中的一个比特位就必须把该扇区的全部比特位都加载到内存中)。磁盘中的盘面,磁道和扇区都是有编号的。要访问一个扇区中的内容,必须通过磁头先定位到哪一个磁道(柱面cylinder),再确定要读取哪一个盘面(磁头head),最后确定磁道上的哪一个扇区(sector),这种定位法被称为CHS定位法

1.1、磁盘逻辑结构的理解

         磁盘盘面的每个磁道我们都可以想象成把它扯出来,就变成了一个线性的结构,如果把每一个磁道都拼接在一起,再把每一个盘面拼接在一起,就形成了一个比较长的线性结构,就变得类似于磁带了。假设磁盘每一个盘面的大小为200GB,一共有四个盘面,假设每一个扇区大小为512kb,那800GB就可以被分成1677721600个扇区大小。那么如果把这个线性结构看成是一个数组的话,那么我们每次拿着要访问的扇区对应的数组下标通过对应的算法转化成CHS地址就能访问到该扇区了,该工作是由磁盘完成的。所以,操作系统需要知道磁盘有多少个扇面,每个扇面的大小是多少,每个扇区的大小是多少,每个磁道有多少个扇区,这个在操作系统内部编程的时候就可以统一使用线性地址,要访问磁盘数据时,将线性地址交给磁盘,磁盘会自己将线性地址转化成CHS地址,就可以实现操作系统对数据的读取和写入了。

 二、文件系统底层的实现原理

2.1、系统层面的数据块

         但是在操作系统层面上,会认为一次只和磁盘交互一个扇区的数据数据量太小了。在操作系统文件系统认为,IO的基本单位是4kb,也就是8个扇区(假设),也就是说操作系统和磁盘一次最小交换的数据量为8个扇区。那操作系统又可以对磁盘中的800GB进行重新分块,以8个扇区为一个数据块,第一个数据块数组下标编号为1,第二个数据块数组下标编号为2,以此类推,这种编址叫做LBA地址(Logical Block Address)。这个操作系统要对某个数据块进行读取或写入的时候,就只需要拿着数据块的数组编号乘8再加上[0,1,2,3,4,5,6,7],就可以找到对应连续的8个扇区,将8个扇区的线性地址交给磁盘转化成CHS地址就可以对这8个扇区进行读取或写入了。

2.2、分区和分组 

        上面我们已经谈了磁盘和操作系统对于存储空间的分块问题,接下来可以聊一聊操作系统如何对这800GB的空间进行管理了。在实际的情况中,操作系统并不是将这800GB的空间都当成一个整体来维护的,操作系统会对这800GB的空间进行分区(也就是我们平常电脑中所见的C盘,D盘,E盘),分区下面又会有分组,通过一个分组的管理经验再沿用到其它的分组中(当然了也可以沿用其它管理经验),就可以将800GB中所有的分组和分区都管理好了。

         Linux磁盘文件特性分为文件内容加上文件属性,文件属性包括类型,大小,权限,时间,inode编号等等......文件名不属于文件属性),一个文件的inode编号在它所属的分区内是唯一的系统中标识一个文件用的不是文件名,用的是它的inode编号。内容和属性是分开存储的。在磁盘中,文件的属性存储在struct inode结构体中,大小为128字节。操作系统一个数据块的大小为4kb(同上),也就是说一个数据块可以存储32个struct inode结构体。

2.3、组的管理模式

        为了管理好每一个分组中的10GB空间,系统将10GB进行了模块化管理。

i节点表(inode Table):存放文件属性 ,如文件大小,所有者,最近修改时间等。

inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。

数据区(Data blocks):存放文件内容 。

块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用。

Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。

超级块(Super Block):在磁盘中,每个分区都有一个super block,且只有个别的组有super block。存放文件系统本身的结构信息。记录的信息主要有:block和inode的总量, 未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个 文件系统结构就被破坏了。

GDT,Group Descriptor Table:块组描述符,描述块组属性信息。

        创建一个文件需要在一个组的inodeBitmap中从左向右遍历找到第一个非1的比特位,将该比特位置1,并通过该比特位索引到inodeTable中对应的位置申请一个struct inode结构体,将该填的属性一填,在Block Bitmap找到非1的比特位,置1并将数据填入到Data blocks对应的数据块中。删除一个文件只需要将其在inode Bitmap和Block Bitmap中所占有的比特位置0即可,而不需要再磁盘中将对应的数据全部删除掉,这也是为什么我们删除一个文件比下载一个文件快得多的本质原因每一个分区的每一个分组都有一个起始编号,struct inode结构体的inode编号可以理解成就是该分组的起始编号加上在inode Bitmap中的偏移量。这样就可以做到一个文件的inode编号在它所属的分区内是唯一的。        

        为了将文件的属性和内容之间建立起联系,struct inode结构体中还存在一个int block[15]的数组用来表征这个分组内的哪些数据块属于这个文件。block数组下标[0,11]直接保存的就是Data blocks中的编号(一级索引);[12,13]不直接保存编号,而保存的是其它保存数据的数据块对应的编号(二级索引),[14]保存就是三级索引,这样可以有效增加保存文件数据的数据块的个数,进一步的可以使一个文件保存更多的数据。

三、重谈文件的增删查改

        在Linux系统中,目录也是文件,其中目录的内容中就保存了目录中的文件的inode编号和文件名之间的映射关系这就是为什么如果我们对一个目录没有w权限,我们就无法在这个目录中新建文件的原因。因为新建文件要将文件的inode编号和文件名之间的映射关系写到目录的内容当中,本质就是修改目录的内容,操作系统就不让我修改。删除一个文件时,拿着文件名在当前目录中做字符串匹配,当匹配成功时,将所在分组的inodebitmap和blockbitmap中对应的比特位由一置零,再在所处目录的内容中将文件名和inode的映射关系删除掉,这样一个文件就被删除了。

四、重谈文件路径

        查找一个文件,在内核当中,都要递归似的帮我们找到根目录,从根目录进行路径解析。因为我们要得到一个文件的内容,就要先拿到它的inode编号,可是我们只有文件名啊,那怎么办?文件名和它的inode编号是存储在它所在的目录中的,所以要到目录的内容中去找。可是目录我们也只是知道目录名啊,我们又要去上级目录中找该目录的inode编号,依次类推,直到找到根目录,根目录的inode编号系统是已知的,所以我们就可以逆向找到所有目录的inode编号,进而找到我们的文件的inode编号,也就找到文件内容了。这就是文件路径最本质的作用

五、挂载的理解

        挂载(Mounting)是指由操作系统使一个存储设备(诸如硬盘、CD-ROM或网络共享)上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程一个被写入文件系统的分区要被Linux操作系统使用,必须将其挂载到一个目录下。分区的访问都是通过所挂载的路径访问的。通过文件路径前缀就可以知道文件处于哪一个分区中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/292860.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux进程间通信

文章目录 进程通信管道无名管道有名管道 信号通信kill、raise、alarmsignal 处理信号采用信号方式的进程间通信 共享内存shmget 创建ftok 创建key值shmat 映射地址shmdt/shmctl 删除采用共享内存方式的进程间通信 消息队列msgget 创建msgctl 删除msgsnd 发送消息msgrcv 接收消息…

C语言之动态内存管理

在C语言中我们在栈上开辟的空间是固定的,一旦确定好大小就不能随意改变,就想你创建了 int i 10; int arr[10] {0}; int i 一旦确定下来就是四个字节,arr一旦确定好大小在重新运行时也是不能改变的。 为此C语言引入了动态内存空间开辟&#…

java算法day39 | 动态规划part02 ● 62.不同路径 ● 63. 不同路径 II

62.不同路径 思路: 本题非常巧妙。 第一步:定义一个dp数组存储到达每个位置的路径数。 第二步:每个位置的路径数它左面位置的路径数上面位置的路径数。 第三步:不好想的是如何初始化数组。 既然只能向下或向右走,可推出…

全局UI方法-弹窗三-文本滑动选择器弹窗(TextPickDialog)

1、描述 根据指定的选择范围创建文本选择器,展示在弹窗上。 2、接口 TextPickDialog(options?: TextPickDialogOptions) 3、TextPickDialogOptions 参数名称 参数类型 必填 参数描述 rang string[] | Resource 是 设置文本选择器的选择范围。 selected nu…

C易错注意之分支循环,悬空else,短路表达式,static

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 前言: c语言中一些关于分支循环中continue常混淆,悬空esle问题,短路表达式,static ,extern在使用时稍不注意就会出错的点,接下来我们将介绍…

javaWeb项目-学生考勤管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、JAVA技术 JavaSc…

Bat中cd到中文路径报错以及windows上设置快捷方式延迟启动执行

场景 要实现在windows启动目录下,执行bat脚本文件。 脚本文件中需要进入某个中文目录 所以直接 cd /d D:\test\中文路径 start test.bat 此时会提示: 此时需要指定bat的编码方式,修改bat脚本文件,添加如下 chcp 65001 cd /d…

AI预测福彩3D第22弹【2024年3月31日预测--第5套算法开始计算第4次测试】

今天,咱们继续进行本套算法的测试,今天为第四次测试,仍旧是采用冷温热趋势结合AI模型进行预测。好了,废话不多说了。直接上结果~ 仍旧是分为两个方案,1大1小。 经过人工神经网络计算并进行权重赋值打分后,3…

通过WSL在阿里云上部署Vue项目

参考: 阿里云上搭建网站-CSDN博客 云服务器重装 关闭当前运行实例 更换操作系统,还有其他的进入方式。 选择ubuntu系统(和WSL使用相同的系统)。 设置用户和密码。发送短信验证码。 新系统更新。秒速干净的新系统设置完成。 这…

国内ip切换app,让切换ip变得简单

在数字化快速发展的今天,互联网已经成为我们生活中不可或缺的一部分。然而,随着网络应用的深入,用户对于网络环境的需求也日益多样化。其中,IP地址作为网络中的关键标识,其切换与管理显得尤为重要。为了满足用户对于IP…

MongoDB副本集环境搭建(以单机Windows为例)

前言 近期有搭建MongoDB副本集的需求,简单记录一下搭建过程(以本地Windows环境为例)。 一、副本集选型 1 Primary节点、1 Secondary 节点、1 Arbiter节点模式副本集环境搭建。 二、搭建过程 1. 安装MongoDB服务 下载地址:https://www.mongodb.com,如下图所示: 选择…

element表格 加滚动,监听底部实现分页加载

表格要实现滚动很简单,给他加一个高度即可 height"300" 然后是监听事件 mounted() {this.lazyLoading();}, methods:{lazyLoading(){let dom document.querySelector(".el-table__body-wrapper");dom.addEventListener("scroll", (…

数据结构——优先级队列及多服务台模拟系统的实现

一、优先级队列的定义和存储 优先级队列定义:优先级高的元素在队头,优先级低的元素在队尾 基于普通线性表实现优先级队列,入队和出队中必有一个时间复杂度O(n),基于二叉树结构实现优先级队列,能够让入队和出队时间复杂度都为O(log…

2024年【N1叉车司机】考试技巧及N1叉车司机复审考试

题库来源:安全生产模拟考试一点通公众号小程序 N1叉车司机考试技巧参考答案及N1叉车司机考试试题解析是安全生产模拟考试一点通题库老师及N1叉车司机操作证已考过的学员汇总,相对有效帮助N1叉车司机复审考试学员顺利通过考试。 1、【多选题】《中华人民…

基于springboot+vue实现的学校田径运动会管理系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…

开源AI引擎:文本自动分类在公安及消防执法办案自动化中的应用

一、实际案例介绍 通过文本分类算法自动化处理文本数据,快速识别案件性质和关键特征,极大地提高了案件管理和分派的效率。本文将探讨这两种技术如何帮助执法机构优化资源分配,确保案件得到及时而恰当的处理,并增强公共安全管理的…

图论-最短路

一、不存在负权边-dijkstra算法 dijkstra算法适用于这样一类问题: 从起点 start 到所有其他节点的最短路径。 其实求解最短路径最暴力的方法就是使用bfs广搜一下,但是要一次求得所有点的最短距离我们不可能循环n次,这样复杂度太高&#xf…

第十五届蓝桥杯第三期模拟赛第十题 ← 上楼梯

【问题描述】 小蓝要上一个楼梯,楼梯共有 n 级台阶(即小蓝总共要走 n 级)。小蓝每一步可以走 a 级、b 级或 c 级台阶。 请问小蓝总共有多少种方案能正好走到楼梯顶端?【输入格式】 输入的第一行包含一个整数 n 。 第二行包含三个整…

DeviceNET转EtherCat:水处理行业新神器

在现代水处理行业,自动化控制系统的运用日益广泛。特别是上位机通过DeviceNET转EtherCAT网关的技术,以其高速、高效和精准的特点,正逐步成为水处理自动化控制的主流解决方案。我们需要了解什么是上位机、DeviceNET和EtherCAT。上位机通常指的…

[蓝桥杯 2019 省赛 AB] 完全二叉树的权值

# [蓝桥杯 2019 省 AB] 完全二叉树的权值 ## 题目描述 给定一棵包含 $N$ 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是 $A_1,A_2, \cdots A_N$,如下图所示: 现在小明要把相同深度的节点的权值…