Linux之文件系统

我们之前谈到的文件描述符fd,是与被加载到内存中的文件相关的,那么还有什么文件呢?磁盘文件

内存文件  ------  断电失效

磁盘文件  ------  不受断电的影响

磁盘存储器存、取信息的最基本单位是扇区。
—个扇区能存储512Bytes的数据,OS与磁盘交互的单位是4KB。

为什么不以512Bytes为单位呢?----太小,导致多次IO,效率降低   ----太大,可能会导致供大于需。

----相同的话,万一磁盘的基本单位变化了,OS也需要变,意味着磁盘与OS的耦合度增大。

磁盘结构:

  1. 表面(Head):磁盘的表面由磁性物质组成,用于记录二进制数据。磁盘表面被划分成一个个磁道,每个磁道又被划分为一个个扇区,每个扇区就是一个“磁盘块”。
  2. 磁道与柱面(Cylinder):磁道是磁盘表面上的同心圆,每个磁盘有两个面,每个面都有一个磁头。所有盘面中相对位置相同的磁道组成了柱面。
  3. 扇区(Sector):每个磁道被划分为多个扇区,每个扇区的数据量相同。靠最内侧的磁道上的扇区面积最小,因此其数据密度最大。

  4. 磁头:磁头用于读写数据,需要借助磁头移动到想要读/写的扇区所在的磁道。磁盘会转动,让目标扇区从磁头下面划过,才能完成对扇区的读/写操作。

如何对磁盘上的文件进行管理呢? 将磁盘的结构抽象成一个 很长很长 的数组。

即定位地址的方式由CHS(Cylinder Head Sector),转变成了LBA(Logical Block Array)。

我们发现,之前我们使用 ls -l -i 或者  stat + 文件名  的时候,发现有一列数字(Inode),Inode是什么呢?要想知道Inode,我们先来了解一下文件系统。

对“大数组”的管理,必须做好对数组的每一小块的管理。

上图为磁盘文件系统图,磁盘是典型的块设备,硬盘分区被划分为一个个的block 。一个 block 的大小是由格式化的时候确定的,并且不可以更改。
Block Group: ext2 文件系统会根据分区的大小划分为数个 Block Group 。而每个 Block Group 都有着相同的结构组成。
超级块(Super Block) :存放文件系统本身的结构信息。记录的信息主要有: bolck inode 的总量,未使用的block inode 的数量,一个 block inode 的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block 的信息被破坏,可以说整个文件系统结构就被破坏了
Group Descriptor Table(GDT): 块组描述符,描述块组属性信息,有兴趣的同学可以在了解一下块位图(Block Bitmap ): Block Bitmap 中记录着 Data Block 中哪个数据块已经被占用,哪个数据块没有被占用
Block Bitmap :和Data blocks是一 一对应的,比特位为1代表该block被占用,为0表示空闲。
inode位图(inode Bitmap): 每个 bit 表示一个 inode 是否空闲可用。
i节点表(inode Table): 存放文件属性 如 文件大小,所有者,最近修改时间等
数据区(Data blocks): 存放文件内容

文件名  和  Inode 是一 一对应的,目录也是文件,目录中的文件名  和  Inode 就存在该目录对应的Data blocks中,文件名  和  Inode 是互为Key的!!!

我们发现,一个Block group并不是很大,对于那些几十甚至几百G的文件,该怎么存放呢?

可以将其他Block group的索引信息填写到当前 Block group中的 Data blocks中,这样,就形成了如下的多叉树的结构,显然一定能存的下!!!

创建文件,文件名   和   Inode 就被存放到当前目录对应的Data blocks中。

删除文件, 只需将Block Bitmap  和  inode Bitmap当中对应的比特位由1置为0即可,不需要修改Data blocks中的内容。

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

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

相关文章

Spring-01

Spring 1.Spring是什么? spring是一个开源的Java应用框架,它提供了一套全面的基础设施支持 2.Spring框架的主要特点 1)依赖注入(Dependency Injection,DI) 2)面向切面编程(AOP&#xff09…

Redis命令-Key的层级结构

基础篇Redis 4.4 Redis命令-Key的层级结构 Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢? 例如,需要存储用户.商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,此时如果使…

长篇分享,如何学习电路设计?

本文来自看海原创视频教程:《运放秘籍》运算放大器基础精讲及应用第一部*开天 微信公众号:工程师看海 【淘宝】https://m.tb.cn/h.5PAjLi7?tkvmMLW43KO7q CZ3457 「运放秘籍_运算放大器Multisim仿真视频教程第一部开天_工程师看海」 点击链接直接打开 …

王道C语言督学营OJ课后习题(课时14)

#include <stdio.h> #include <stdlib.h>typedef char BiElemType; typedef struct BiTNode{BiElemType c;//c 就是书籍上的 datastruct BiTNode *lchild;struct BiTNode *rchild; }BiTNode,*BiTree;//tag 结构体是辅助队列使用的 typedef struct tag{BiTree p;//树…

OpenGL的MVP矩阵理解

OpenGL的MVP矩阵理解 右手坐标系 右手坐标系与左手坐标系都是三维笛卡尔坐标系&#xff0c;他们唯一的不同在于z轴的方向&#xff0c;如下图&#xff0c;左边是左手坐标系&#xff0c;右边是右手坐标系 OpenGL中一般用的是右手坐标系 1.模型坐标系&#xff08;Local Space&…

保理业务产品方案

常见的信贷业务流程 产品架构 一般分为贷前、贷中、贷后三个部分&#xff1a; 贷前一般处理客户入驻、资质审批、授信项目准入&#xff1b; 贷中一般处理处理具体的融资申请、审批、中登登记、资产锁定、放款事务&#xff1b; 贷后一般处理客户还款冲销、账款跟踪、到期日调整…

GRE_MGRE综合实验

目录 1、R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有IP地址。 IP配置 配置公网全网通 2、&#xff08;1&#xff09;R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方。 PAP认证 &#xff08;2&#xff09;R2与R5之间使用ppp的CHAP认证&am…

顺序栈、链式栈、顺序队列、链式队列的ADT及其实现

顺序栈ADT及其实现 链式栈ADT及其实现 顺序队列的ADT及其实现 在数组中队首队尾的分配方案 第三中方案&#xff0c;即达到入队出队操作的时间代价是O&#xff08;1&#xff09; 同时可充分利用空间&#xff0c;不会出现空间似乎用完了的假象 时间性能和空间性能发挥到最大 链…

Qt FFmpeg开发环境配置以及测试 - 不编译源码

Qt FFmpeg环境配置以及测试 引言一、下载二、配置三、测试 引言 FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。它采用了LGPL或GPL许可证&#xff0c;并提供了录制、转换以及流化音视频的完整解决方案。 FFmpeg包含了非常先进的…

【C++】map set

文章目录 1. 关联式容器2. 键值对3. 树形结构的关联式容器3.1 set3.1.1 set 的介绍3.1.2 set 的使用 3.2 map3.2.1 map 的介绍3.2.2 map 的使用 3.3 multiset3.3.1 multuset 的介绍3.3.2 multiset 的使用 3.4 multimap3.4.1 multimap 的介绍3.4.2 multimap 的使用 1. 关联式容器…

【文献分享】PyPlume程序:快速海洋表面传输评估的工具包

PyPlume: A toolkit for rapid ocean surface transport assessments PyPlume&#xff1a;快速海洋表面传输评估的工具包 PyPlume 是一个 Python 工具箱和管道&#xff0c;用于统一从模型和观测加载二维洋流矢量场、模拟轨迹模型以及分析和可视化粒子轨迹的过程。提供了 Ju…

Java_21 完成一半题目

完成一半题目 有 N 位扣友参加了微软与力扣举办了「以扣会友」线下活动。主办方提供了 2*N 道题目&#xff0c;整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。 若每位扣友选择不同的一题&#xff0c;请返回被选的 N 道题目至少包含多少种知识点类型。 示例…

python requirement.txt编译问题,代理问题为解决。

Date: 03/28/2024 11:00-12:00 Date: 03/27/2024 19:00-21:00 问题现象&#xff1a;开启代理后&#xff0c;无法正常下载 PS D:\workspace\winform\canvas\mysite依赖包> python -m pip install flatlib-0.2.3-py3-none-any.whl Looking in indexes: https://mirrors.ust…

WHM面板备份与恢复方法

上周有一个Hostease客户&#xff0c;购买了WHM面板的服务器&#xff0c;联系我们关于WHM面板中备份如何设置。接下来&#xff0c;我们分享如何在WHM面板中进行备份设置。 以下是在 WHM 面板中进行备份和恢复的基本步骤&#xff1a; 备份配置&#xff1a; 登录 WHM 控制面板&…

《 Arm Compiler 5.06 》__ARM编译器官网下载、安装和使用说明(小白也能懂)

目录 一、前言 二、官方网站下载 三、我的资源 四、编译器安装在 Keil 软件上 五、Keil选择编译器V5 “ V5.06 update 7(build 960) ” 六、测试 (*&#xffe3;︶&#xffe3;)创作不易&#xff01;期待你们的 点赞、收藏和评论喔。 一、前言 【Keil MDK-Arm5.37】不再…

Linux课程____selinux模式

一、是什么 它叫做“安全增强型 Linux&#xff08;Security-Enhanced Linux&#xff09;”&#xff0c;简称 SELinux&#xff0c;它是 Linux 的一个安全子系统 二、有啥用 就是最大限度地减小系统中服务进程可访问的资源&#xff08;根据的是最小权限原则&#xff09;。避免…

三个对象组练习.java

题目&#xff1a;定义数组存储3部汽车对象&#xff1b;汽车属性&#xff1a;品牌&#xff0c;价格&#xff0c;颜色&#xff1b;创造3个汽车对象&#xff0c;数据通过键盘录入而来&#xff0c;并把数据存储到数组当中 分析&#xff1a; 在main&#xff08;&#xff09;里面定义…

QT----基于QT的人脸考勤系统ubuntu系统运行,编译到rk3588开发板运行

目录 1 Ubantu编译opencv和seetaface库1.1 Ubantu编译opencv1.2 Ubuntu编译seetaface1.3 安装qt 2 更改代码2.1 直接运行报错/usr/bin/ld: cannot find -lGL: No such file or directory2.2 遇到报错摄像头打不开2.3 修改部分代码2.4 解决中文语音输出问题 3 尝试交叉编译rk358…

产品经理如何提高产品业务逻辑?4个重点

产品经理培养良好的产品业务逻辑能力&#xff0c;能够更准确地理解和挖掘用户需求&#xff0c;梳理出详实且符合实际业务场景的产品需求文档&#xff0c;从而确保项目开发的方向正确、目标明确。而清晰的产品业务逻辑有助于减少项目执行中的反复沟通和需求确认&#xff0c;有助…

《数据结构学习笔记---第七篇》---栈和队列的OJ练习

1. 括号匹配问题。OJ链接 step1:思路分析 &#xff1a; 1.括号匹配&#xff0c;我们首先考虑用栈实现&#xff0c;我们通过符号栈帧的思想知道&#xff0c;求前中后缀表达式的时候用的就是栈帧&#xff0c;操作数栈和符号栈。 2.根据常见的情况 考虑怎么使用栈&#xff0c;首先…