【Linux探索学习】第二十三弹——理解文件系统:认识硬件、探索文件在硬件上的存储问题

ops/2024/12/25 8:31:15/

Linux学习笔记:https://blog.csdn.net/2301_80220607/category_12805278.html?spm=1001.2014.3001.5482

前言:

我们前面讲过了文件的组成是由文件内容和文件属性两者组成的,但是我们前面接触的文件都是系统中的文件,都是已经在进程中被打开的文件,那么没有被打开的文件,即磁盘等硬件上的文件是如何被管理的呢?这就是今天我们要解决的问题——理解文件在硬件上的管理操作

目录

1. 文件属性

2. 认识硬件

2.1 磁盘

2.1.1 磁盘的硬件组成

2.1.2 磁盘的存储结构

2.1.2 磁盘的逻辑结构

2.2 回归硬件

3. inode

3.1 什么是inode

3.2 查看inode

4. 文件的存储

4.1 分区管理

4.2 文件的存储结构

5. 拓展

思考题


1. 文件属性

在认识硬件时,我们先来思考一下我们之前学到的一些知识点,当我们用ls -l执行查看文件时我们不仅能看到文件名,还能看到文件的一些元数据

每行包含七列,依次是:

 1. 模式
 2. 硬链接数
 3. 文件所有者
 4. 组
 5. 大小
 6. 最后修改时间
 7. 文件名

ls -l读取存取在磁盘上的文件信息,然后显示出来

除了用ls -l外,我们还可以通过stat指令查看更多的文件信息

stat 文件名

其中我们需要重点了解的就是inode,这也是本篇的重点,在学习inode之前,我们需要先对硬件的设计有所了解,下面我们就来讲解一下硬件的相关内容

2. 认识硬件

2.1 磁盘

磁盘是我们电脑中唯一的机器设备,也是一个外设,所以它的效率会偏低,但是它的容量很大,会存储很多文件,所以我们先来看看文件的存储方式

2.1.1 磁盘的硬件组成

磁盘的主要的硬件组成如图所示,由磁头、磁头停靠点、磁头臂、主轴和盘片构成,其中文件就是存储在盘片上的,盘片是一个看似光滑的薄片,实际上上面是有凹凸不平的小突起的,磁头通过输入不同的电流来向盘片中写入内容,同时也是通过这些突起和磁头来读取盘片上的内容,观察第一张图片最右边的小图,我们可以发现磁头和盘片的个数都不是唯一的,这是为了存储更多的内容,因此当我们查找磁盘中的文件时就需要定位不同的磁头和盘片,并定位盘片上的不同区域

下面我们来看一下磁盘的具体的存储结构

2.1.2 磁盘的存储结构

我们先来看一下磁盘的具体划分

磁头是会左右移动的,磁头左右移动的过程就是定位磁道和柱面的过程

我们还可以看到上面图中还有一个扇区的概念,扇区其实就是磁盘被访问的最基本的单位,它的大小是512字节,也就是4kb的大小,我们往磁盘中存储文件或读取文件时都是以扇区为单位的,我们可以把磁盘看作由无数个扇区组成的存储介质。

所以当我们想在磁盘上进行数据操作时,比如往磁盘上存储数据,要做的第一个内容就是定位扇区,定位扇区就需要我们先定位属于哪个面,然后是哪一个磁道,最后才是哪个扇区

2.1.2 磁盘的逻辑结构

我们可以把磁盘内部的结构抽象成线性的:每个盘面相当于一个连接的大数组,里面包含若干个小数组,代表磁道,而若干个小数组内又包含无数个更小的数组,代表扇区

当我们从磁盘中取数据时,是要找到指定扇区所在的物理位置的,如果我们此时知道扇区的逻辑扇区地址,我们就可以转换成相应的物理空间地址,相应的物理空间地址也可以转换成逻辑空间地址,转换规则:每个盘面对应的磁道数量是一致的,而每个磁道对应的扇区数量也是一样的,所以每个盘面对应的扇区个数是相等且可计算的,所以我们就可以通过相关计算实现逻辑地址和物理地址的互相转换

比如下面这个例子:

所以操作系统只需要关注磁盘的逻辑地址就可以了,在查找相应资源时会自动转化为物理地址

2.2 回归硬件

在这里我们了解一个小知识点:不仅仅CPU有“寄存器”,其它设备(外设也有)比如磁盘也有

3. inode

3.1 什么是inode

上面我们讲到文件是由文件内容和文件属性两者共同构成的,而且两者还是分开存储的。文件的内容在存储时是块式存储的,这个存储结构叫做数据块而文件属性则是存在叫inode的存储结构中的

而且这些inode其实就是我们上面讲的硬件中存储结构中的扇区等结构,简单点说就是inode就是存放在磁盘中的

3.2 查看inode

inode的查看方式可以用ls -li指令

ls -li

4. 文件的存储

文件在硬件上的存储方式基本一致,下面我们主要讲一下文件在磁盘上的存储方式

4.1 分区管理

要搞明白文件的在磁盘上的存储方式,首先就要先搞明白一个很重要的思想,叫做分区管理,在前面我们讲到磁盘的逻辑结构我们可以理解为一个长条的大块,假设整个存储空间为800G,我们可以把它分成不同的块,不同的块去存放不同的文件,就比如我们电脑的分盘就是一种分区管理操作,然后每个不同的块又可以分成更小的块,这样一直分下去,直到以扇区作为最小单位,这样分治的思想就叫做分区管理

4.2 文件的存储结构

按照上面分区管理的规则,磁盘上面的空间会被分成一个一个的小区来进行管理的,这些区域中存放着文件的内容和属性,基本结构如下:

我们先来讲解一下存放inode的位置inode Table:inode中存放的是单个文件的所有属性,大小为128字节,一个扇区的大小为512字节,所以一个扇区中可以存放四个inode,即一个块的大小是4kb其实就是四个inode的大小

一般来说一个文件对应一个inode,当有多个文件时就对应的有多个inode,所以我们也需要对inode进行编号管理,inode的编号就存放在inode结构中

inode中存放的内容:

磁盘中的空间可以抽象成这样的一个一个的小块,文件的内容就是存放在这些小块中的,这些小块都对应着自己的编号,所以我们就可以在inode中记录下文件的内容所存放的编号,这样以后在使用文件时就可以通过对应的编号来找到文件的内容

下面我们来看一下文件的存储结构中各部分内容分别代表什么

1、Super Block:文件系统的基本信息:文件系统的格式等整个分区的基本使用情况,比如一共有多少个组、每个组的大小、每个组的inode数量、每个组的block数量、每个组的起始inode、文件系统的类型与名称等!!!

为了提高效率,并不是每个组里面都有Super Block但是也不是第一个组才有,如果只有第一个组有,那当它损坏时就会导致整个区的inode无法定位
Super Block是搁几个组存在一个

2、GDT:描述整个组的基本信息和使用情况,比如使用了多少数据块,还剩多少

3、Block Bitmap(块位图):比特位的位置和块号映射起来,比特位的内容表示该块有没有被使用,我们可以借助块位图来得知那些块被使用,哪些没被使用,我们在删除文件内容时不需要删除对应的块中的内容,只需要借助位图把对应块的位置清0就行

4、inode Bitmap:比特位的位置和inode的编号映射起来,比特位的内容代表inode中索引数组是否有效

5、inode Table:上面讲过

6、Data blocks:存文件内容的区域,以块的形式呈现,常见的是4kb大小--文件系统的块大小也就是说我们在访问或存入内容时都是以块为单位的,即使我们存入的内容很小

格式化:每一个分区在被使用之前,都必须提前先将部分文件系统的属性信息提前设置进对应的分区中,方便我们后续使用这个分区或者分组

5. 拓展

在我们前面的学习中,我们也能感受到了使用者从来没有关心过inode,用的是文件名!!
那我们怎么知道一个文件的inode编号呢?

这就要我们引入几个新的知识了

如何理解“目录”:

我们之前讲过Linux下一切皆文件,所以目录也是文件,通过查看我们发现也有自己的inode编号的因为文件=文件属性+文件内容,所以目录也是有对应的内容的,也就是目录是有数据块的

目录的数据块中存放的是该目录下文件的文件名和inode映射关系

所以我们想要知道一个文件的inode的方法就是找到文件所在的目录即可,目录中包含的有该文件的文件名与inode的映射关系

思考题

接下来我们结合一下上面的讲解思考一下下面的问题:

1.为什么同一个目录下不能有同名文件

2.目录下,没有w权限,我们无法创建文件

3.目录下,没有r权限,我们无法查着文件

4.目录下,没有x权限,我们就无法进入这个目录

以上就是今天全部内容,感谢各位大佬观看!!

本篇笔记:


感谢各位大佬观看,创作不易,还请各位大佬点赞支持!!!


http://www.ppmy.cn/ops/144804.html

相关文章

systemverilog中的priority if

1 基本概念 在 SystemVerilog 中,priority - if是一种条件判断结构。它和普通的if - else语句类似,但在条件评估和错误检查方面有自己的特点,主要用于按顺序评估多个条件,并且对不符合预期的情况进行报错。报错如下两点 当所有条件…

【Java 基础】-- ArrayList 和 Linkedlist

目录 1. Java 中的 ArrayList 和 LinkedList 简介 ArrayList LinkedList 2. 相同数量级下的内存开销对比 ArrayList 的内存开销 LinkedList 的内存开销 3. 它们的速度对比 总结 1. Java 中的 ArrayList 和 LinkedList 简介 ArrayList 数据结构:基于动态数组…

经济学 ppt 2 部分

前言 上一次复习经济学是好久之前了,看了第一章的 ppt ,好像重点就是谁是软件经济学之父。昨天老师讲了一下题型,20 分选择题, 20 分判断题,20 分计算题,6 6 8 三个计算题,25 分表格&#xff0…

Redis——缓存双写一致性问题

文章目录 1、情况描述2、缓存双写一致性2.1 情况讨论2.2 双检加锁2.3 数据库和缓存一致性的几种更新策略。 总结 1、情况描述 默认不存在缓存雪崩和缓存击穿情况。首先Java先查询redis,若redis中存在数据则直接返回数据。若redis中不存在数据,需要查询my…

Mysql InnoDB存储引擎中聚簇索引和非聚簇索引的区别

最核心的区别还是从需求角度来看比较好: 1.创建索引时 在创建表时,InnoDB存储引擎会根据不同情况,选择不同的列作为索引 (1)有主键,通过主键作为聚簇索引的索引键(key) (2&#xf…

paddle

paddlepaddle 安装环境 查看虚拟环境 创建一个名叫paddle的虚拟环境 conda env list conda create -n paddle python3.8激活 conda activate paddle打开paddlepaddle官网 选择windowcondacpu复制代码 conda install paddlepaddle2.6.2 --channel https://mirrors.tuna.tsi…

GitCode 光引计划投稿 | GoIoT:开源分布式物联网开发平台

GoIoT 是基于Gin 的开源分布式物联网(IoT)开发平台,用于快速开发,部署物联设备接入项目,是一套涵盖数据生产、数据使用和数据展示的解决方案。 GoIoT 开发平台,它是一个企业级物联网平台解决方案&#xff…

什么样的LabVIEW控制算自动控制?

自动控制是指系统通过预先设计的算法和逻辑,在无人工干预的情况下对被控对象的状态进行实时监测、决策和调整,达到预期目标的过程。LabVIEW作为一种图形化编程工具,非常适合开发自动控制系统。那么,什么样的LabVIEW控制算作“自动…