【Linux】理解文件系统——那就浅聊一下吧

前言

在上一篇文件描述符详解中谈论的都是打开的文件,但是在我们的系统中不仅有打开的文件还有许多未打开的文件,那么这些未打开的文件又该如何理解呢?阅读完本篇文章相信你会得到答案。

如果觉得文章内容对你有所帮助的话,可以给博主一键三连哦!!!

博主水平有限,如果内容有错或者有不足的地方,还望指出,谢谢!!!

背景知识

认识磁盘的结构

磁盘结构主要包括:盘片、磁头、音圈马达主轴马达、控制电机等部分。 

  • 盘片:是磁盘存储数据的核心部件,通常由玻璃或铝制成,并涂有一层磁性材料。这些盘片两面都可以用于数据存储。
  • 磁头:是用于读写磁盘数据的部件,每个盘片上下两面各有一个磁头。磁头悬浮在盘片表面非常微小的距离内,避免与盘片接触。
  • 主轴马达:位于盘片的中心,负责驱动盘片以恒定的速度旋转。

磁盘的存储结构 

在每一个磁盘的盘片上划分了一个个同心圆,这一个个同心圆称为磁道,在磁道上又进一步划分了扇区,磁道是由一个个扇区组成的,所以扇区是磁盘存储数据的基本单位。一般扇区的大小是512字节。

在读写数据时,首先需要将磁头移动到想要读写的扇区所在磁道上,然后通过主轴带动磁盘转动,直到对应的扇区经过磁头,才能完成对扇区的读写操作。

文件系统

磁盘的物理结构是圆形的,可以把上面的磁道抽象成一个拉直以后的一维数组并且这个数组非常的大,而这个扇区将数组划分为了一个个区域(每个扇区能存储一定数量的数据),想要访问一个扇区,只要知道数组的下标即可。

而这一个个扇区内就包含了一个文件系统

Linux ext2文件系统,上图为磁盘为文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,磁盘分区被划分一个个的Block。一个Block的大小是由格式化的时候确定的,并且不可以更改。这样一层一层的划分多个区域就好比一个国家太大了不好管理,那么就需要将一个国家划分为一个个省去管理,但是一个省又太大了,再划分为一个个市去管理,市又划分为一个个县…… 这样划分的目的也就是为了方便管理。

  • Block group:ext2文件系统会根据分区的大小划分为数个Block group。而每个Block group都有着相同的结构组成。
  • Super Block:存放文件系统本身的属性信息。记录的信息主要有:Block和 inode的总量,未使用的Block和inode的数量,一个Block和inode的大小,最进一次挂载的时间,最近一次写入数据的时间,最近检验磁盘的时间等其他文件系统的相关系统,每个Block group中可能都会有Super Block用于在异常情况下对数据进行恢复。Super Block的信息被破坏,可以说整个文件系统就被破坏了。
  • Group Descriptor Table:块组描述符,描述块组属性信息
  • Block Bitmap:用了位图的思想,Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用。
  • inode Bitmap:每一个比特位表示一个inode是否空闲可用
  • inode Table:存放文件属性,如文件大小、所有者、最近修改时间等
  • Data blocks:存放文件内容

每个文件都有一个inode的编号,并且每个inode编号都是不一样的,所以inode编号可以用来标识一个唯一的文件。

​ 

我们都知道在一个目录下是可以保存多个文件的,并且一个目录下的文件都必须是不重名的,所以在一个目录下文件具有唯一性,根据Linux下一切皆文件,那么目录也是一个文件,是文件就有自己的inode和data Blocks,只不过目录的data Blocks中存的就是目录下的文件名和inode的映射关系。因为同一个目录下文件唯一,inode的值也是唯一的,所以文件名和inode可以互为key值。

所以我们在Linux下创建一个目录时要有x权限(执行权限),目录要求要有w权限(写权限)才能在目录下创建文件(要将文件名和inode的映射关系写入目录的data blocks中),目录具有r权限(读权限)那么你在使用ls -l命令时才能显示该目录下的文件名和属性(从data Blocks中读取相应的文件信息)。

有了上面的知识,那么我们就可以来回答一下下面的问题了

创建文件时,系统做了什么?

首先找到一个分区,在分区中找到一个块组(Block group),在块组中的inode Bitmap中找到一个空闲的inode,找到之后将文件的属性写入inode Table中,将Data blocks中的内容清空(因为刚创建的文件内容为空),然后再Block Bitmap中将对应的Data blocks置为1,最后再将文件名和inode编号写入当前目录中,这样就完成了一个文件的创建。

删除文件时,系统做了什么?

根据用户提供的文件名,到目录中的data Blocks中找到对应的文件名和inode的映射关系,知道了inode再到inode Bitmap和Block Bitmap中将对应的比特位由1置为0,然后再到目录的将文件名和inode的映射关系删除,此时就完成了删除文件的操作。 删除文件时不需要将Data blocks清空,只要将次区域标定为无效即可。所以你经常会看到拷贝一个文件要比删除文件花的时间更多。

那么删除的文件也是可以恢复的,只要你还能找到这个文件的inode就能将文件的数据进行恢复(前提是这个inode编号还没有被使用并且inode Bitmap和Block Bitmap中没有被重复占用)。

查看文件时,系统做了什么?

在目录中找到文件名和inode的对应关系,拿到inode之后,通过inode到inode Table中拿到文件的属性,然后再通过Block Bitmap拿到Data blocks中的内容

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络】MAC地址简介

MAC(Medium Access Control),即媒介访问控制,是计算机网络通信中的重要概念。每个NIC(Network Interface Card),即网络适配器,都具有独自且不变的MAC地址(烧录的&#xf…

线程-条件变量和生产者消费者模型

这个内容比较重要,并且面试很容易被问道。所以把他单独拿出来了。 条件变量 条件变量是一种线程同步机制 当条件不满足时,相关线程被一直阻塞,直到某种条件出现,这些线程才会被唤醒。为了保护共享资源,条件变量需要…

ROM修改进阶教程------安卓7_____安卓13去除签名验证操作步骤解析

同类博文: 安卓玩机搞机技巧综合资源-----修改rom 制作rom 解包rom的一些问题解析【二十一】_qcn改区域锁-CSDN博客 安卓系列机型rom修改。如果你删减了系统相关的app。那么严重会导致开机系统卡米 定屏等问题。这类一般都是系统签名验证导致的。而破解签名验证一般都是修改…

JAVA:Kettle 强大的开源ETL工具

请关注微信公众号:拾荒的小海螺 1、简述 Kettle(Pentaho Data Integration):强大的开源ETL工具Kettle,又称作Pentaho Data Integration,是一款流行的开源ETL(Extract, Transform, Load&#x…

ubuntu如何运行python程序

打开LINUX UBUNTU操作系统。 找到左边的TERMINAL,打开窗口。 输入python,如果没有安装,就会提示需要安装。 如果已经安装好python3,直接输入,那么就会进入。 exit()就可以退出python3的模式。 创建一个文件&#xff0c…

有没有学网络空间安全的学长,想知道学长们毕业以后都去干嘛了?

我作为一个零基础小白到白帽黑客,也认识到了很多零基础小白的,有一些网络空间安全的学员,但是大多数还是非计算机相关专业的学员。他们通过系统学习网络安全,掌握黑客技术之后,都找到了自己满意的工作。 同学A&#x…

二叉树oj题(2)

1.二叉树的最近公共祖先 解题思路:方法一: 1.先判断p或者q 是不是 root当中的一个 2.左子树当中递归査找p或者q 3.右子树当中递归查找p或者q 如何查找: root 的 left 和 right 都不为空 ->root root的 left 为空 right 不为空->right这一侧找…

话题——为什么要学习程序,成为程序员呢?

选择成为一名程序员,这对我而言并非是一时冲动,而是深思熟虑后的坚定选择。在当下这个信息化、数字化的时代,程序员这一职业不仅具有极高的技术含量,更承载了推动社会进步、引领科技发展的重任。特别是在深度学习这一前沿领域&…

复写零 ---- 双指针

题目链接 题目: 分析: 就地对数组进行操作, 肯定是需要双指针的 那么我们从左往右进行复写, 定义一个cur用来遍历数组, 一个dest用来修改数组的值, 如果cur下标的值不为零, 那么将cur的值写到dest位置, cur, dest; 如果cur下标的值为0, 那么就将dest下标的值写为0, dest, 再将…

Linux系统编程——进程

一、进程相关概念 面试中关于进程,应该会问的的几个问题: 1.1 什么是程序?什么是进程?有什么区别? 程序是静态的概念,比如: 磁盘中生成的a.out文件,就叫做:程序 进程…

11408知识点集合

文章目录 一、数学(一) 高数0.初等数学补充1.函数、极限、连续2.导数3.中值定理4.积分5.微分方程6.空间解析几何7.多元微分8.重积分9.曲线曲面积分10.无穷级数11.其他杂记(二) 线代0.串联各章的等价条件1.行列式、矩阵的秩、矩阵的初等变换2.向量3.方程组、矩阵方程AXB4.特征值…

Springboot+Vue项目-基于Java+MySQL的学科竞赛管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

Kibana安装部署(Linux)

Kibana是Elasticsearch的开源可视化工具,与存储在Elasticsearch中的数据进行交互。 1. 下载软件 这里使用的Elasticsearch的版本是7.12.0,所以kibana选择同样的7.12.0版本。 官网下载地址:https://www.elastic.co/cn/downloads/past-releas…

WEB攻防-ASP中间件IIS 短文件名探针安全漏洞

IIS短文件名探针安全漏洞是一个与IIS(Internet Information Services)服务相关的安全问题。该漏洞主要是由于HTTP请求中使用了旧DOS 8.3名称约定(SFN)的代字符(〜)波浪号,这使得远程攻击者有可能…

Xilinx FPGA BGA推荐设计规则和策略(二)

引言:上一篇介绍了BGA封装PCB层数估计、BGA焊盘设计、过孔设计、信号走线等内容,本文我们介绍下FPGA BGA封装电源管脚布线。 1. 概述 工程师必须在设计阶段早期评估功率需求,以确保有足够的层和面积为需要功率的BGA焊盘提供足够的功率。因为…

深入探索GDB:Linux下强大的调试神器

目录 一、GDB简介:源码级调试的基石 二、GDB基础操作:从入门到熟练 启动与基本命令 三、GDB进阶功能:解锁更深层次的调试能力 1. 回溯追踪:洞察调用栈 2. 动态内存检测:揪出内存问题 3. 条件断点与观察点&#…

web测试基础知识

目录 web系统的基础 web概念(worldwideweb) 网络结构 发展 架构 B/S C/S P2P 工作原理 静态页面 动态页面 web客户端技术 浏览器的核心--渲染引擎 web服务器端技术 web服务器 应用服务器 集群环境 数据库 案例-URL 协议类型 主机名 端口 IP地址 分类 …

从0到1实现RPC | 接入Apollo配置中心

一、代码实现 添加依赖 添加apollo客户端的依赖和spring配置相关依赖 添加监听器 通过实现ApplicationContextAware接口,获取Spring上下文。 使用ApolloConfigChangeListener注解监听命名空间rpc-demo-provider.yaml和默认的application.properties。 监听逻辑…

Bentley二次开发教程21-文件及模型管理-分组(NamedGroup)介绍

当我们需要对模型中的元素分组时,就需要使用NamedGroup功能,不同于单元,他们的元素并没有那么强的组合关系,同时,组与组之间可以实现嵌套,体现元素间的层级关系。 创建NamedGroup NamedGroup的创建流程为…

JAVA之Spring入门导读

目录 一.Spring是什么? 1.1Spring的简介 1.2 个人看法 2 Spring的深层次了解 2.1Spring的结构层次 2.1Spring的优点 学习路径: Spring技术链接地址Spring项目的创建和简单使用http://t.csdnimg.cn/u01URIOC(Inversion of Control&…