Linux中inode

磁盘的空间管理

如何对磁盘空间进行管理?

假设在一块大小为500G的磁盘中,500*1024*1024=524288000KB。在磁盘中,扇区是磁盘的基本单位(一般大小为512byte),而文件系统访问磁盘的基本单位是4KB,因此500G就被分成了131072000个扇区,将这些扇区看作为数组。而如果对这500GB进行分盘(C盘50G,D盘100G等),因此对500G磁盘的管理也就是对分的C盘50G,D盘100G的管理,相同,对于C盘50G的管理又被分化成对C盘中5个10G的管理。因此只要管理好局部,就能管理好整体,将整体细化成小等份进行管理即可(如下图)。

在Linux中,文件由数据与属性组成,这里数据内容存储在block(一般是4KB)中,属性存放在inode(磁盘上的另一块空间,一般是128字节)中,因此一个扇区(512字节)可以存储4个inode。但是内容可以增多或减少,而属性是不变的。

  1. Date blocks:里面包含许多Data Block,并且占磁盘的绝大部分空间,每一个Data Block大小是4KB。Data Blocks的作用是以块(这里的块就是Data Block)为单位,对文件内容进行保存,OS将文件每4KB分为一块进行保存,不够4KB也按照4KB保存。
  2. inode table:里面包含大量的inode空间(每个inode大小为128字节),用于保存文件属性。这里的inode可以理解成一个结构体(struct inode,其中保存着对应文件的Data Block编号,这使得Data Blocks与inode进行相互关联),结构体内部包含文件属性(所有者,权限等),并且以二进制的形式将实例化对象(struct inode i)写到inode空间里面。一般而言,一个文件有一个inode编号,以保证文件的唯一性。
  3. Block Bitmap:意思是位图,用于判断Data Blocks上的空间是否被占用。通过比特位上的数据来判断数据块中哪些空间被使用,哪些空间没被使用(0000 0000表示空空间都没有被使用,0000 1010表示1号位和3号位空间被使用)。
  4. Inode Bitmap:用于判断inode哪些空间被占,哪些空间没有被使用。
  5. Group Descriptor Table:简称GDT,块组描述符,用于描述inode表和数据块的起始位置。
  6. Super Block:用于记录存放文件系统本身的信息,记录Data Block和inode Block中的使用量以及未使用量等。并不是每个Block Group都含有Super Block,Super Block存在的意义是如果Super Block出现损坏可以通过其他Super Block对文件进行恢复。

注意:文件名也是文件的属性,但是在Linux中,并没有文件名的概念,而是通过inode对应的Data Block编号来识别文件的,因此要找到文件,就必须找到该文件对应inode编号,找到inode编号就能找到文件的Data Blocks,从而找到文件内容。那么如何找到inode呢?

我们知道,目录其实也是文件,是文件就具有文件内容和属性,这里目录的文件内容其实就是文件与目录的inode编号的映射关系。当我们在某一个目录下创建一个文件的时候,OS会根据当前目录下的Inode Bitmap找到未使用空间,将创建的文件的属性写入到该未使用的inode上,然后再根据Block Bitmap找打未使用的Data Block,然后填写数据到Data Block上,最后返回该文件的inode。最后返回的inode编号找到该文件所处的目录,根据目录的inode找到目录的Data Block,然后将文件名与inode的映射关系写入到目录的Data Block中。(这就是为什么inode中不保存文件名,因为文件名在目录中)

当删除一个文件的时候,根据目录的inode和要删除的文件名,找到目录的Data Block,根据文件名的映射关系找到文件的inode,再根据要删除文件的inode找到该文件的BlockGroup,将要删除文件的inode Bitmap和Block Bitmap的位图上的标志位由1置为0,最后取消该文件与目录的映射关系。

软连接与硬连接

软连接:

如上图,在/home/101-asy/linux/2024-12-06/d1/d2/d3目录下编译成的可执行文件mytest1,如果在/home/101-asy/linux/2024-12-06下执行需要带该文件的路径: ./d1/d2/d3/mytest1;但是如果使用软连接的方式:ln -s ./d1/d2/d3/mytest1 mytest1.s在/home/101-asy/linux/2024-12-06目录下生成一个软连接的可执行文件mytest1.s。这个软连接可以理解成快捷键。

如上图,软连接的文件与源文件的inode不同(因此软连接文件是一个独立的文件,也要进行分配inode,填写属性Data block,映射等操作),并且软连接文件的内容其实是源文件的所在路径。


硬连接:

创建的硬链接文件与原文件的inode相同,所谓的硬连接就是在当前目录下,给指定的文件新增文件名和inode编号的映射关系。

硬连接数是指向同一inode文件的数量,用于标识有多少个文件指向当前inode文件。


为什么创建的文件默认硬连接数是1呢???而文件夹又是2呢???

如上图,我们知道硬连接数表示有几个文件名指向该文件。当创建file文件时,file文件本身就指向了该文件,因此file文件本省就是一个硬连接数。而对于文件夹来说除了文件夹名本身外其内部还有一些文件:

以目录d4为例,d4的硬连接数为3,分别为d4文件名本身指向d4,d4目录下的.文件指向d4,以及d5目录下的..文件指向d4。

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

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

相关文章

5G扬帆乘劲风,遨游通讯赋能千行百业谱新篇

在大型工厂,轻触手机屏幕,实时库存数据、人员定位等信息便跃然眼前、一目了然;在边远油田,动动手指,即可实时查询设备温度、危险气体浓度等信息,大数据瞬间尽在“掌”握……在遨游5G防爆智能手机的助力下&a…

RT Thread Studio新建STM32F407IG工程文件编译提示错误

编译提示错误 原因: RT 源码使用4.0.3的话,请用STM32F4支持包的0.2.2版本,就不会出错了。 如果支持包用0.2.3版本的话,需要用RT内核4.1.0版本。0.2.3 版本更新了一些针对内核4.1.0的驱动代码,这几个定义都是4.1.0里的。

学生管理系统(java)

1.前期准备 (1)新建java项目 (2)新建java软件包以及三个文件Student.java,Student.txt,StuSystem.java Student.java package student_management_system;public class Student {private String id;private String name;private…

JavaWeb学习(2)(Cookie原理(超详细)、HTTP无状态)

目录 一、HTTP无状态。 (1)"记住我"? (2)HTTP无状态。 (3)信息存储客户端中。如何处理? 1、loaclStorage与sessionStorage。 2、Cookie。 二、Cookie。 (1&…

SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪

SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪 一、Skywalking是什么?二、Skywalking与JDK版本的对应关系三、Skywalking下载四、Skywalking 数据存储五、Skywalking 的启动六、部署探针 前提: Agents 8.9.0 放入 …

flask创建templates目录存放html文件

首先,创建flask项目,在pycharm中File --> New Project,选择Flask项目。 然后,在某一目录下,新建名为templates的文件夹,这时会是一个普通的文件夹。 然后右击templates文件夹,选择Unmark as …

Java进阶(注解,设计模式,对象克隆)

Java进阶(注解,设计模式,对象克隆) 一. 注解 1.1 什么是注解 java中注解(Annotation),又称java标注,是一种特殊的注释 可以添加在包,类,成员变量,方法,参数等内容上 注解会随同…

部署loki,grafana 以及springcloud用法举例

文章目录 场景docker 部署grafanadocker-compose部署loki维护配置文件 local-config.yaml维护docker-compose.yml配置启动 grafana 添加loki数据源springcloud用法举例查看loki的explore,查看日志 场景 小公司缺少运维岗位,需要研发自己部署日志系统,elk…

keil报错---connection refused due to device mismatch

解决办法如下: 记得改成1 把Enable取消

第三节、电机定速转动【51单片机-TB6600驱动器-步进电机教程】

摘要:本节介绍用定时器定时的方式,精准控制脉冲时间,从而控制步进电机速度 一、计算过程 1.1 电机每一步的角速度等于走这一步所花费的时间,走一步角度等于步距角,走一步的时间等于一个脉冲的时间 w s t e p t … ……

vue中pdf.js的使用,包括pdf显示,跳转指定页面,高亮关键词

目录 一、下载pdf.js 二、引入到本地的项目中 三、实现预览pdf 四、跳转到指定页面 五、利用pdf里面的find查找关键词 六、修改页面大小为实际大小 一、下载pdf.js https://github.com/mozilla/pdf.js 里面有很多的版本, 高版本的可能浏览器不兼容或者还要考…

Qt 小项目 学生管理信息系统

主要是对数据库的增删查改的操作 登录/注册界面: 主页面: 添加信息: 删除信息: 删除第一行(支持多行删除) 需求分析: 用QT实现一个学生管理信息系统,数据库为MySQL 要求&#xf…

“量子跃迁与数据织网:深入探索K最近邻算法在高维空间中的优化路径、神经网络融合技术及未来机器学习生态系统的构建“

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

硬件选型规则

光源选型: 先用型号中带H的,没有的选标准的. 光源和光源控制器的搭配需要确保接口一致。 根据型号表中的最佳工作距离和相机的尺寸。 光源控制器选型: 首先选择海康风格系列光源控制器考虑与光源的接口匹配。功率应该满足接近光源功率。检查是否退市…

【计算机网络】 —— 数据链路层(壹)

文章目录 前言 一、概述 1. 基本概念 2. 数据链路层的三个主要问题 二、封装成帧 1. 概念 2. 帧头、帧尾的作用 3. 透明传输 4. 提高效率 三、差错检测 1. 概念 2. 奇偶校验 3. 循环冗余校验CRC 1. 步骤 2. 生成多项式 3. 例题 4. 总结 四、可靠传输 1. 基本…

golang实现简单的redis服务

golang 手搓redis服务器仓库地址:实现思路: golang 手搓redis服务器 仓库地址: 仓库: https://github.com/dengjiayue/my-redis.git 实现思路: ● 协议: tcp通信 ● 数据包: 长度(4byte)方法(1byte)数据json ● 数据处理: 单线程map读写 ○ 依次处理待处理队列的请求(chan)…

智慧银行反欺诈大数据管控平台方案(八)

智慧银行反欺诈大数据管控平台的核心理念,在于通过整合先进的大数据技术、算法模型和人工智能技术,构建一个全面、智能、动态的反欺诈管理框架,以实现对金融交易的全方位监控、欺诈行为的精准识别和高效处理。这一理念强调数据驱动决策&#…

3D 生成重建019-LERF用文本在Nerf中开启上帝之眼

3D 生成重建019-LERF用文本在Nerf中开启上帝之眼 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 人类利用自然语言描述物理世界,根据各种特性(视觉外观、语义、抽象关联)寻找具体的3D位置。在这项工作中,作者提出了语言嵌…

如何选择合适的期刊投稿?从课题组经验到在线工具的使用全解析

~~~本文是作者个人的经验分享,建立在导师让自己选刊的情况下~~~ 投稿选刊是科研过程中至关重要的一步,选刊过程可能让许多初投稿的研究者感到迷茫和困惑:期刊那么多,如何找到最合适的? 本文将从多个角度介绍如何选择投…

.NET MAUI与.NET for Android/IOS的关系

2024年11月13日微软发布了.Net9.0,我打算体验一下。安装好.Net9.0 SDK后发现Visual Studio识别不到9.0,但是通过命令行dotnet --info查看是正常的,后面看到了VS有版本可以升级,把VS升级到17.12.0就可以了。更新完打开以后看到如下界面 这里…