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

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.mzph.cn/pingmian/65037.shtml

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

相关文章

深度学习中的并行策略概述:2 Data Parallelism

深度学习中的并行策略概述:2 Data Parallelism 数据并行(Data Parallelism)的核心在于将模型的数据处理过程并行化。具体来说,面对大规模数据批次时,将其拆分为较小的子批次,并在多个计算设备上同时进行处…

分布式专题(10)之ShardingSphere分库分表实战指南

一、ShardingSphere产品介绍 Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。Apache ShardingSphere 设计哲学为 Database Plus,旨在…

帧缓存的分配

帧缓存实际上就是一块内存。在 Android 系统中分配与回收帧缓存,使用的是一个叫 ION 的内核模块,App 使用 ioctl 系统调用后,会在内核内存中分配一块符合要求的内存,用户态会拿到一个 fd(有的地方也称之为 handle&…

vue3+vite一个IP对站点名称的前端curd更新-会议系统优化

vue3-tailwind-todo https://github.com/kgrg/vue3-tailwind-todo 基于这个项目,把ip到sta的映射做了前端管理. 核心代码是存储和获得的接口,需要flask提供. def redis2ipdic():global ipdicipdic.clear()tmdiccl.hgetall(IPDIC_KEY)for k in tmdic.keys():ipdic[k.decode() …

Elasticsearch-脚本查询

脚本查询 概念 Scripting是Elasticsearch支持的一种专门用于复杂场景下支持自定义编程的强大的脚本功能,ES支持多种脚本语言,如painless,其语法类似于Java,也有注释、关键字、类型、变量、函数等,其就要相对于其他脚本高出几倍的性…

golang LeetCode 热题 100(动态规划)-更新中

爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1:输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&…

【每日学点鸿蒙知识】Charles抓包、lock文件处理、WebView组件、NFC相关、CallMethod失败等

1、HarmonyOS系统中如何使用Charles抓包? 在HarmonyOS操作系统中,使用Charles进行抓包的步骤如下: 在Charles中设置代理。 首先,在Charles的菜单栏上选择“Proxy”→“Proxy Settings”,然后填入代理端口&#xff0…

抓取手机HCI日志

荣耀手机 1、打开开发者模式 2、开启HCI、ADB调试 3、开启AP LOG 拨号界面输入*##2846579##* 4、蓝牙配对 5、抓取log adb pull /data/log/bt ./

WebAPI编程(第一天,第二天)

WebAPI编程(第一天,第二天) day01 - Web APIs 1.1. Web API介绍 1.1.1 API的概念1.1.2 Web API的概念1.1.3 API 和 Web API 总结 1.2. DOM 介绍 1.2.1 什么是DOM1.2.2. DOM树 1.3. 获取元素 1.3.1. 根据ID获取1.3.2. 根据标签名获取元素1.3.…

windows下Redis的使用

Redis简介: Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。 Redis通常被称为数据结构服务器,因为值(value&#xff…

【贪吃蛇小游戏 - JavaIDEA】基于Java实现的贪吃蛇小游戏导入IDEA教程

有问题请留言或私信 步骤 下载项目源码:项目源码 解压项目源码到本地 打开IDEA 左上角:文件 → 新建 → 来自现有源代码的项目 找到解压在本地的项目源代码文件,点击确定 选择“从现有项目创建项目”。点击“下一步” 点击下一步&a…

RTOS下的任务管理

2.3 RTOS下的任务管理(***) RTOS的任务管理主要是进行哪些功能? RTOS的任务管理的多任务管理是怎样进行与实现的? 任务管理中FreeRTOS如何给每个任务分配CPU时间? 文章目录 2.3 RTOS下的任务管理(***)2.3.0 任务概述2.3.1任务的创建与删除2.3…

深度学习——神经网络中前向传播、反向传播与梯度计算原理

一、前向传播 1.1 概念 神经网络的前向传播(Forward Propagation)就像是一个数据处理的流水线。从输入层开始,按照网络的层次结构,每一层的神经元接收上一层神经元的输出作为自己的输入,经过线性变换(加权…

【初阶数据结构与算法】八大排序算法之归并排序与非比较排序(计数排序)

文章目录 一、归并排序二、非比较排序之计数排序三、归并排序和计数排序的性能测试 一、归并排序 归并排序(MERGE-SORT)是建⽴在归并操作上的⼀种有效的排序算法,该算法是采⽤分治法(Divide andConquer)的⼀个⾮常典型的应⽤   …

window安装TradingView

目录 下载安装包 修改文件后缀,解压 将K线换成国内涨红跌绿样式 下载安装包 https://www.tradingview.com/desktop/ 下载完成后是.msix格式文件 (我在win10和win11的系统中尝试运行msix都没有成功,所以放弃直接双击运行msix&#xff…

FPGA多路MIPI转FPD-Link视频缩放拼接显示,基于IMX327+FPD953架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案我这里已有的FPGA图像缩放方案本博已有的已有的FPGA视频拼接叠加融合方案 3、本 MIPI CSI-RX IP 介绍4、详细设计方案设计原理框图IMX327 及其配置FPD-Link视频…

React+Vite从零搭建项目及配置详解

相信很多React初学者第一次搭建自己的项目,搭建时会无从下手,本篇适合快速实现功能,熟悉React项目搭建流程。 目录 一、创建项目react-item 二、调整项目目录结构 三、使用scss预处理器 四、组件库Ant Design 五、配置基础路由 六、配置…

Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定

本文仅作学习交流,不做任何商业用途 郑重感谢siki老师的汉化教程与代码猴的免费教程以及搬运烤肉的小伙伴 版本:Unity6 模板:3D 核心 渲染管线:URP ------------------------------…

从零开始的编程-java篇1.6.1 万变不离其宗,hello word

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

【漏洞复现】CVE-2021-45788 SQL Injection

漏洞信息 NVD - cve-2021-45788 Time-based SQL Injection vulnerabilities were found in Metersphere v1.15.4 via the “orders” parameter. Authenticated users can control the parameters in the “order by” statement, which causing SQL injection. API: /test…