【Linux】文件系统

在这里插入图片描述

送给大家一句话:
你的任务,就是珍惜你自己的人生,而且还要比之前任何时候更加珍惜。
– 东野圭吾


文件系统

  • 1 前言
  • 2 物理磁盘
  • 3 磁盘的存储结构
  • 4 抽象理解磁盘储存
  • 5 引入文件系统 (如何管理磁盘文件)
    • 5.1 了解文件系统
    • 5.2 细节处理
      • 如何存储文件
      • 如何寻找指定文件
  • Thanks♪(・ω・)ノ谢谢阅读!!!
  • 下一篇文章见!!!

1 前言

之前我们学习了

  1. 操作系统中文件操作的系统调用接口
  2. 了解了文件描述符
  3. 重定向的使用与底层原理
  4. 了解什么是缓冲区

但是这些都是文件被进程打开后才有的操作,那么其余文件呢???在我们的系统中有非常多的文件(一切皆文件),被打开的文件只是一小部分。没有被打开的文件实际上是在磁盘上储存的,也就是磁盘文件。
在打开文件之前,我们需要找到文件 -> 就要从磁盘中找到对应文件 -> 通过文件路径与文件名。

今天我们来了解如何管理磁盘文件 — 文件系统。

2 物理磁盘

我们首先来了解物理磁盘是什么样子的:
通常由金属外壳、控制电路板和接口组成。硬盘内部有盘片、磁头和悬臂等部件,用于存储和读取数据。盘片表面涂有磁性介质,数据以磁道和扇区的形式存储。硬盘通过磁头在盘片上读写数据,而磁头则由悬臂支撑和定位。
简约来说,物理磁盘是计算机中用于存储数据的实体设备,具有特定的结构和外观
在这里插入图片描述
因为计算机只认识二进制,我们就需要一个结构可以通过记录二进制信息来储存文件。物理磁盘就是这样一个结构。
磁盘的碟片两面都可以进行存储,一个磁盘中有多个碟片(碟片越多,容量越大),读取写入的结构是磁头(悬浮在碟片上),每面都会有一个磁头来读写数据。磁盘中央是一个马达,使其可以旋转来使磁头读取到信息。

3 磁盘的存储结构

磁盘是一个机械结构,读写速率较慢。所以我们尽量减少读取次数,让其定期刷新,并让其一次可以读写入较多数据(缓冲区的作用)
在这里插入图片描述
磁盘上可以理解为是无数个磁铁(可以通过位置方向表示二进制信息)。我们来认识几个概念

  1. 以磁盘圆心为中心,每一圈都称为磁道(因为有多个碟片,所以磁道也可以加做柱面)
  2. 像切蛋糕一样分出的块称为扇区,扇区是磁盘读写的基本单位(每个扇区有对应容量)
  3. 一片磁片有 n 个磁道,每个磁道有 m 个扇区

那么我们如何找到指定位置的文件呢 —— CHS定址法

  • 第一步确定在那一面(确定磁头 Header)
  • 第二步确定在哪个磁道(柱面Cylinder)
  • 第三步盘片选择,确定在哪个扇区 Sector

文件 = 内容+属性,也就都是数据,而数据是二进制储存的,所以文件在磁盘中储存可以理解为文件在磁盘中占有多少个扇区

4 抽象理解磁盘储存

虽然CHS定址法很直接,但是操作系统并不使用该方法,因为该方法耦合度太高。为了方便实现内核进行磁盘管理,需要进行抽象管理。
磁盘可以整体抽象为一个线性结构:把所有的扇区连接在一起,形成一个线性结构。也就是我们可以通过数组(储存扇区)来管理磁盘。那么如何进行准确的定位磁盘位置呢(假设一个面有10个磁道,1000个扇区)???

  1. 因为磁盘每个碟片和扇区的储存容量是一定的,也就可以通过扇区的index值来确定其在哪个碟片。(H = index / 1000)
  2. 确定了在哪个碟片,我们就要确定其在该碟片哪个扇区(temp = index / 1000 )
  3. 确定扇区后,我们再来确定子啊那个磁道 ( C = temp / 100)

这样通过一个线性结构就可以管理磁盘。
文件就等于很多个扇区的下标

一般操作系统与磁盘交互时不这样一个一个下标来确认。基本单位可能是 4KB ,也就是一次读取多个扇区。
4KB 假如是8 个连续的扇区,我们称之为数据块。
那么文件就是多个块来构成的。操作系统通过块来读取数据,通过每个块的起始位置就能确定块中的扇区的CHS(只要知道一个起始,和磁盘总大小,有多少块,每个块的编号,如何转换到CHS,就都知道了),称之为:LBA(逻辑区块地址)

5 引入文件系统 (如何管理磁盘文件)

5.1 了解文件系统

有了上面的线性大地址,我们就可以开始构建出文件系统了。
在这里插入图片描述
磁盘每个分区的容量是很大的(比如我们电脑的C盘 D盘 E盘),要直接管理好这个大空间是有点困难的,所以操作系统对磁盘分区进行一个分组,只要管理好这个分组就能管理好这个分区(分治思想!!!)。

首先:文件 = 文件内容 + 文件属性 。文件在磁盘中存储,本质是储存文件的内容与文件的属性数据。在每个分区内部分组,然后写入文件系统的管理数据,称之为格式化!!!

Linux 文件系统特定: 文件属性 与 文件内容 分开存储。接下来我们来研究文件系统:
在这里插入图片描述
每个组里有这些部分:

  1. Block Group(占据空间最大的一部分):每个Block Group都有着相同的结构组成。里面储存着非常多的数据块( 都有对应的块号),每个数据块只存储文件的内容。
  2. inode 表 : 存放文件属性 如 文件大小,所有者,最近修改时间等
    Linux中文件的属性是大小固定的集合体(一般固定128字节) 不包含文件名,但是都有inode_number,通过inode号来标识一个文件。
struct inode
{int size;mode_t mode;int creater;int time;...int inode_number;... int datablocks[N]
}
  其中的datablocks[N]用来储存使用了哪些数据块(通过块号来储存)。但是N一般是15,想要储存一个大文件是怎样储存的呢?
  1. GDT(Group Descriptor Table):块组描述符,描述块组属性信息:块多大,有多少个Datablock,使用了多少个… 其本质是管理字块的部分

  2. 超级块(Super Block):存放文件系统(分区)本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了,超级块不是每个分区都有的,但是超级块也会有多个,内容也保持一致,防止数据丢失,提高系统健壮性。

  3. 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用。通过010101的比特位来记录信息。

  4. inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。通过010101这样的比特位表示是否可用。

  5. 数据区:存放文件内容

5.2 细节处理

如何存储文件

我们找寻文件时,必须先得到文件的inode号。在我们的GDT中会记录下该组的inode编号的范围(start 与 end ),通过文件inode就可以确定其所属分区。 datablock 也是如此!!! 也有对应块号。这样就能找到文件的内容。

inode 表中的datablock[N]通常只有15容量,那是怎样储存大文件的呢?其实这里就比较类似指针数组了,一般【0 , 11】直接映射数据块,【12 , 15】 指向的数据块,这个数据块里面也类似一个datablock[N],来指向其他数据块!(存在一级映射,二级映射,三极映射。并且可以跨组访问,但是强烈不推荐这样,因为硬件的限制会导致访问较慢)

上述的寻找过程是以inode为索引搜索 ,为什么要不使用文件名呢???
这是因为目录本质也是一个文件,是文件就会有内容与属性。那目录的内容是什么呢?目录内容就是文件名与其inoded 映射关系。
这也可以解释一下我们平时的应用:

  1. 同一目录下不难创建同名文件
  2. 查找文件的顺序,先查找文件名->再找到映射的inode编号。
  3. 目录的 r 权限 :本质是 是否允许我们读取目录的内容(文件名与inode的映射关系)
  4. 目录的 w 权限 :新建文件,最后一定是向当前所处的目录内容中写入:文件名与inode的映射关系
  5. 如何理解文件的增删查改:
    • 增加:本质是先根据inode位图子所属分区申请一个新的inode,根据inode值确定分组,再通过block位图寻找未被使用的数据块,然后开始写入数据
    • 修改:根据文件名找到对应映射的inode,然后找到对应的文件内容,进行修改。
    • 删除:本质是在inode位图中设置为 0 ,这样就完成了删除。

如何寻找指定文件

要找到指定文件 -> 首先要找到所在目录 ->找到文件的inode编号 -> 打开文件

找到所在目录的过程与找指定文件过程一样,因为目录本质也是文件 !就这样进行逆向的路径解析。
而Linux系统会进行路径的缓存,来方便我们的寻找工作。
我们一般使用的云服务器会有一个虚拟磁盘vda,系统中会有许多分区。我们访问一个分区会对我们使用的分区进行挂载,挂载实质是将一个磁盘分区与目录进行关联,这样就可以在该分区进行文件操作。
在这里插入图片描述

Thanks♪(・ω・)ノ谢谢阅读!!!

下一篇文章见!!!

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

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

相关文章

基于 SpringCloud 的在线交易平台乐优商城的设计与实现(六)

目录 第六章 系统测试 6.1 功能性测试 6.1.1 商家后台功能测试 6.1.2 前台功能测试 6.2 非功能性测试 6.3 本章小结 结束语 参考文献 前面内容请移步 基于 SpringCloud 的在线交易平台乐优商城的设计与实现(五) 相关免费源码资源 乐优商城…

深入理解分布式事务① ---->分布式事务基础(四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置)详解

目录 深入理解分布式事务① ---->分布式事务基础(四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置)详解事务的基本概念1、什么是事务?2、事务的四大特性2-1:原子性(Atomic&#xff09…

黑烟车智能电子抓拍系统大幅度节约人力物力

黑烟车智能电子抓拍系统大幅度节约人力物力,之前黑烟车监测通过执勤交警人工现场监测会耗费大量人力物力,效率较低,现在通过黑烟车智能电子抓拍系统可以大辅导提升监测效率,遗漏少,效率高,值得大力推广。 黑…

【Python数据库】MongoDB

文章目录 [toc]数据插入数据查询数据更新数据删除 个人主页:丷从心 系列专栏:Python数据库 学习指南:Python学习指南 数据插入 from pymongo import MongoClientdef insert_data():mongo_client MongoClient(hostlocalhost, port27017)co…

红米A2/A2+/POCO C51手机秒解BL+快速获取root权限+解谷歌锁刷机救砖教程

红米A2/A2/POCO C51手机是目前小米公司针对于国外用户的1个独立的品牌,或者和国内的红米手机都非常相似,几款手机由于硬件非常接近,我们这里将其放在一起和大家介绍而从他们的代号中我们可以得知,目前A2/POCO的代号为water&#x…

ctfshow web78 获取flag

第一种:利用input伪协议 ,获取到flag 第二种:利用flter协议,获取到flag https://21d9e58a-c0fd-47ea-a9c4-d875100f2fdb.challenge.ctf.show/?filephp://filter/readconvert.base64-encode/resourceflag.php 得到的结果PD9waHANCg0KLyoNCiMgLSotIGNvZG…

代码随想录算法训练营第12天:滑动窗口和前缀和

代码随想录算法训练营第12天:滑动窗口和前缀和 这里我参考了西法的博客, 467. 环绕字符串中唯一的子字符串(中等)795. 区间子数组个数(中等)904. 水果成篮(中等)992. K 个不同整数的子数组(困难)1109. 航班预订统计(中等) 前四…

机器学习周报第36周 AT-LSTM

文章目录 week36 AT-LSTM摘要Abstract一、文献阅读1. 题目2. abstract3. 网络架构3.1 LSTM3.2 注意力机制概述3.3 AT-LSTM3.4 数据预处理 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 训练参数4.3.2 数据集4.3.3 实验设置4.3.4 实验结果 5. 基于pytorch的transfor…

使用Cesium ion将 Sketchfab 3D 模型添加到您的GIS应用中

您现在可以将 Sketchfab 中的 3D 模型导入 Cesium ion 中以创建 3D 块,从而更轻松地为地理空间体验创建上下文和内容。 Sketchfab 是 Epic Games 的一部分,也是使用最广泛的 3D 资产市场之一。自 2012 年推出以来,已有超过 1000 万用户使用 …

【数据结构】最小生成树(Prim算法、Kruskal算法)解析+完整代码

5.1 最小生成树 定义 对一个带权连通无向图 G ( V , E ) G(V,E) G(V,E),生成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。 设R为G的所有生成树的集合,若T为R中边的权值之和最小的生成树,则T称…

3. uniapp开发工具的一些事

前言 新的一天,又要开始卷起来了,开发程序开发当前离不开开发工具,一个好的开发工具办事起来那必然是事倍功半的...本文主要分享了关于uniapp里开发工具的一些事~ 概述 阅读时间:约5~7分钟; 本文重点&am…

Visual Studio Code基础:打开一个编辑器(文件)时,覆盖了原编辑器

相关阅读 VS codehttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm1001.2014.3001.5482 在使用vscode时,偶尔会出现这样的问题:打开了某个编辑器(文件,下面统称文件)后,再打开其他文件…

清理Mac电脑中的垃圾文件,让Mac电脑像新的一样好

CleanMyMac是一款流行的Mac系统优化工具,它可以帮助用户清理Mac电脑中的垃圾文件、优化系统性能、管理应用程序、保护隐私和提升电脑运行速度。下面是CleanMyMac的一些主要功能: 系统清理:清除系统缓存、日志文件、语言文件等,释放…

Hotcoin Academy 市场洞察-2024年4月15日-21日

加密货币市场表现 BTC ETF在本周出现净流出,大盘有较大跌幅,BTC一度跌破60000美金,ETH一度跌破2800美金,整体以横盘为主,行情在周末有略微回升趋势。BTC市占率创21年4月来新高,目前市值1.28万亿&#xff0c…

图片浏览工具-Honeyview

一、软件特点 轻量而快速 可以显示包括 GPS 信息在内的 JPEG 格式的 EXIF 信息 对图像格式进行批量转换和调整大小 支持显示 GIF 和 WebP 动图 无需解压即可直接查看压缩包中的图像 二、支持的格式 图像格式: BMP, JPG, GIF, PNG, PSD, DDS, JXR, WebP, J2K, JP2, TGA, TIFF, …

沉浸式翻译 chrome 插件 Immersive Translate - Translate Website PDF

免费翻译网站,翻译PDF和Epub电子书,双语翻译视频字幕 📣 网络上口碑爆炸的网站翻译扩展工具【沉浸式翻译】⭐⭐⭐⭐⭐ 💻 功能特点如下: 📰 网站翻译 🚀 提供双语网站翻译,智能识…

web自动化系列-selenium的基本方法介绍

web自动化 ,一个老生常谈的话题 ,很多人的自动化之路就是从它开始 。它学起来简单 ,但做起来又比较难以驾驭 ;它的执行效率慢 、但又是最接近于用户的操作场景 ; 1.web自动化中的三大亮点技术 我们先聊聊 &#xff0…

登录rabbitMQ管理界面时浏览器显示要求进行身份验证,与此站点连接不安全解决办法

问题描述 最近在黑马学习rabbitMQ的过程中,在使用docker部署好rabbitMQ后,使用账号为:itcast,密码为:123321 登录的时候浏览器显示了这个问题,如图所示: 当时以为自己需要输入自己的浏览…

Spring Web MVC入门(3)——响应

目录 一、返回静态页面 RestController 和 Controller之间的关联和区别 二、返回数据ResponseBody ResponseBody作用在类和方法的情况 三、返回HTML代码片段 响应中的Content-Type常见的取值: 四、返回JSON 五、设置状态码 六、设置Header 1、设置Content…

【C++】---STL容器适配器之底层deque浅析

【C】---STL容器适配器之底层deque浅析 一、deque的使用二、deque的原理1、deque的结构2、deque的底层结构(1)deque的底层空间(2)deque如何支持随机访问、deque迭代器 3、deque的优缺点(1)deque的优势&…