【Linux】了解磁盘/文件系统/inode

news2024/10/6 8:21:46

文章目录

  • 一.磁盘
    • 1.磁盘的结构
    • 2.磁盘的定位(寻找方案)
    • 3.磁盘的分区与格式化介绍
  • 二.理解inode
  • 三.ext2文件系统的存储方案


一.磁盘

1.磁盘的结构

在这里插入图片描述

在这里插入图片描述

问题1:什么是磁盘?

磁盘是在冯诺依曼体系结构中几乎唯一的机械设备,机械设备意味着它的效率低,那么我们为什么还会使用磁盘呢?因为磁盘相比我们所熟知的内存有一个极大的优势,那就是永久性,磁盘是一种永久性存储介质,而内存是一种掉电易失存储介质,也就是没电了,存储的数据就没了。因此目前所有的普通文件都是存储在磁盘上的。

磁盘在冯诺依曼体系结构当中既可以充当输入设备,有可以充当输出设备。
在这里插入图片描述

问题2:了解磁盘结构

介绍一下磁盘中的几个重要部分
盘片(Platter):磁盘一般是由多个盘片组成的,而每个盘片都有上下2个盘面。
磁头(Head) :每个盘面都有一个对应的磁头,也就是一个盘片都有上下2个磁头。磁头的作用是对磁盘进行写入和读取
磁道(Track) :当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在盘片的表面画出一个圆形轨迹,这个圆形轨迹就称为磁道。
扇区(Sector) :每个磁道都被切分为很多扇形区域,这个扇形区域被称为扇区,磁盘在寻址的时候,基本单位是扇区(512字节)。如图所示,越靠近同心圆的扇区面积越小,越远离扇区的同心圆面积越大,但是每一个扇区的存储大小均为512字节
柱面(Cylinder):不同盘片的相同编号的磁道构成的圆柱面就被称之为柱面。

磁盘是计算机中唯一一个机械结构并且是一个外设,相对于其他存储设备来说较慢。但是价格低廉、存储量大,成为了企业存储设备的首选。磁盘磁头和盘面之间的距离极近,不能进灰尘,使用时禁止搬移抖动刮花盘面,以免造成数据丢失。

磁盘通过磁头充放电,完成盘面南北极的调转,即二进制数据的写入

2.磁盘的定位(寻找方案)

对磁盘进行读写操作时,一般有以下几个步骤(CHS定位法):
1、先定位磁道(cylinder)(柱面)
2、定位磁头(head)(即盘面)
3、定位扇区(sector)。

磁头会通过摆动确认在哪个磁道,通过盘片高速旋转让磁头定位扇区。(磁盘转速与磁头寻址速度匹配,所以盘片旋转速度越快,该磁盘的IO效率越高)

3.磁盘的分区与格式化介绍

1.线性存储介质

将一摞磁盘沿磁道“拉直”,就抽象成了线性结构。想想磁带,当磁带被卷起来时,其就像磁盘一样是圆形的,但当我们把磁带拉直后,其就是线性的。那么整个磁盘可以看做一个sector arr[n]数组,对磁盘数据的管理就变成了对数组的管理。只要知道了扇区的下标,就可以定位扇区。这个下标在操作系统内部称为LBA地址。根据LBA地址可以转化为CHS地址,从而找到对应扇区。
在这里插入图片描述

为什么操作系统要将CHS定位法抽象为LBA地址?

1.便于操作系统管理硬盘;
2.不想让操作系统的代码和硬件强耦合,硬件的变化并不会影响操作系统。

2.磁盘分区

看作线性存储介质后,就方便我们对磁盘进行管理了。因为磁盘的容量很大,我们可以对磁盘进行分区管理。磁盘通常被称为块设备,一般以扇区为单位,一个扇区的大小通常为512字节。我们若以大小为512G的磁盘为例,该磁盘就可被分为十亿多个扇区。在分区之后,对每个区域的管理都是相同的,不同的目录与文件就可以存储进不同的分区,这将很大程度的减少工作量。

在Linux中,我们可以通过以下命令查看我们磁盘的分区信息:

1 | [zxn@VM-0-15-centos ~]$ ls /dev/vda* -l

在分区之后,我们可以每个区域进行格式化。
  
大小为4KB的页框和页帧

操作系统中内存以4KB大小划分,每个空间被称为页框

磁盘中的文件,尤其是可执行文件也时安装4KB大小划分好的,每个块被称为页帧

磁盘的最小单位是扇区,512个字节。操作系统的文件系统每次读取数据会以1KB,2KB,4KB为基本单位(大部分是4KB)读取至内存。以4KB为基本单元进行IO时,有时4KB的数据并不能完全被利用,但是这不代表浪费。根据局部性原理,当计算机访问某些数据时,它附近的数据也有非常大的概率被访问到,加载4KB有助于提高IO效率,同时增大缓存命中率。(本质上是一种数据预加载,以空间换时间的做法)。

3.磁盘的格式化

当磁盘完成分区后,我们还需要对磁盘进行格式化。磁盘格式化就是对磁盘中的分区进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除。
简单来说,磁盘格式化就是对分区后的各个区域写入对应的管理信息。

其中,写入的管理信息是什么是由文件系统决定的,不同的文件系统格式化时写入的管理信息是不同的,常见的文件系统有EXT2、EXT3、XFS、NTFS等。

二.理解inode

磁盘文件由两部分构成,分别是文件内容和文件属性。文件内容就是文件当中存储的数据,文件属性就是文件的一些基本信息,例如文件名、文件大小以及文件创建时间等信息都是文件属性,文件属性又被称为元信息。

在Linux操作系统中,文件的属性信息和内容是分离存储的,其中保存元信息的结构称之为inode,因为系统当中可能存在大量的文件,所以我们需要给每个文件的属性集起一个唯一的编号,即inode
,inode是一个文件的属性集合,Linux中几乎每个文件都有一个inode,为了区分系统当中大量的inode,我们为每个inode设置了inode编号。

在命令行当中输入ls -i,即可显示当前目录下各文件的inode编号
在这里插入图片描述

三.ext2文件系统的存储方案

磁盘采用分而治之的思想,例如一块500G的磁盘可以划分成4个125G进行管理,每个125G又可以分为多个5G进行管理等。计算机为了更好的管理磁盘,会对磁盘进行分区。而对于每一个分区来说,分区的头部会包括一个启动块(Boot Block),对于该分区的其余区域,EXT2文件系统会根据分区的大小将其划分为一个个的块组(Block Group)。每个组块都有着相同的组成结构,每个组块都由超级块(Super Block)、块组描述符表(Group Descriptor Table)、块位图(Block Bitmap)、inode位图(inode Bitmap)、inode表(inode Table)以及数据表(Data Block)组成。

注意: 启动块的大小是确定的,而块组的大小是由格式化的时候确定的,并且不可以更改。
在这里插入图片描述

在这里插入图片描述
1.Super Block(超级块): 存放文件系统的结构信息。记录的信息主要有:Data Block和inode的总量,未使用的Data Block和inode的数量,一个Data Block和inode的大小,最近一次被挂载的时间,最近一次写入数据的时间,最后一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统的结构就破坏了,幸运的是,在一个分区中,超级块的数量不止一个,起到了备份的作用。

2.Group Descriptor Table(块组描述符表): 描述该分区中块组的属性信息。

3.Block Bitmap(块位图): 块位图当中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用。用0表示某位没有被使用,用1表示某位数据块已经被使用。

4.inode Bitmap(inode位图): inode位图当中记录着每个inode是否空闲可用。用0表示某位没有被使用,用1表示某位inode已经被使用。

5.inode Table(inode表): 保存了分组内部所有的可用(已使用+未使用)的inode。用来存放文件的属性信息的,如文件的大小、权限、类型、创建时间、所属组、所属用户等。我们使用ls -l看到的信息,都是从这里获取的。每个文件对应一个inode,因此每个inode中都存储一个inode编号用来区分。唯独文件名不在inode表中存储。一个文件对应一个inode,inode是固定大小。每个分组中的inode为了区分彼此,它们都有自己的ID。同一分区的inode是连续的,不同分区的inode是无关联的

6.Data blocks(数据块): 保存的是分组内部所有文件的数据块。单个Data block:存放文件内容,大小随文件大小变化而变化。但是对于目录文件:会存放目录下的所有文件名到其中。文件名保存在它所在目录的数据块中!

如何理解创建一个空文件?

1.通过inode的位图,找到一个未使用的inode,然后将某个空闲位置的inode值修改为1。;
2.在inode表中找到对应的inode,并将文件的属性信息填入到inode结构中;
3.将该文件的inode编号与文件名这对映射关系添加到目录文件的数据块中。

如何理解对文件写入信息?

1.通过文件的inode编号找到对应的inode结构,扫描Block Bitmap,找到空闲的块,将其值改为1;
2.通过inode结构找到存储该文件的数据块,并将数据写入数据块,建立数据块和inode结构的对应关系;
3.说明:一个文件使用的数据块和inode结构的对应关系,是通过一个数组来进行维护的,该数组一般可以存储15个元素,其中前12个元素分别对应该文件使用的12个数据块,剩余的三个元素分别是一级索引,二级索引和三级索引,当该文件使用的数据块的个数超过12个时,可以用这三个索引进行数据块的扩充。

如何理解删除一个文件?

1.将该文件的inode在inode位图中置为无效;
2.将该文件申请过的数据块在块位图中置为无效。

此操作并不会真正将文件的属性信息和内容删除,而只是将其inode号和数据块号置为了无效,所以我们如果想要恢复文件,只需要找到被删除的文件的inode编号,将inode Bitmap中的比特位由0置1,找到该文件在inode Table中的位置,根据其中的映射关系找到文件的数据块,并把Block Bitmap由0置1即可恢复文件。注意文件被删除后,如果想恢复,就不要再创建文件,因为后续创建其他文件或是对其他文件进行写入操作申请inode号和数据块号时,可能会将该置为无效了的inode号和数据块号分配出去。

如何理解目录?

通过以上学习,我们知道了文件系统是使用inode编号查找和删除文件的,但是用户用的可不是inode编号,而是文件名。
1.都说Linux下一切皆文件,目录当然也是个文件,也有自己的inode编号和数据块;
2.目录的inode结构当中存储的就是目录的属性信息,比如目录的大小,拥有者等;
3.但是目录的数据块中存储的是该目录下的文件名以及对应文件的inode编号(文件名和inode的映射关系),所以在一个目录下创建文件,必须要有写入权限,原因就是创建文件需要在目录的数据块中写入文件名和inode。

这同时也解释了一个目录下不能出现同名文件的原因,

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

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

相关文章

AntDB数据库助力中国移动结算中心建设

为响应中国移动集团公司IT集中化的要求:全面落实“十三五”十大战略工程,加快“推动公司IT资源一体化整合“重点专项工作。以IT系统为载体,构建高效运营支撑体系,形成集中化支撑和协同业务支撑模式,打造极致体验、高效…

列表初始化(内置类型、自定义类型)

列表初始化的特性来源于单参数的隐式类型转换。以下面这个赋值为例,我们可以理解成 先创建一个匿名对象Point(2),这个时候就变成了 Point p Point(2);然后会调用拷贝构造。 虽然隐式转换的可以这样理解,但是最后会被编译器优化成直接调用有…

[Android]Bitmap Drawable

在实际开发中&#xff0c;我们可以直接引用原始的图片&#xff0c;但是也可以通过xml的方式来描述它&#xff0c;通过xml来描述的BitmapDrawable可以设置更多效果。 <?xml version"1.0" encoding"utf-8"?> <bitmap xmlns:android"http://…

java spring IOC Bean管理操作讲解 并代码演示xml的实现方式

查看本文 需要您使用spring创建过对象管理 如果之前没有接触过 可以先查看我的文章 java 手把手带你创建一个spring入门案例 IOC 操作中 Bean管理主要有两个部分 分别是创建对象和注入属性 他们都有两种实现方式 分别是xml和注解方式实现 本文只演示xml 后续我会出注解方式的文…

第十三届蓝桥杯省赛 JAVA A组 - 蜂巢

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;蓝桥杯题解集合 &#x1f4dd;原题地址&#xff1a;蜂巢 &#x1f4e3;专栏定位&#xff1a;为想参加蓝桥别的小伙伴整理常考算法题解&#xff0c;祝大家都能…

背包问题——“0-1背包”,“完全背包”(这样讲,还能不会?)

目录 一、0-1背包 1.1、0-1背包解决的问题 1.2、dp数组定义 1.3、转移方程 1.3.1、二维dp数组 1.3.2、一维dp数组 1.4、遍历顺序 1.5、测试代码 1.6、练习 二、完全背包 2.1、完全背包解决问题 2.2、与0-1背包的区别 2.3、测试代码 2.4、拓展问题&#xff1a;装满…

【2022】13 年终总结

新年Flag 2023年&#xff0c;为了各方面能有所进步&#xff0c;列一些希望达成的目标和想做的事&#xff0c;到年底看看效果。 撰写一篇英文论文 申请到CSC 和xl去外地玩两次 想到了再加 去年Flag倒了几个&#xff1f; 一维河网水动力学模型导师说不用自己编&#xff0c;看懂…

Numpy文件交互:.npy和.npz有什么区别?

文章目录saveloadsavezsavez_compressedNumpy提供了以.npy为后缀的文件存储方案&#xff0c;与这种文件格式密切相关的读、写函数分别是np.load和np.save。通过savez可以一次性存储多个数组&#xff0c;并可通过load以键值对的形式读取出来&#xff1b;如果觉得文件太大&#x…

Mybatis缓存

内存中的一块存储空间&#xff0c;服务于某个应用程序&#xff0c;旨在将频繁读取的数据临时保存在内存中&#xff0c;便于二次快速访问。 一级缓存 SqlSession级别的缓存&#xff0c;同一个SqlSession的发起多次同构查询&#xff0c;会将数据保存在一级缓存中。 注意&#x…

【NI Multisim 14.0虚拟仪器设计——放置虚拟仪器仪表(频率特性测试仪)】

目录 序言 &#x1f34d;放置虚拟仪器仪表 &#x1f349;频率特性测试仪 &#x1f34a;&#x1f34a;1.“模式”选项组 &#x1f34a;&#x1f34a;2.“水平”选项组 &#x1f34a;&#x1f34a;3.“垂直”选项组 &#x1f34a;&#x1f34a;4.“控件”选项组 序言 N…

SpringBoot+Vue项目大学生租房平台

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

数据结构课程设计[2023-01-19]

数据结构课程设计[2023-01-19] 数据结构课程设计 一、课程设计要求 实现指定的题目&#xff08;学号最后两位%41&#xff09;&#xff0c;并撰写课程设计报告。独立完成&#xff0c;功能不完备也没关系&#xff0c;只要是自己做的 使用 C、C或者 JAVA 语言&#xff0c;采用…

​第四章 Flink 窗口和水位线​

Flink 系列教程传送门 第一章 Flink 简介 第二章 Flink 环境部署 第三章 Flink DataStream API 第四章 Flink 窗口和水位线 第五章 Flink Table API&SQL 第六章 新闻热搜实时分析系统 一、时间概念&#xff1a;事件时间和处理时间 在流式处理的过程中&#xff0c;数据…

详解微信小程序开发中的“数据绑定”和代码样例

简介 首先需要区分微信小程序的运行环境和框架系统。运行环境为小程序在手机当中运行的时候&#xff0c;微信客户端所能提供的环境支持&#xff0c;也就是在这种环境下如何进行数据渲染工作&#xff1b;框架系统则是微信小程序在进行开发的过程中&#xff0c;如何通过代码实现…

数字逻辑理论——组合电路

利用数据选择器设计组合逻辑电路 m&#xff1a;组合电路输入变量个数 n&#xff1a;数据选择器的控制端个数 &#xff08;1&#xff09;mn 利用8选1数据选择器设计函数&#xff1a;FAB’A’CBC’ 待设计卡诺图&#xff1a; F∑(1,2,3,4,5,6) &#xff08;2&#xff09;m&g…

【每日一题】【LeetCode】【第十九天】【Python】汇总区间

解决之路 题目描述 测试案例&#xff08;部分&#xff09; 第一次 没有想到什么更快的方法&#xff0c;先用两个循环来写出来思路。 class Solution(object):def summaryRanges(self, nums):res []index 0n len(nums)while index < n:if index n - 1:res.append(str…

Spring_FrameWork_07(SpringMVC与SSM整合)

SpringMVC&#xff08;一种基于java实现的轻量级web框架&#xff09; 请求与响应 REST风格 SSM整合 拦截器 public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {Overrideprotected WebApplicationContext createServletApplicationCont…

【工具】用AI辅助论文/博客的写作:Obsidian+Text Generator的详细安装教程

目录 前言 介绍 Obsidian Text-Generator 使用教程 安装Obsidian 安装Text Generator 插件安装 获取开放 AI API 密钥 插件选项配置 初体验 前言 对于作家、博主和学生来说&#xff0c;这是一个很好的工具&#xff0c;它通过使用最强大的语言模型之一&#xff1a;Ope…

[数据结构基础]链式二叉树的几个典型的基础oj问题

今年是农历腊月二十九&#xff0c;提前祝大家新春快乐。这是我壬寅虎年最后一篇文章&#xff0c;感谢大家的阅读。祝大家兔年吉祥&#xff0c;身体健康、阖家幸福、学业有成、事业如意、财源滚滚&#xff01; 前置说明 本文中所有用到的二叉树及二叉树节点&#xff0c;都是由…

Fabric中的txid exists问题

Fabric 默认配置中tls证书有效期为一年&#xff0c;相信挖了不少的坑&#xff0c;我前段时间写了篇文章介绍了下解决的思路&#xff0c;但是自己真解决起来还是没解决问题&#xff0c;这种分布式企业架构太复杂。 最近有遇到一个奇怪的问题&#xff0c;小伙伴写的存证数据&…