Linux:Ext系列文件系统

news2024/12/27 7:55:19

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、理解硬件磁盘
    • 1.1 磁盘物理结构
    • 1.2 磁盘的存储结构
    • 1.3 磁盘的逻辑结构
  • 二、文件系统
    • 2.1 引⼊"分区”概念和“块"概念
    • 2.2 inode(重要)
    • 2.3 文件与inode
  • 三、软硬链接
    • 3.1 硬链接
    • 3.2 软链接
    • 3.3 acm
  • 总结


前言

提示:以下是本篇文章正文内容,下面案例可供参考


一、理解硬件磁盘

1.1 磁盘物理结构

在这里插入图片描述
在这里插入图片描述

磁盘可以存储大量的二进制数据,并且断电后也能保持数据不丢失。磁盘通常由盘片、磁头、电机驱动系统和接口等组件构成。盘片是磁盘存储数据的基础,由硬质合金材料或玻璃材料等涂布磁性材料形成。磁头则是读取和写入数据的关键部件,悬浮在盘片上方几微米的距离,可以读取和写入数据。

1.2 磁盘的存储结构

在这里插入图片描述
扇区:是磁盘存储数据的基本单位,通常为512字节,块设备
在这里插入图片描述
在这里插入图片描述
⽂件 = 内容+属性 都是数据,⽆⾮就是占据那⼏个扇区的问题!所以对文件的访问物理上就是找寻扇区的问题。

  • 磁盘容量=磁头数 × 磁道(柱⾯)数 × 每道扇区数 × 每扇区字节数

CHS寻址:

是一种寻址模式,对早期的磁盘⾮常有效,知道⽤哪个磁头,读取哪个柱⾯上的第⼏扇区就可以读到数据了。但是CHS模式⽀持的硬盘容量有限,因为系统⽤8bit来存储磁头地址,⽤10bit来存储柱⾯地址,⽤6bit来存储扇区地址,⽽⼀个扇区共有512Byte,这样使⽤CHS寻址⼀块硬盘最⼤容量为256102463*512B=8064MB(1MB=1048576B)(若按1MB=1000000B来算就是8.4GB)

1.3 磁盘的逻辑结构

对于软件层面上,我们应该这么理解磁盘:将整个磁盘视为一个线性结构的数组,然后每个扇区可以看作为这个数组的下标,数组存储的就是文件数据
在这里插入图片描述
在这里插入图片描述

这样每⼀个扇区,就有了⼀个线性地址(其实就是数组下标),这种硬盘寻址模式叫做LBA(Logical Block Addressing),LBA寻址方式将硬盘上的所有扇区依次从“0”开始进行编号,直到硬盘的最大扇区数减1,相比于CHS简化了数据访问过程。
在这里插入图片描述

在磁盘使⽤者看来,根本就不关⼼CHS地址,⽽是直接使⽤LBA地址,磁盘内部⾃⼰会用特定的方法转换。
所以:从现在开始,磁盘就是 ⼀个元素为扇区 的⼀维数组,数组的下标就是每⼀个扇区的LBA地址。OS使⽤磁盘,就可以⽤⼀个数字访问磁盘扇区了。

二、文件系统

章节一我们主要讲解了磁盘的结构和访问里面数据的方式,有了上面对于磁盘的理解,接下来我们自然要来引入磁盘里面的数据,因为我们要对磁盘中的文件进行管理自然要先描述其各种属性,组织起来再管理。

2.1 引⼊"分区”概念和“块"概念

其实磁盘是可以被分成多个分区(partition)的,以Windows观点来看,你可能会有⼀块磁盘并且将分区成C,D,E盘。
软件层面上其实就是定义一个结构体,其中记录每个区的结束和起始LAB,然后定义结构体类数组来存放每一个区

struct partition
{
    int start;
    int end;
}


struct partition   part[n];

其实硬盘是典型的“块”设备,操作系统读取硬盘数据的时候,其实是不会⼀个个扇区地读取,这样效率太低,⽽是⼀次性连续读取多个扇区,即⼀次性读取⼀个”块”(block)。
硬盘的每个分区是被划分为⼀个个的”块”。⼀个”块”的⼤⼩是由格式化的时候确定的,并且不可以更改,最常⻅的是4KB(八个扇区大小),即连续⼋个扇区组成⼀个 ”块”。”块”是⽂件存取的最⼩单位。

注意:

  • 区相当于对整个磁盘做出划分,接着将区划分为块组(block group),块组中每个块都包含了存储文件属性和内容的具体管理方式!!!
  • 磁盘就是⼀个三维数组,我们把它看待成为⼀个"⼀维数组",数组下标就是LBA,每个元素都是扇区
  • 每个扇区都有LBA,那么8个扇区⼀个块,每⼀个块的地址我们也能算出来。
  • 知道LBA:块号=LBA/8
  • 知道块号:LAB=块号*8+n.(n是块内第⼏个扇区)
  • 当我们写入一个文件哪怕只有一个比特位,但是操作系统依然会为我们在硬件上申请四个字节的区域!

在这里插入图片描述

2.2 inode(重要)

文件 = 内容 + 属性 ,而文件内容数据存放在块的Data blocks中,inode存放文件属性(如文件创建日期,权限等),是一个结构体,一般为128字节,一般而言一个文件一个inode

以下图片就是一个被分组涵盖的内容分区,Boot Block涵盖开机关机信息不做赘述,
在这里插入图片描述
inode table:
保存分组内部所有可用的(已经使用+没有使用)的inode。
Data blocks:
保存分组内部所有可用的(已经使用+没有使用)的数据快。
Inode Bitmap:
Inode对应的位图结构。假设inode一共有n个,位图结构中的比特位的个数至少也为n个。
位图中比特位的位置与当前文件的对应的ID是一一对应的,比特位的1和0表示是否被占用。
block Bitmap:
数据块对应的位图结构。位图中比特位的位置和当前data block对应的数据块的位置是一一对应的。

  • 文件属性存储在Inode中,Inode是固定大小,一个人文件,一个Inode。一个文件的所有属性几乎都存储在Inode中,但是文件名并不存储在Inode中。
  • 文件的内容存储在data block数据块中,数据块随着应用类型的变化,大小也会发生变化。
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在inode,有一个关于数组块的数组,data block block[15]。个数组元素的个数是固定的。但并表示这个文件可以写入的数据量是一定的。如图:每一个数据块都有自己的编号,这个数组中存放的就是该文件所使用的数据块的编号,通过这个数组就可以实现我们查找内容的行为。虽然只有15元素,但并不代表我们仅可以使用15个数据块。从下表为12的元素开始,所指向的数据块里边保存的是其他数据块的编号,下一级数据块中的内容可以使下下一级数据块的编号。如此,就可以增加我们可使用数据块的个数。
如果一个分组是10GB,但文件大小是20GB,但这影响吗,不影响,因为上面的映射关系是可以跨组访问的,但不建议这么做,因为一旦跨组访问了,意味所有的块不连续了,磁盘寻址效率也会大大降低。

如果要知道inode一共有多少个,没有使用的是多少个,如果通过计算获取结果,效率太低了,这时Group Descriptor Table出现了。

Group Descriptor Table:
包含对应分组的宏观属性信息,包括:一共有多少个数据块,使用了多少;一共有多少个Inode,使用了多少等等。

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

并且超级块通常在分组内多个组有一个超级块,在系统中是有一定比例的,假设我一个100G的分区有1000个分组,每20个分组就有一个super block,那么总共就有50个超级块。为什么需要这些超级块呢?本质上还是为了数据备份,如果某个块组或者inode丢失,那么就 可以通过super block来进行恢复

inode是以分区为单位的,每个区都有自己的inode编号,它们编号可以相同

所以当我们删除一个块(文件内容)的时候,不需要删除块,只需要把对应inode bitmap和block bitmap的位置零即可。

2.3 文件与inode

目录也是文件=属性+内容,目录的内容中放的是文件名和inode的映射关系。inode唯一,文件名也就唯一;查找文件的顺序,先文件名再寻对应的inode编号。这就解释了为什么去掉了目录的r权限,就不能访问目录中的内容了。没有r权限就不能访问文件名和inode的映射关系,就找不到这个文件。w权限:新建文件,最后一定要向当前所处目录内容中写入,文件名和inode的映射关系。

文件的增删查改:

  1. 增加文件:
  • 当在Linux系统中创建一个新文件时,系统会为该文件分配一个唯一的inode号码,并在inode中存储该文件的属性信息。
  • inode数量是有限的,因此当文件系统中的inode耗尽时,即使磁盘空间还有剩余,也无法再创建新文件。
  1. 删除文件:
  • 删除文件时,系统实际上只是删除了文件名与inode号码之间的链接关系,并释放了inode号码和其所占用的磁盘空间。但文件的实际内容在磁盘上仍然存在,直到其占用的磁盘空间被其他文件覆盖。在文件内容上:删除=允许被覆盖!!!
  • 如果删除了一个目录,并且该目录下有子目录或文件,那么该目录下的所有子目录和文件都将被一并删除(除非使用了-r选项来递归删除)。
  1. 查询文件:
  • 查询文件时,系统首先通过文件名找到对应的inode号码,然后读取inode中的信息以获取文件的实际内容位置。(找到指定的文件->文件所在的目录->根据文件名:inode->目标文件的inode,当我们目标文件的路径非常的复杂的时候,OS会做路径的逆向解析,但不是每次都做,OS会对常用的路径做缓存)
  • 使用如ls -i命令可以查看文件的inode号码。
  1. 修改文件:
  • 修改文件时,系统会根据文件的inode号码找到对应的inode,并修改其中的文件属性信息(如修改时间戳、权限等)。
  • 如果修改的是文件的内容,那么系统实际上是在磁盘上找到文件内容所在的块,并直接修改这些块的内容。但inode中的文件字节数等属性信息会相应地更新。

三、软硬链接

3.1 硬链接

我们看到,真正找到磁盘上⽂件的并不是⽂件名,⽽是inode。其实在linux中可以让多个⽂件名对应于同⼀个inode。

[root@localhost linux]# touch abc
 [root@localhost linux]# ln abc def
 [root@localhost linux]# ls -li abc def
263466 abc
263466 def
  • 硬链接不是一个独立的文件,因为它没有独立的inode
    所谓建立硬链接,其实就是在特定的目录下新增文件名和指向文件inode编号的映射关系!!!
  • abc和def的链接状态完全相同,他们被称为指向⽂件的硬链接。内核记录了这个连接数,inode263466的硬连接数为2。
  • 我们在删除⽂件时⼲了两件事情:1.在⽬录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应的磁盘释放。
  • .和. .就是硬链接,硬链接可以做文件备份

3.2 软链接

硬链接是通过inode引⽤另外⼀个⽂件,软链接是通过名字引⽤另外⼀个⽂件,但实际上,新的⽂件和被引⽤的⽂件的inode不同,应⽤常⻅上可以想象成⼀个快捷⽅式。在shell中的做法

 [root@localhost linux]# ln -s abc.s abc
 [root@localhost linux]# ln -s abc.s abc[root@localhost linux]# ls -li
263563 -rw-r--r--. 2 root root 0 915 17:45 abc
261678 lrwxrwxrwx. 1 root root 3 915 17:53 abc.s -> abc
263563 -rw-r--r--. 2 root root 0 915 17:45 def   //权限后面的数字代表硬链接数目

在这里插入图片描述
软链接其实就相当于增加一个window下的快捷方式

3.3 acm

acm
下⾯解释⼀下⽂件的三个时间:
• Access:最后访问时间
• Modify:⽂件内容最后修改时间
• Change:属性最后修改时间


总结

本文总结了磁盘的物理结构,并抽象为软件层面上的结构,并将这个结构拆分为若干数据结构进行讲解。

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

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

相关文章

Alogrithm:巴斯卡三角形

巴斯卡三角形(Pascals Triangle)是一个由数字排列成的三角形,每一行的数字是由前一行的两个相邻数字相加得到的。巴斯卡三角形的每一行对应着二项式展开式的系数。具体如下图所示: 巴斯卡三角形的性质 第 0 行只有一个数字 1。第 …

项目资源管理

点击系统侧边栏里的项目图标 ,会在系统资源列表里显示当前任擎服务器上所有项目的各种资源列表,包括数据模型、后台服务、前端文件、数据表单和微信小程序等。 项目资源管理器用来对开发者自己开发的软件项目进行管理,这里的“项目”是指仅…

WEB开发: Node.js路由之由浅入深(一) - 全栈工程师入门

作为一个使用Node.js多年的开发者,我已经习惯于用Node.js写一些web应用来为工作服务,因为实现快速、部署简单、自定义强。今天我们一起来学习一个全栈工程师必备技能:web路由。(观看此文的前提是默认你已经装好nonde.js了&#xf…

大模型分类3—按功能特性

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl根据功能特性,大模型可分为生成式、分析式和交互式大模型。 1. 大模型分类概述 1.1 生成式大模型 生成式大模型的核心能力在于其创造性,能够独立生成新的数据样本,如文本、图像和音频等。这类…

VUE拖拽对象到另一个区域

最近有个需求是需要在web端定制手机的界面UI(具体实现比较复杂,此处不做阐述,此文章只说明拖拽效果实现),为了方便用户操作,就想实现这种效果:从右侧的图标列表中拖拽图标到左侧模拟的手机界面上…

iOS平台接入Facebook登录

1、FB开发者后台注册账户 2、完善App信息 3、git clone库文件代码接入 4、印尼手机卡开热点调试 备注: 可能遇到的问题: 1、Cocos2dx新建的项目要更改xcode的git设置,不然卡在clone,无法在线获取FBSDK 2、动态库链接 需要在…

传输层TCP_三次握手四次挥手的过程

三次握手四次挥手 三次握手 三次握手

小迪笔记 第四十五天 sql 注入进阶 :二次注入,堆叠注入,数据读取(load_file)加外带

二次注入 概念:就是我们注入的语句(刚注入时 不会产生影响)但是我们的恶意代码会进入数据库 他在被二次利用的时候就会进行执行 这个就是二次注入 这个的典型案例就是账号密码的修改 : 大家应该也知道 账号注册一般是禁止你使…

【SNIP】《An Analysis of Scale Invariance in Object Detection – SNIP》

CVPR-2018 Singh B, Davis L S. An analysis of scale invariance in object detection snip[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 3578-3587. https://github.com/bharatsingh430/snip?tabreadme-ov-file 文章目录 …

【C++|Linux|计网】构建Boost站内搜索引擎的技术实践与探索

目录 1、项目的相关背景 2.搜索引擎的相关宏观原理 3.搜索引擎技术栈和项目环境 4.正排索引vs倒排索引-搜索引擎具体原理 5.编写数据去标签与数据清洗的模块 Parser 5.1.去标签 目标: 5.2.代码的整体框架: EnumFile函数的实现: Enu…

ComfyUI绘画|提示词反推工作流,实现自动化书写提示词

今天先分享到这里~ ComfyUI绘画|关于 ComfyUI 的学习建议

高频面试题(含笔试高频算法整理)基本总结回顾20

干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…

【AI模型对比】AI新宠Kimi与ChatGPT的全面对比:技术、性能、应用全揭秘

文章目录 Moss前沿AI技术背景Kimi人工智能的技术积淀ChatGPT的技术优势 详细对比列表模型研发Kimi大模型的研发历程ChatGPT的发展演进 参数规模与架构Kimi大模型的参数规模解析ChatGPT的参数体系 模型表现与局限性Kimi大模型的表现ChatGPT的表现 结论:如何选择适合自…

性能测试基础知识jmeter使用

博客主页:花果山~程序猿-CSDN博客 文章分栏:测试_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 性能指标 1. 并发数 (Con…

如何通过 Windows 自带的启动管理功能优化电脑启动程序

在日常使用电脑的过程中,您可能注意到开机后某些程序会自动运行。这些程序被称为“自启动”或“启动项”,它们可以在系统启动时自动加载并开始运行,有时甚至在后台默默工作。虽然一些启动项可能是必要的(如杀毒软件)&a…

基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频&#xff09…

STM32 Jlink Flash读写固件数据

目录 一、从单片机读数据 1.创建工程XX.jflash,已经有的工程不需要创建直接打开 2.创建完成,连接jlink 3.读取整个芯片的数据 4.读取完成后保存数据 5.选择保存的数据格式,以及位置,读数据完成 二、写固件数据到单片机 1.创建工程XX.j…

Scrapy解析JSON响应v

在 Scrapy 中解析 JSON 响应非常常见,特别是当目标网站的 API 返回 JSON 数据时。Scrapy 提供了一些工具和方法来轻松处理 JSON 响应。 1、问题背景 Scrapy中如何解析JSON响应? 有一只爬虫(点击查看源代码),它可以完美地完成常规的HTML页面…

波动理论、传输线和S参数网络

波动理论、传输线和S参数网络 传输线 求解传输线方程 对于传输线模型,我们通常用 R L G C RLGC RLGC 来表示: 其中 R R R 可以表示导体损耗,由于电子流经非理想导体而产生的能量损耗。 G G G 表示介质损耗,由于非理想电介质…

鸿蒙开发——使用ArkTs处理XML文本

1、概 述 XML(可扩展标记语言)是一种用于描述数据的标记语言,旨在提供一种通用的方式来传输和存储数据,特别是Web应用程序中经常使用的数据。XML并不预定义标记。因此,XML更加灵活,并且可以适用于广泛的应…