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结构。

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

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

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

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

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

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

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

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

相关文章

kube-bench-CIS基准的自动化扫描工具学习

仓库地址:GitHub - aquasecurity/kube-bench: Checks whether Kubernetes is deployed according to security best practices as defined in the CIS Kubernetes Benchmark kube-bench,检查 Kubernetes 是否根据 CIS Kubernetes 基准中定义的安全最佳实践部署,下载…

应用协议安全:Rsync-common 未授权访问.

应用协议安全:Rsync-common 未授权访问. Rsync 是 Linux 下一款数据备份工具,支持通过 rsync 协议、ssh 协议进行远程文件传输。其中 rsync 协议默认监听 873 端口,如果目标开启了 rsync 服务,并且没有配置 ACL 或访问密码&#…

Redis05-集群方案

目录 Redis集群方案 主从复制 主从复制的基本原理 主从复制的工作流程 乐观复制 主从复制的优势 哨兵机制 哨兵的关键作用 服务状态监控 哨兵选举Master规则 分片集群 分片集群中的数据读写 数据写入 数据读取 一致性哈希和客户端分片 Redis集群方案 微服务时代…

TDengine 与煤科院五大系统实现兼容性互认,助力煤矿智能化安全体系搭建

近日,涛思数据与煤炭科学技术研究院(以下简称煤科院)已完成数个产品兼容互认证工作,经双方共同严格测试,涛思数据旗下物联网、工业大数据平台 TDengine V3.X 与煤炭科学技术研究院旗下煤矿复合灾害监测监控预警系统、煤…

Elasticsearch docker-compose 使用 Logstash 从 JSON 文件中预加载数据

在我们创建 Elasticsearch 进行开发时,最简单的办法就是在本地使用 docker-compose 来一键部署一个 Elasticsearch 集群。有时,特别是在准备测试环境时,开发人员希望从一开始就创建包含一些测试数据的数据库容器。我们可以使用 Logstash 来很…

什么是自动化测试框架?

无论是在自动化测试实践,还是日常交流中,经常听到一个词:框架。之前学习自动化测试的过程中,一直对“框架”这个词知其然不知其所以然。 最近看了很多自动化相关的资料,加上自己的一些实践,算是对“框架”…

使用python电脑轻量级控制手机—adb命令和手机投屏

文章目录 一、通过无线连接手机和电脑二、使用adb命令轻量级控制手机二、使用scrcpy控制手机 通过电脑控制手机有多种方式如appnium等,本文介绍的是两种轻量级的方案,使用adb命令刚和手机投屏。 一、通过无线连接手机和电脑 1、手机设置 开发者选项—us…

使用 MATLAB HDL Coder 和 FPGA 快速实现自动白平衡(AWB)

使用 MATLAB HDL Coder 和 FPGA 快速实现自动白平衡(AWB) 在此项目中,我们将使用 MATLAB Simulink 和 HDL 编码器创建自定义 IP -- AWB。 MATLAB 设计 自动白平衡模块的设计是使用 HDL Coder 在 MATLAB 和 Simulink 中创建的。HDL Coder能够生…

11.15 知识总结(模板层、模型层)

一、 模板层 1.1 过滤器 1.什么是过滤器? 过滤器类似于python的内置函数,用来把变量值加以修饰后再显示。 2. 语法 1、 {{ 变量名|过滤器名 }} 2、链式调用:上一个过滤器的结果继续被下一个过滤器处理 {{ 变量名|过滤器1|过滤器2 }} 3、有的过…

idea中搭建Spring boot项目(借助Spring Initializer)

创建新项目 启动端口 在项目配置文件application.properties中写入 #启动端口server.port8088编写测试方法 创建控制类文件夹–>便于规范我们新建一个controller包–>建一个HelloWorld.class package com.example.hellospringboot.controller;import org.springframew…

Linux下MSSQL (SQL Server)数据库无法启动故障处理

有同事反馈一套CentOS7下的mssql server2017无法启动需要我帮忙看看,启动报错情况如下 检查日志并没有更新日志信息 乍一看mssql-server服务有问题,检查mssql也确实没有进程 既然服务有问题,那么我们用一种方式直接手工后台启动mssql引擎来…

arcgis--填充面域空洞

方法一:使用【编辑器】-【合并工具】进行填充。首选需要在相同图层中构造一个填充空洞的面域,然后利用【合并】工具进行最后填充。 打开一幅含有空洞的矢量数据,如下: 打开【开始编辑】-【构造工具】-【面】进行覆盖空洞的面域的…

时间序列预测实战(九)PyTorch实现LSTM-ARIMA融合移动平均进行长期预测

一、本文介绍 本文带来的是利用传统时间序列预测模型ARIMA(注意:ARIMA模型不属于机器学习)和利用PyTorch实现深度学习模型LSTM进行融合进行预测,主要思想是->先利用ARIMA先和移动平均结合处理数据的线性部分(例如趋势和季节性&#xff09…

[html] 动态炫彩渐变背景

废话不多说&#xff0c;直接上源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ZXW-NUDT: 动态炫…

如何在 macOS 中删除 Time Machine 本地快照

看到这个可用82GB&#xff08;458.3MB可清除&#xff09; 顿时感觉清爽&#xff0c;之前的还是可用82GB&#xff08;65GB可清除&#xff09;&#xff0c;安装个xcode都安装不上&#xff0c;费解半天&#xff0c;怎么都解决不了这个问题&#xff0c;就是买磁盘情理软件也解决不了…

Spring Boot 整合xxl-job实现分布式定时任务

xxl-job介绍 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 xxl是xxl-job的开发者大众点评的许雪里名称的拼音开头。 设计思想 将调度行为抽象形成“调度…

一、认识微服务

目录 一、单体架构 二、分布式架构 三、微服务 1、微服务架构特征&#xff1a; 1.单一职责&#xff1a; 2.面向服务&#xff1a; 3.自治&#xff1a; 4.隔离性强&#xff1a; 2、微服务结构&#xff1a; 3、微服务技术对比&#xff1a; 一、单体架构 二、分布式架构 三…

TYUST-RM2023-NewMaker哨兵视觉代码

目录 1 TYUST-RM2023-NewMaker哨兵视觉代码 1.1 说明 1.2 算法设计 1.3 识别思路 TYUST-RM2023-NewMaker哨兵视觉代码 说明 本套代码是太原科技大学NewMaker战队2023赛季哨兵开源代码 本套代码主要含有&#xff1a;TYUST-RM2023赛季哨兵视觉代码&#xff0c;主要模块…

等保到底在“保”什么?

在信息时代&#xff0c;等保评级成为衡量企业信息安全水平的重要标准。那么&#xff0c;什么是等保评级呢&#xff1f;等保合规到底保的是什么呢&#xff1f;一起来看看吧。 编辑搜图 请点击输入图片描述&#xff08;最多18字&#xff09; 等保评级&#xff0c;会从七个维度进…