【Linux-基础IO】磁盘的存储管理详解

news2024/11/22 14:29:52

磁盘的存储管理

由于一个磁盘中包含了大量的扇区,为了方便管理,我们对磁盘进行了分区,其中每个分区又进一步划分为多个块组(Block Group),每个块组中包含该块组的数据存储情况以及具体的数据

假设有一个800GB的磁盘,先将其划分为5个区,第1个200GB,第2个100GB,第3个150GB,第4个150GB,第5个200GB

由于每个分区的存储空间依然很大,每个分区进一步分为不同的块组(Block Group)

  • Boot Block(引导块)

★ 在许多文件系统中,特别是在类Unix操作系统中,磁盘的第一个块通常是引导块(Boot Block)或引导扇区(Boot Sector)

什么是引导块?

位置:引导块位于磁盘的最开始部分,通常是第一个扇区(Sector),也就是 Cylinder 0, Head 0, Sector 1(CHS地址)或逻辑块地址(LBA)0。
大小:在传统的硬盘上,一个扇区通常是512字节,但现代硬盘可能使用4KB的扇区大小。
功能:引导块包含了启动计算机所需的最基本的代码,这些代码负责加载操作系统的核心(Kernel)到内存中,并开始执行。
内容:
引导加载程序(Boot Loader):例如,Linux系统的GRUB或GRUB2,Windows系统的NTLDR或BOOTMGR。
分区表:磁盘分区的信息,通常在主引导记录(MBR)或全局唯一标识分区表(GPT)中。

引导块与块组的关系

独立性:引导块是独立于文件系统的块组结构的。它不包含在任何一个块组内,因为它需要在文件系统被识别和挂载之前就被执行。
顺序:在启动过程中,计算机的BIOS或UEFI固件首先读取引导块中的代码,然后根据引导加载程序的指示,加载操作系统的其他部分。
保护:由于引导块对于启动过程至关重要,通常会有一些措施来保护它不被意外覆盖或损坏。

引导块与MBR

在传统的MBR(Master Boot Record)分区方案中,引导块通常就是MBR本身,它包含引导加载程序的前446字节和分区表的后64字节,以及一个2字节的结束标志。
在GPT(GUID Partition Table)分区方案中,引导块是独立的,GPT分区表位于磁盘的其它位置。

为什么需要引导块?

启动过程:引导块是启动过程的起点,没有它,计算机无法知道如何加载操作系统。
系统恢复:在系统崩溃或其他问题时,引导块中的代码可以用来恢复系统或进入救援模式。
多系统启动:多引导加载程序(如GRUB)可以驻留在引导块中,允许用户选择要启动的操作系统。

 

★ 每个块组又包含着Block BitMap、Inode BitMap、Inode Table、Data Block、Group Descriper Table还有可能包含Super Block(超级块);接下来我们一个一个介绍

  • Super Block(超级块)

在文件系统中,超级块(Super Block)是一个包含文件系统全局信息的特殊数据结构。它是文件系统元数据的一部分,存储了文件系统的配置参数和总体状态信息。记录的信息主要有:block和inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说是整个文件系统结构被破坏了

但是,Super Block并不是全部都是不一样的,反而在同一个分区中,所有的Super Block内容都是一样的,并且并不是每个块组都有Super Block;有了这个特性,如果某个Super Block损坏,可以使用其他Super Block进行恢复文件系统

  • Group Descriptor Table(组描述符表)

在类Unix文件系统中,组描述符表(Group Descriptor Table)是一个数据结构,它包含了文件系统中每个块组(Block Group)的元数据。组描述符表中的每个条目都对应一个块组,并提供了该块组的管理信息。

组描述符表是文件系统内部结构的一个重要组成部分,它帮助操作系统高效地管理磁盘空间和文件系统元数据。在处理文件系统操作时,组描述符表会被频繁地访问和更新。

组描述符的内容:

块组ID:块组的唯一标识符。
块位图的位置:指向块组中块位图(Block Bitmap)的指针,块位图用于跟踪哪些块是空闲的,哪些是已分配的。
inode位图的位置:指向块组中inode位图(Inode Bitmap)的指针,inode位图用于跟踪哪些inode是空闲的,哪些是已分配的。
inode表的位置:指向块组中inode表的指针,inode表包含了块组中所有inode的列表。
空闲块计数:块组中空闲块的数量。
空闲inode计数:块组中空闲inode的数量。
目录数量:块组中包含的目录数量。
未使用的数据块数量:块组中未使用的数据块数量。
未使用的inode数量:块组中未使用的inode数量。

组描述符的作用:

文件系统结构管理:组描述符表帮助文件系统管理器了解每个块组的结构和状态。
空间分配:在分配新的文件或目录时,文件系统使用组描述符表来确定哪个块组有足够的空闲空间。
文件系统检查:在文件系统检查(如fsck)期间,组描述符表用于验证文件系统的完整性。

 

组描述符与超级块的关系:

超级块(Super Block)包含了整个文件系统的全局信息,而组描述符表则提供了关于各个块组的详细信息。
通常,超级块后紧跟组描述符表,使得文件系统在挂载时可以快速读取到每个块组的信息。

组描述符的备份:

为了提高可靠性,组描述符表通常也会在文件系统中备份。在EXT文件系统中,每个块组都可以包含一个组描述符表的副本。

  • Inode Table(Inode 表、I节点表)

在类Unix文件系统中,inode表(Inode Table)是一个核心的数据结构,它存储了文件系统中的inode(索引节点)列表。每个inode代表了文件系统中的一个文件或目录,并包含关于该文件或目录的元数据。

inode表的内容:简单来说就是存放文件属性的地方

inode编号:每个inode都有一个唯一的编号,用于在文件系统中标识它。
文件类型:指示该inode代表的是文件、目录、符号链接等。
模式(权限):定义了文件或目录的访问权限,如读、写、执行权限。
文件大小:文件的数据大小,以字节为单位。
时间戳:包括创建时间、最后访问时间、最后修改时间。
链接计数:指向该inode的硬链接数量。
文件所有者ID:拥有该文件的用户ID。
文件组ID:拥有该文件的组ID。
数据块指针:指向文件数据块的指针列表。对于小文件,这些指针直接指向数据块;对于大文件,可能包含间接指针和双重间接指针。

inode表的作用:

文件系统元数据管理:inode表是文件系统管理元数据的主要方式,它允许文件系统跟踪每个文件或目录的状态和属性。
文件访问:通过inode,文件系统可以定位文件的数据块,从而实现对文件的读取、写入和执行操作。
目录维护:目录实际上也是文件,它们的inode包含指向构成目录条目的数据块的指针。

inode表与块组的关系:

在像EXT2、EXT3、EXT4这样的文件系统中,每个块组都有自己的inode表,它包含了该块组中所有文件和目录的inode。
inode表的大小取决于文件系统在创建时设置的inode数量。

inode表的特点:

固定大小:每个inode的大小通常是固定的,这取决于文件系统的设计。
有限数量:文件系统在格式化时就会决定最大inode数量,这个数量通常是固定的。

  • Inode BitMap(Inode 位图)

Inode BitMap用于跟踪文件系统中的inode(索引节点)的使用情况。inode位图与块位图(Block Bitmap)类似,但它们跟踪的是inode而不是数据块

inode位图的内容:

位图:inode位图是一个由位组成的数组,其中每个位对应文件系统中的一个inode。
位的状态:
0(或未设置):表示对应的inode是空闲的,尚未分配给任何文件或目录。
1(或已设置):表示对应的inode已被分配,正在被文件或目录使用。

inode位图的作用:

inode分配:当创建新文件或目录时,文件系统会查看inode位图,找到第一个设置为0的位,然后将该位设置为1,并将对应的inode分配给新文件或目录。
inode释放:当文件或目录被删除时,文件系统会将对应的inode位图中的位设置为0,释放该inode,使其可以再次被分配。
文件系统检查:在文件系统检查(如fsck)期间,inode位图用于验证inode的使用情况,确保文件系统的完整性。

inode位图的特点:

紧凑:由于每个inode只由一个位表示,inode位图在磁盘上占用的空间相对较小。
快速访问:文件系统可以快速扫描inode位图,以找到空闲的inode或检查特定inode的状态。

 

  • Data Blocks(数据块)

在文件系统中,数据块(Data Blocks)是用于存储文件实际数据的基本单元。每个文件或目录由一个或多个数据块组成,这些块可以是连续的,也可以是分散的。

数据块的特点:

大小:数据块的大小通常是固定的,并且是在文件系统格式化时确定的。常见的数据块大小有1KB、2KB、4KB等,但在一些现代文件系统中,数据块的大小可以达到更大的值,如8KB、16KB或更大。
地址:每个数据块都有一个唯一的地址或编号,这样文件系统就可以通过inode(索引节点)中的指针来定位和访问这些块。
分配:数据块可以根据需要动态地分配给文件。当文件增长时,文件系统可能会分配额外的数据块来存储新增的数据。

数据块的作用:

存储文件内容:数据块是文件内容实际存储的地方。对于文件来说,数据块包含了文本、图像、视频等用户数据。
存储目录信息:目录也是一种文件,其数据块中存储的是目录条目,这些条目指向其他文件或子目录的inode。

数据块的管理:

块位图:文件系统使用块位图(Block Bitmap)来跟踪哪些数据块是空闲的,哪些是已使用的。
间接指针:对于大文件,inode中的直接指针可能不足以引用所有数据块。因此,文件系统使用间接指针、双重间接指针和三级间接指针来扩展可以引用的数据块数量。

数据块的分配策略:

连续分配:在简单的文件系统中,文件的数据块可能会被分配在磁盘上的连续位置。这种方法可能导致磁盘碎片。
链表分配:文件的数据块通过一个链表链接起来,每个块包含指向下一个块的指针。这种方法可以减少碎片,但可能会影响性能。
索引分配:使用索引块来存储数据块的地址,这样可以通过单个索引块快速访问大量数据块。

数据块的优化:

预分配:某些文件系统允许对预期会快速增长的文件进行数据块的预分配,以减少文件增长时的分配开销。
延迟分配:文件系统可能会延迟实际的数据块分配,直到确实需要写入数据时才进行,这有助于优化磁盘空间的使用。

  • Block BitMap

块位图(Block Bitmap)用于记录数据块的使用情况

块位图的概念:

定义:块位图是一个由二进制位组成的数组,每个位对应文件系统中的一个数据块。
作用:块位图用于指示每个数据块是空闲还是已被占用。

块位图的组成:

位(Bit):块位图中的每个位代表一个数据块的状态。
    0(零):表示对应的数据块空闲,未分配。
    1(一):表示对应的数据块已分配,正在使用中。

块位图的功能:

数据块分配:当文件系统需要为新文件或目录分配数据块时,会检查块位图,找到第一个值为0的位,将其设置为1,并分配相应的数据块。
数据块释放:当文件或目录被删除,或者不再需要某些数据块时,文件系统会将这些数据块对应的位从1改为0,释放这些数据块。
文件系统检查:在执行文件系统一致性检查(如fsck)时,块位图用于验证数据块的正确分配和释放。

块位图在文件系统中的位置:

块组内:在许多文件系统(如EXT系列)中,每个块组都有自己的块位图,只管理该块组内的数据块。
存储位置:块位图通常位于块组的开始部分,紧随超级块和组描述符表之后。

块位图的特点:

空间效率:由于每个数据块只由一个位表示,块位图占用的磁盘空间非常小。
访问速度:文件系统可以快速扫描块位图,以确定数据块的状态。

一个文件只有一个独立的Inode,Inode的设置是以分区为单位的,不能跨分区;Inode存储文件的属性,文件名不是Inode的属性!我们平常找文件使用的是文件名,并不是Inode,文件名与Inode有什么关联呢?我们可以通过ls -li查看当前目录下所有文件的Inode

 也可以通过 stat [文件名]查看某个文件的Inode

在Linux中目录也是文件,目录也有自己的Inode,因为目录也有自己的属性

 

目录也有自己的存储内容,目录的内容是该目录包含了哪些文件。既然有数据,目录也会有自己的数据块,目录的数据块存储着文件名和该文件的Inode映射关系,因此使用者只需要使用文件名就可以访问指定文件了,因为只要有了文件名,就能在当前目录的数据块中找到该文件名映射的Inode,就能够访问文件了 

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

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

相关文章

分层解耦-01.三层架构

一.对案例的思考 所有的代码都在这一个controller文件中,虽然该代码不复杂。但是如果针对大型项目,代码会很复杂。而且不利于项目的维护,复用性差。因此要修改该代码,使其满足维护方便,复用性好的特点。因此要用到一个…

VMware ESXi更改https的TLS协议版本

简要概述 TLS 1.0 和 1.1 是已弃用的协议,具有广为人知的缺点和漏洞。应在所有接口上启用 TLS 1.2,并在支持的情况下禁用 SSLv3、TL 1.1 和 1.0。强制要求 TLS 1.2 可能会破坏 vSphere 的第三方集成和加载项。在实施 TLS 1.2 后仔细测试这些集成&#x…

游戏报错x3daudio1_7.dll缺失怎么回事?总结几个有效解决方法分享

1. x3daudio1_7.dll 简介 1.1 定义 x3daudio1_7.dll 是一个动态链接库(DLL)文件,它与 Microsoft DirectX 音频组件紧密相关。该文件主要负责处理三维(3D)音频效果,提供给游戏和多媒体应用程序以增强用户体…

HDLBits中文版,标准参考答案 | 3.1.2 Multiplexers | 多路复用器

关注 望森FPGA 查看更多FPGA资讯 这是望森的第 9 期分享 作者 | 望森 来源 | 望森FPGA 目录 1 2-to-1 multiplexer | 2 对 1 多路复用器 2 2-to-1 bus multiplexer | 2 对 1 总线多路复用器 3 9-to-1 multiplexer | 9 对 1 多路复用器 4 256-to-1 multiplexer | 256 对 …

CPU、GPU、显卡

CPU VS GPUCPU(Central Processing Unit),中央处理器GPU(Graphics Processing Unit),图形处理单元GPU 的技术演变CUDA(Compute Unified Device Architecture) 显卡(Video…

【数据结构与算法】Greedy Algorithm

1) 贪心例子 称之为贪心算法或贪婪算法,核心思想是 将寻找最优解的问题分为若干个步骤每一步骤都采用贪心原则,选取当前最优解因为没有考虑所有可能,局部最优的堆叠不一定让最终解最优 贪心算法是一种在每一步选择中都采取在当前状态下最好…

华为OD机试 - 冠亚军排名(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

Electron桌面应用打包现有的vue项目

1 环境准备 Node:v16.20.2(本地vue项目nodejs版本)Electron:22.3.7vue:2 版本管理 2 Vue项目准备 更新相关依赖npm install --registry https://registry.npmmirror.com/npm run dev 3、引入Electorn 安装指定版…

基于C语言的排序

排序的概念 : 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录&#xff0c…

Hadoop大数据入门——Hive-SQL语法大全

Hive SQL 语法大全 基于语法描述说明 CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION] path; SELECT expr, ... FROM tbl ORDER BY col_name [ASC | DESC] (A | B | C)如上语法,在语法描述中出现: [],表示可选,如上[LOCATI…

课堂点名系统小程序的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,论坛信息管理,基础数据管理,课程信息管理,课程考勤管理,轮播图信息 微信端账号功能包括:系统首页,论坛信…

【深度强化学习】DDPG+popart技巧(最详解)

文章目录 前言遇到的困难参考最后实现情况 一、popart 是什么?(论文解读)具体的理解关于mappo原代码中debiasing_term 二、复刻popart主要进行了什么操作?1.art:2.pop:3.算法理解4.上述未考虑的部分(关键) 三、代码实现…

传感器模块编程实践(三)舵机+超声波模块融合DIY智能垃圾桶模型

文章目录 一.概要二.实验模型原理1.硬件连接原理框图2.控制原理 三.实验模型控制流程四.智能感应垃圾桶模型程序五.实验效果视频六.小结 一.概要 随着科技的飞速发展和环保意识的日益增强,智能垃圾桶成为了城市生活的新宠,智能垃圾桶人们无需接触垃圾桶…

【Linux系统编程】第二十八弹---构建基础文件操作库与理解标准错误流(stderr)在C与C++中的应用

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、封装简单的库 1.1、定义文件结构 1.2、打开文件 1.3、刷新缓冲区 1.4、写文件 1.5、关闭文件 1.6、各文件代码 2、s…

医院管理新趋势:Spring Boot技术引领

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…

Github优质项目推荐 - 第五期

文章目录 Github优质项目推荐 - 第五期一、【localsend】,47.5k stars - 附近设备文件互传二、【Pake】,29.9k stars - 网页变成桌面应用三、【laravel-crm】,10.7k stars - CRM 解决方案四、【localstack】,55.7k stars - 本地 A…

【C++】二叉搜索树+变身 = 红黑树

🚀个人主页:小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言一、定义与性质二、红黑树节点的定义三、新增节点插入四、验证红黑树五、AVL树和红黑树比较 前言 本文仅适合了…

【算法】DFS系列之 FloodFill 算法

【ps】本篇有 7 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)图像渲染 .1- 题目解析 .2- 代码编写 2)岛屿数量 .1- 题目解析 .2- 代码编写 3)岛屿的最大面积 .1- 题目解析 .2- 代码编写 4)被围绕的区域 .1-…

allegro精确画圆形边框

1.显示原点位置: 2.class-subclass依次选择Board Geometry-Outline 3.菜单ADD---Circle,右侧option,依次设置如下,如图可设置为圆心(0,0),半径为42mm的边框,不要忘了右键Done,完成绘…

海量数据去重的hash,布隆过滤器Bloom Filter,一致性hash

文章目录 一、⭐hash函数如何选取hash函数?冲突处理 二、⭐海量数据去重布隆过滤器**布隆过滤器介绍**布隆过滤如何应用 三、⭐一致性哈希基本原理: 四、⭐一道面试题 一、⭐hash函数 hash函数的作⽤:避免插⼊的时候字符串的⽐较&#xff0c…