【Linux系统化学习】深入理解文件系统(Ext2文件系统)

目录

前言

磁盘的物理结构

物理结构

 磁头和盘片工作解析图

盘面区域划分图(俯视盘面图)

扇区的寻址、定位(CHS定位)

磁盘存储的逻辑抽象结构

LBA定址 

文件系统

磁盘分区

EXT2文件系统

组块中的信息介绍

查看inode编号


前言

上两篇文章我们研究的是通过进程将文件加载到内存中打开文件对文件进行一系列的操作;但是在计算机内部不是所有的的文件都被打开,大部分文件是没有被打开的(当前并不需要访问),都在磁盘中进行保存;被进程打开的文件需要管理,没有被进程打开的文件也需要被管理

没有被打开的文件的核心工作通过路径快速定位文件,对磁盘中的文件进行增删查改(CRUD)操作。

对文件的管理工作就包括:

  • 进程打开的文件进行管理
  • 没有被打开的储存在磁盘中文件进行管理

这就是文件系统,文件系统的作用解决文件的存储问题。


磁盘的物理结构

操作系统如何管理磁盘中未打开的文件就要从磁盘的物理结构说起,延申抽象程逻辑结构进行解密。

物理结构

 

 磁头和盘片工作解析图

这里的盘片可以想象成一个双面的光盘,通过磁盘高速转动和磁头震动两面都可以写入数据 。

盘面区域划分图(俯视盘面图)

 

磁盘的每一面都含有若干个划分好的宽度相等的同心圆环,又将每个圆环切割成面积相等的扇形形成扇区,扇区的最小存储单元为512字节。

扇区的寻址、定位(CHS定位)

如果我们想要向一个扇区写入:

  1. 首先要找到那一面,本质就是选择磁头(Head)
  2. 再选择该面上的哪一个磁道(Cylinder/track)
  3. 最后选择该磁道上的一个扇区(Sector)

这就是CHS定位法

当我们找到对应的扇区就可以进行写入,可以向任意一个扇区或者向连续多个扇区写入;当然也可以不指定扇区,直接随机写入。


磁盘存储的逻辑抽象结构

不知道大家小时候有没有玩过磁带,磁带本身是一圈一圈盘起来的上面记录着数据;当我们将磁盘破坏以后,就可以将盘起来的磁带拉成一条线。由原来的圆形结构拉直成现在的线性结构。

通过这个案例我们可以将上面磁盘的每个原型结构盘面抽象成线性结构。所有的面组成一个很长线性结构, 将这个很长的线性结构分成几个面线性结构;再将每个面包含的每条磁道划分成线性结构;最后将每个磁道中包含的扇区分成更小的线性结构。这样我们就将物理磁盘结构抽象成为一个类似与数组的线性结构;对于磁盘的管理就变成了对数组的管理。

LBA定址 

一个扇区的大小为512字节,我们将连续的八块扇区组成一个文件块,大小为4KB。

因此操作系统可以按照扇区为单位进行存储也可以基于文件系统,按照文件块为单位进行数据存储。 

我们对每个文件块从头开始进行编号,对某个文件进行CRUD操作时只需要找到文件对应的编号即可;这样的方式称为:逻辑区块地址(Logical Block Address, LBA)


文件系统

磁盘分区

计算机中存放信息的主要的存储设备就是磁盘,但是磁盘不能直接使用,必须对硬盘进行分割,分割成的一块一块的硬盘区域就是磁盘分区。在传统的磁盘管理中,将一个磁盘分为两大类分区:主分区和拓展分区。主分区是能够安装操作系统,是能够进行计算机启动的分区,这样的分区可以直接格式化,然后安装系统,直接存放文件。

磁盘分区的目的:

  • 有利于管理,系统一般单独放一个区,这样由于系统区只放系统,其他区不会受到系统盘出现磁盘碎片的性能影响。
  • 如果一个分区出现逻辑损坏,仅损坏的分区而不是整个硬盘受影响。
  • 每个分区可以根据不同的需求定制。例如,如果一个分区很少往里写数据,就可以将它加载为只读。如果想要许多小文件,就需要使用有许多节点的文件系统分区。

总结:方便管理和降低安全隐患。

就像我们新买的笔记本电脑进行分盘,C盘是系统文件;D盘安装一些软件或者游戏;E盘放我们的代码或者文件等等。

EXT2文件系统

上面我们对一个磁盘进行了分区;假设我们现在有一个500GB的磁盘分为四个区大小分别为100GB、100GB、100GB、200GB,这四个分区的文件存储机制都是一样的,现在我们之研究一个区即可。上面我们提到八个扇区组成一个文件块,那么一个分区就含有数量很多的块,对这些小内存块一一很难管理。但是我们可以将这一块组织起来形成一个块组,对这些形成的块组进行管理。

组块中的信息介绍

Block(块):磁盘中最小存储单元是扇区(1扇区=512Bytes),而文件系统的最小存储单元是Block(一般地,1Block = 4KB = 8 扇区)。在 Ext2 文件系统中,磁盘的整个空间是以块为单位被管理的,块也是被分配来存储数据的最小单位,一个文件即使只有 1 字节,也会至少占用一个存储块。类似于内存中使用地址标记每个字节,文件系统用存储块的块号来标记每个存储块。

Boot Block(引导块):每个磁盘分区的开头 1024 字节大小都预留为分区的启动扇区,存放引导程序和数据,所以又叫引导块。引导块在第一个 Block,即 Block 0 中存放,但是未必占满这个 Block,原因是 Block 的大小可能大于 1024 字节。

inode Table(i结点表):存放文件的属性,如:文件大小、权限、所有者、ACM时间、inode编号、Date blocks中占据的内存块编号。

Data blocks(数据区):磁盘中最小存储单元是扇区(1扇区=512Bytes),而文件系统的最小存储单元是Block(一般地,1Block = 4KB = 8 扇区)。在 Ext2 文件系统中,磁盘的整个空间是以块为单位被管理的,块也是被分配来存储数据的最小单位,一个文件即使只有 1 字节,也会至少占用一个存储块。类似于内存中使用地址标记每个字节,文件系统用存储块的块号来标记每个存储块。

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

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

GDT(Group Descriptor Table/块组描述符):描述块组属性信息,用来描述每个 group 的开始与结束位置的 block 号码,以及说明每个块(superblock、bitmap、inodemap、datablock) 分别介于哪一个 block 号码之间

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

注:超级块并不是每个块组都含有的而是每个分区中的某几个块组含有,当一个超级块失效时含有超级块的块组会将数据进行拷贝。

查看inode编号

ls - l  - i

一般情况下,一个文件一个inode,基本上inode每个文件都要在整个分区具有唯一性;Linux内核中识别文件和文件名没有关系只和inode有关系。因此文件名和inode具有映射关系。

总结:

  • 内容和属性都是数据,并且内容和属性分开存储;内容存储在block中,属性存储在inode中
  • 用户只使用文件名,内核使用inode;文件名和inode具有映射关系
  • 新建文件只需要在inode位图中寻找一个空闲的inode,并且根据块位图分配相应的块;并将相应的块的编号和文件的各种属性填入inode即可。
  • 删除一个文件只需要修改文件inode对应的inode位图即可。
  • 目录也是文件,目录内部直接保存着此目录中所有文件和每个文件的inode的映射关系。
  • 文件名不属于文件属性。

今天对Linux下文件系统的分享到这就结束了,希望大家读完后有很大的收获,也可以在评论区点评文章中的内容和分享自己的看法;个人主页还有很多精彩的内容。您三连的支持就是我前进的动力,感谢大家的支持!!! 

 

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

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

相关文章

14个常见的Java课程设计/毕业设计合集(源码+文档)

从网上整理收集了14个常见的java系统设计源码,可以用于课程作业或者毕业设计。 1.基于java的家政预约网站系统 平台采用B/S结构,后端采用主流的Springboot框架进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 …

ComfyUI新宠,精准位置生成模型GLIGEN,附下载

GLIGEN 是一种在文本到图像模型中指定对象精确位置的直观方法。自带GUI,操作非常便利,可以精确控制要在什么位置画什么内容,比纯文字描述的RPG-DiffusionMaster更精确。 ComfyUI是一个基于节点的图形用户界面(GUI)工具…

【AI场景应用】智能电话机器人

从前有一个小型电商公司,每天都接收大量的客户咨询和订单确认电话。由于人手不足,公司的客服团队经常忙得不可开交。为了解决这个问题,他们引入了一位智能电话机器人,名叫小智。 小智是一位功能强大的机器人,他能够全…

助力智能化农田作物除草,基于轻量级YOLOv8n开发构建农田作物场景下玉米苗、杂草检测识别分析系统

在我们前面的系列博文中,关于田间作物场景下的作物、杂草检测已经有过相关的开发实践了,结合智能化的设备可以实现只能除草等操作,玉米作物场景下的杂草检测我们则少有涉及,这里本文的主要目的就是想要基于最新的YOLOv8下最轻量级…

33、IO/标准IO对图片操作练习及文件IO相关练习20240219

一、使用fread和fwrite完成两个图片文件的拷贝&#xff08;标准IO&#xff09;。 代码&#xff1a; #include<myhead.h>int main(int argc, const char *argv[]) {FILE *srcfpNULL;FILE *destfpNULL;if((srcfpfopen("./hongfeng.bmp","r"))NULL ||…

寻找最富裕的小家庭

题目描述 在一棵树中&#xff0c;每个节点代表一个家庭成员&#xff0c;节点的数字表示其个人的财富值&#xff0c;一个节点及其直接相连的子节点被定义为一个小家庭。 现给你一棵树&#xff0c;请计算出最富裕的小家庭的财富和。 输入描述 第一行为一个数N&#xff0c;表示…

【LeetCode-494】目标和(回溯动归)

目录 LeetCode494.目标和 题目描述 解法1&#xff1a;回溯法 代码实现 解法2&#xff1a;动态规划 代码实现 LeetCode494.目标和 题目链接 题目描述 给定一个非负整数数组&#xff0c;a1, a2, ..., an, 和一个目标数&#xff0c;S。现在你有两个符号 和 -。对于数组中…

哪个电商抠图软件比较好用?这些软件也太好用了吧

当需要从原始场景中分离图片中的对象时&#xff0c;抠图变得尤为关键。对于电商从业者而言&#xff0c;抠图是不可或缺的步骤。手动抠图耗时费力&#xff0c;而利用一键抠图软件可以显著提高工作效率和质量。然而&#xff0c;市场上有众多抠图软件&#xff0c;其中哪些是真正好…

【已解决】windeployqt.exe此应用无法在你电脑上运行

遇到这种问题时&#xff0c;通常网络会给出右击程序的兼容性或者以管理员命令行身份运行该程序。但是本文想要告诉的是这个windeployqt.exe出现此应用无法在你电脑上运行问题出现时&#xff0c;如何解决&#xff1f; 解决方案 笔者出现的问题是这个exe大小变成0kb所以无法打…

docker 运行 tdengine 并且mybatis 连接

docker 运行 tdengine # 创建本地目录 mkdir -p /taos/log mkdir -p /taos/data mkdir -p /usr/share/zoneinfo docker run -d --name tdengine --hostname"tdengine-server" \-v /taos/log:/var/log/taos -v /taos/data:/var/lib/taos \-v /usr/share/zoneinf…

【详细流程】vue+Element UI项目中使用echarts绘制圆环图 折线图 饼图 柱状图

vueElement UI项目中数据分析功能需要用到圆环图 折线图 饼图 柱状图等&#xff0c;可视化图形分析 安装流程及示例 1.安装依赖 npm install echarts --save2.在main.js中引入并挂载echarts import echarts from echarts Vue.prototype.$echarts echarts3.在需要使用echart…

Redis RabbitMQ

Redis&#xff1a;轻量级&#xff0c;NoSQL数据库 redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash&#xff08;哈希类型&#xff09;。这…

VMware还原Windows11 ghost镜像

文章目录 环境步骤准备制作启动iso文件创建虚拟机启动虚拟机还原Windows 参考 环境 Windows 11 家庭中文版VMware Workstation 17 Pro石大师装机大师Windows 11 ghost系统镜像 步骤 准备 下载好Windows 11 ghost系统镜像&#xff0c;我下载的文件是 FQ_WIN11_X64_VDL_V2080…

AMD FPGA设计优化宝典笔记(1)触发器

高亚军老师的这本书《AMD FPGA设计优化宝典》&#xff0c;他主要讲了两个东西&#xff1a; 第一个东西是代码的良好风格&#xff1b; 第二个是设计收敛等的本质。 这个书的结构是一个总论&#xff0c;加上另外的9个优化&#xff0c;包含的有&#xff1a;时钟网络、组合逻辑、触…

文件IO,目录IO的学习

一&#xff0c;头文件的添加 #ifndef _HEAD_H_ //防止重新定义宏 #define _HEAD_H_#include<stdio.h> #include<sys/stat.h> #include<sys/types.h> #include<fcntl.h> #include<unistd.h> #include<string.h>#endif…

Pytest自动化测试框架介绍

1、什么是单元测试框架 单元测试是指在软件开发当中&#xff0c;针对软件的最小单位&#xff08;函数&#xff0c;方法&#xff09;进行正确性的检查测试。 2、单元测试框架主要做什么 测试发现&#xff1a;从多个文件里面去找到我们需要的测试用例。 测试执行&#xff1a;按…

Java EE面试题解析(下)

21、 什么是Servlet&#xff1f;【掌握】 Servlet是使用Java Servlet应用程序接口&#xff08;API&#xff09;及相关类和方法的Java程序。所有的Servlet都必须要实现的核心接口是javax.servlet.servlet。每一个Servlet都必须要直接或者间接实现这个接口&#xff0c;或者继承j…

ThreadLocal “你”真的了解吗?

今天想梳理一个常见的面试题。在开始之前&#xff0c;让我们一起来回顾一下昨天的那篇文章——《Spring 事务原理总结七》。这篇文章比较啰嗦&#xff0c;层次也不太清晰&#xff0c;所以以后有机会我一定要重新整理一番。这篇文章主要想表达这样一个观点&#xff1a;Spring的嵌…

基于SpringBoot+Vue的零食零售管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

Rocky Linux 下载安装

一、VMware Workstation下载安装 1、安装教程 VMware Workstation下载安装&#xff08;含密钥&#xff09; 二、VMware Workstation 创建虚拟机 1、创建教程 VMware Workstation 创建虚拟机 三、Rocky Linux 下载 1、下载官网 RockyLinux.org 2、选择X86架构_64位系统_DVD镜…