Linux文件系统之inode

在这里插入图片描述

文章目录

    • 1. 磁盘
      • 1.1 认识磁盘
      • 1.2 磁盘物理构造
      • 1.3 磁盘逻辑结构
    • 2. 文件系统
    • 3. 如何理解目录

1. 磁盘

1.1 认识磁盘

文件 = 内容 + 属性,而文件是存储在磁盘上,那么可以理解为磁盘上存储的文件 = 存储的文件内容 + 存储的文件属性

文件的内容采用的是块式的存储——数据块

文件的属性用inode描述

在Linux中文件在磁盘上存储,是将内容和属性分开存储的

我们目前的电脑,搭载的基本上都是固态硬盘(ssd),而老式的电脑,搭载的基本上都是磁盘(机械盘)

固态硬盘IO效率高,但有使用寿命,成本也较大;

机械盘容量大、成本低,效率低于固态硬盘

磁盘是一个永久性存储介质,是计算机中唯一一个机械设备,也是一个外设。我们的计算机全程又叫高速计算的电子计算机器,它是电子的,电信号的传递和机械设备信号的传递,肯定不是一个量级的,这就是它效率相对低的一个原因。

我们小时候接触的光盘,其实就和磁盘有点类似,只不过光盘只有一面是光的,采用的光信息存储;而磁盘如果有一个盘片的话,这个盘片2面都是光的。

image-20231114172056347

盘面高速旋转,然后磁头来回摆动读取数据,这个磁头每面都会有一个磁头(虽然是一面一片,但都是整体移动的),磁头和盘面并不接触,悬浮在盘面。

为什么笔记本不用磁盘了呢?这就是原因之一,我们的笔记本是便携式,要来来回回移动电脑,如果搭载磁盘,那么势必会让磁头和盘面接触到,这样就可能会刮花盘面,而盘面是存储数据的,这样就会导致数据的丢失。

磁盘存储原理:

吸铁石有南北级,我们这里就可以把南北极理解为二进制01,然后通过某种特性,改变它的南北极,这样就相当于对01进行修改。

磁盘就可以理解为无数个小的吸铁石构成,磁头扫到磁盘某个位置时,通过电脉冲改变这个南北极,就相当于读数据进行写入。

1.2 磁盘物理构造

image-20231114174655573

磁盘被访问的最基本单位为扇区,一般一个扇区的大小为512byte,要把数据存到磁盘,就得定位一个扇区。

  1. 定义用哪个磁头
  2. 哪个一个磁道
  3. 哪一个扇区

在中这个定位过程中,磁头摆动的次数越多,就说明定位的时间越长。也就是运动的次数越多,效率越低;运动的次数越少,效率越高。

那么对于设计的角度来说,就尽量将有关联的数据放在一起,减少定位寻址的时间

1.3 磁盘逻辑结构

image-20231114185423534

在以前,我们买专辑或者是以前的英语课本,都是以磁带形式录制的,在物理上看,这些磁带是同心圆绕在一起,但如果我们将其全部抽出来,我们在逻辑上可以理解为是线性的。这就有了一个基于扇区的数组,每个扇区都有其对应的下标。

image-20231114191230419

这个28888叫LBA逻辑区块地址;转换过来物理地址就叫CHS

2. 文件系统

我们电脑里面会分多个盘(C盘、D盘、E盘…)来便于我们用户管理不同的数据。

但在系统层面的分区,其实就是将一整块的内容,定义头尾,这样来表示分区:

struct partion
{
    int start;
    int end;
}

分区之后,系统要管理这整块磁盘的内容就转变成了管理这一块区域,后面区域的管理直接CV就行。当然了我们分区一般都是按几十几百GB来分的,这几十几百GB也十分的大,系统会继续划分为各个block group,这个block group里面就包含了我们的文件系统。

image-20231114195101333

  • Date blocks:存文件内容的区域,以块的形式呈现。常见的是4kb大小 —— 文件系统的块大小

    这里的意思就是,如果我们创建了一个文件,我们只往里面写一个字节的内容,在文件系统中,都要在分区里面找一个块组申请一个块,这个块的大小是4kb。所以访问文件的最小单位就是4kb

  • inode table

    inode:单个文件的所有属性,一般而言大小是128byte,一个文件一个inode,每个inode的编号是唯一的。在Linux用inode来标识文件,文件属性中,不包含文件名称。

    #define NUM
    struct inode
    {
        文件类型
    	权限
    	引用计数
    	拥有者
    	所属组
    	ACM时间
        inode number;
        int block[NUM];
    }
    

  • inode Bitmap:比特位的位置和inode编号映射起来,比特位的内容表示inode是否有效

  • Block Bitmap:比特位的位置和块号映射,比特位的内容表示该块有没有被使用

    我们删一个文件的时候,就不用把块内容清空了,直接将这个块号比特位置空即可(这就是为什么拷贝大文件会相对慢,而删除一个文件相对快)。

  • Group Descriptor Tableinode bitmapblock bitmap用来描述inode编号和块号是否有效,无法描述这些组里面使用情况,而GDT就能用来这个组的基本使用情况(用了多少、还剩多少…)

  • Super Block:整个分区的基本使用情况,一共多少个组,

    每组的大小

    每组的inode数量

    每组的block数量

    每组的起始inode

    文件系统类型与名称…

    这个Super block会在block group里面存在多份,这样是为了防止Super bolck出现异常导致每个组的边界不清楚,从而导致整个分区全部混乱。

每一个分区在使用之前,都必须提前将部分文件系统的属性信息提前设置进对应的分区中,方便后续使用整个分区或者分组。

  • 在新建一个文件的时候,先确定在哪个分区(路径),根据inode bitmap分配inode,然后内容由block bitmap检查分配块号,然后再将内容填入这个块里面
  • 删除一个文件的时候,根据inode找到属性,先将block bitmap置空,再将inode bitmap置空,不需要就块里面的内容清空
  • 查找文件就是根据这个文件的inode找到该文件的属性,再从属性里面找到对应的块

3. 如何理解目录

在Linux下,一切皆文件,我们的目录,也属于文件,也有自己的inode,也要有自己的属性,他的属性我们可以查看,但是内容又是什么呢?

image-20231114215026371

目录数据块里面放的是该目录的文件和对应文件的inode映射关系,这个映射是一对一的,是一个kv结构。

所以这就是为什么同一个目录下不能由同名的文件,因为这个映射是一对一的;

如果我们在这个目录没有w写权限,那么就不能创建文件或目录,因为这个文件的名和inode的映射关系无法写到这个数据块里面;

如果没有r读权限,我们无法查看这个文件,因为得不到文件的文件名和inode的映射关系;

我们要找到这个目录,就得由这个目录的目录inode,所有目录往上走,最后都是根目录\,所有会一直往上找,找到根目录,然后再往下传inode。所有访问然后文件,都得有这个文件的路径。

我们有时候访问文件,都是直接访问的,这是因为系统有环境变量,进程也有自己工作的当前目录,所以系统访问文件,一定是要带上路径的。

当然,这样递归访问,效率是比较底下的,Linux中会将常访问的路径进行缓存,这样就能提高效率了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android模拟器的linux内核源码的下载

文章目录 Android模拟器的linux内核源码的下载 Android模拟器的linux内核源码的下载 git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/goldfish.git自己新建一个文件夹存放内核代码,命名随意。 切换一下分支就有东西了 切换到下面这个分支

金蝶云星空 CommonFileServer 任意文件读取漏洞复现

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一、漏洞概述 金蝶云星空V7.X、V8.X所有私有云和混合云版本存在一个通…

SQL 日期函数

在数据库中,日期和时间是经常需要处理的数据类型之一。SQL提供了许多内置的日期函数,用于对日期和时间进行操作、计算和比较。这些函数可以帮助我们提取日期的各个部分(如年份、月份、日、小时、分钟等),执行日期的转换…

(五)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB

一、七种算法(DBO、LO、SWO、COA、LSO、KOA、GRO)简介 1、蜣螂优化算法DBO 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…

基于自私羊群算法优化概率神经网络PNN的分类预测 - 附代码

基于自私羊群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于自私羊群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于自私羊群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

No209.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

软件工程-第7章 面向对象方法基础

第7章 面向对象方法基础 面向对象的基本概念 面向对象方法的世界观:一切系统都是由对象构成的,他们的相互作用、相互影响,构成了大千世界的各式各样系统。面向对象方法是一种以对象、对象关系等来构造软件系统模型的系统化方法。 面向对象 …

Maven介绍及配置

目录 一.Maven 1.介绍 坐标 仓库 1)中央仓库 2)本地仓库 3)私服 配置国内源 配置过程 二.Maven功能 2.项目构建 3.依赖管理 Maven Help插件 安装 ​使用 一.Maven 1.介绍 坐标 唯一的,通过以下代码的三个键值对确…

SARAS多步TD目标算法

SARAS多步TD目标算法 代码仓库:https://github.com/daiyizheng/DL/tree/master/09-rl SARSA算法是on-policy 时序差分 在迭代的时候,我们基于 ϵ \epsilon ϵ-贪婪法在当前状态 S t S_t St​ 选择一个动作 A t A_t At​ ,然后会进入到下一个状态 S…

mp4视频批量截取!!!

mp4视频批量截取!!! 问题:如果我们想截取一个mp4视频中的多个片段,一个一个截会很麻烦! 可以将想要截取的开始时间和结束时间保存到 excel表 中,进行批量截取。 1、对一个视频,记…

HarmonyOS元服务实现今天吃什么

一、前言 作为一个职业打工人,每天点外卖吃啥东西都有选择综合症,突发奇想让程序帮我们随机选择一个吃的,是不是可以解决我们的选择问题呢,说干就干,我们就使用HarmonyOS元服务实现一下这个功能。为什么选择这个Harmon…

java程序中为什么经常使用tomcat

该疑问的产生场景: 原来接触的ssm项目需要在项目配置中设置tomcat,至于为什么要设置tomcat不清楚,只了解需要配置tomcat后项目才能启动。接触的springboot在项目配置中不需要配置tomcat,原因是springboot框架内置了tomcat&#xf…

万界星空科技云MES生产管理系统和ERP的对接

万界星空云MES管理系统的应用比较广,在和ERP连接时,必须先掌握下什么模块是和MES业务流程有关的。在ERP诸多模块中,有MM(物料管理方法模块)、PP(生产计划模块)、QM(质量控制模块)模块和MES有同时的关联,因此,这种模块造…

spring cloud之网关

Gateway网关(*) 什么是网关 # 1.说明 - 网关统一服务入口,可方便实现对平台众多服务接口进行管控。 - 网关 路由转发 过滤器路由转发:接收一切外界请求,转发到后端的微服务上去过滤器:在服务网关中可以完成一系列的横切功能&a…

信号发生器为什么输出信号和配置参数对不上?

1.问题: 今天在调试时遇到信号发生器输出信号与我实际输入的参数不符的问题。 我原本打算输出一个中心点是2.5V然后上下偏移1.5V的信号。刚操作信号发生器的时候,调节到正弦波输出,参数部分,必须要输入High,Low电平。这个很不方…

Linux使用Docker完整安装Superset,同时解决please use superset_config.py to override it报错

文章目录 Docker安装Superset流程1. 首先获取镜像2. 生成SSL3. 创建Superset容器4. 更新数据库5. 测试访问Superset Docker安装Superset流程 1. 首先获取镜像 docker pull amancevice/superset2. 生成SSL 接下来我们运行一些额外的程序: openssl rand -base64 4…

龙讯旷腾PWmat:新的催化反应机理——瞬态相变,对多相电催化剂的设计和多相电催化机理的研究具有重要意义

研究背景 众所周知,材料的性质,包括催化活性都是相敏感的。而材料的相与外界条件有关,电催化反应过程中的外部条件与反应前后的外部条件不同,这自然导致了一个问题:在反应过程中电催化剂的相是否可以与反应前后的相不…

基于萤火虫算法优化概率神经网络PNN的分类预测 - 附代码

基于萤火虫算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于萤火虫算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于萤火虫优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络…

demo(一)eureka----服务注册与提供

下面写一个简单的demo验证下eureka&#xff0c;实现服务注册、服务发现。 一、单节点&#xff1a; 1、api&#xff1a; 封装其他组件需要共用的dto 2、eureka-service服务注册中心&#xff1a; &#xff08;1&#xff09;pom: <?xml version"1.0" encoding&q…

Anaconda当前有几个python环境,Anaconda常用命令

通过下面的命令即可知道当前的conda拥有几个python版本环境。 conda env list常用命令 python版本 python --version or python --V当前conda可以使用那些python版本 conda search "^python$"创建一个新的python版本环境&#xff0c;例如python版本是3.8.3 cond…