揭秘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://www.mzph.cn/pingmian/4453.shtml

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

相关文章

新装电脑Flutter环境部署坑汇总(持续更新)

1.本地安装,安装fvm的坑 本人电脑使用windows ,安装fvm则一般使用choco安装,那么首先需要安装choco,打开powershell/或者cmd运行以下命令: Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager…

图像置乱加密-Arnold加密算法

置乱加密是另一种较常用的加密方法,现也被许多文献选用,置乱加密可以是以像素为单位进行全局置乱,该方式打乱了图像像素值的位置,使其图像内容失去相关性,达到保护的目的。也可以是以块为单位进行置乱,该方…

Kafka报错ERROR Exiting Kafka due to fatal exception during startup

报错: ERROR Exiting Kafka due to fatal exception during startup. (kafka.Kafka$) kafka.common.InconsistentClusterIdException: The Cluster ID FSzSO50oTLCRhRnRylihcg doesnt match stored clusterId Some(0oSLohwtQZWbIi73YUMs8g) in meta.properties. Th…

某宝因SSL证书过期无法正常访问,证书过期问题频发企业如何破局?

近日,有网友发现,某宝网站无法正常访问,出现“此连接非私人连接”提示,而导致此类提示的罪魁祸首是因为SSL证书过期!其实,近年来,因SSL证书过期导致的网站无法正常访问的事件频频发生&#xff0…

vue2—— mixin 超级详细!!!

mixin Mixin是面向对象程序设计语言中的类,提供了方法的实现。其他类可以访问mixin类的方法而不必成为其子类 Mixin类通常作为功能模块使用,在需要该功能时“混入”,有利于代码复用又避免了多继承的复杂 vue中的mixin 先来看一下官方定义 mi…

YOLO-yolov5构建数据集

1.收集数据集 创建一个dataset文件夹用来存放图片数据集。 我这里使用的图片数据集,是对一段视频进行抽帧得到的200张狗狗图片。 在dataset文件夹下新建images和labels文件夹,并将200张狗狗图片放入images中。 2.标注数据集 2.1安装标注工具labelimg…

Jenkins邮件发送失败问题解决

如下提示为 Extended E-mail Notification开启Debug模式下显示的错误信息, (Debug模式设置方法:Dashboard-> manage Jenkins->configure System)DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 DEB…

OpenCV——Bernsen局部阈值二值化方法

目录 一、Bernsen算法1、算法概述2、参考文献二、代码实现三、结果展示Bernsen局部阈值二值化方法由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、Bernsen算法 1、算法概述 Bernsen 算法是另一种流行的局部阈值二值化方…

网络相关知识总结

1、网口设置 网口设置IP,即操作/etc/sysconfig/network-scripts路径下的ifcfg-xx文件 主要参数详解: DEVICE:网口名 ONBOOT:表示启动系统时是否激活网卡,yes为激活,no不激活 HWADDR:mac值 DEFROUTE://默认路由设置…

Docker容器:docker基础

目录 一.docker前言 云计算服务模式 关于 docker 产品 虚拟化产品有哪些? ① 寄居架构 ② 源生架构 虚拟化技术概述 主流虚拟化产品对比 1. VMware系列 2. KVM/OpenStack 3. Xen 4. 其他半/全虚拟化产品 二. docker 的相关知识 1. docker 的概念 doc…

[linux网络编程]UDP协议和TCP协议的使用

目录 看以下内容前,你要先了解main函数带参数有什么用、 了解socket的相关函数接口 如果不了解socket的相关函数接口请先看我这篇文章 main函数带参数有什么用 UDP udp_server 1.生成socket文件描述符 2.填充sockaddr_in信息 3.bind 4.发(收&…

学习100个Unity Shader (14) ---透明效果

文章目录 渲染队列透明度测试(Alpha Test)效果Shader 透明度混合(Alpha Blending)效果Shader 参考 渲染队列 由”Queue“ 标签决定,索引号越小越早被渲染: 名称队列索引号Background1000Geometry2000Alph…

从虚拟化走向云原生,红帽OpenShift“一手托两家”

汽车行业已经迈入“软件定义汽车”的新时代。吉利汽车很清醒地意识到,只有通过云原生技术和数字化转型,才能巩固其作为中国领先汽车制造商的地位。 和很多传统企业一样,吉利汽车在走向云原生的过程中也经历了稳态业务与敏态业务并存带来的前所…

牛客NC98 判断t1树中是否有与t2树完全相同的子树【simple 深度优先dfs C++/Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/4eaccec5ee8f4fe8a4309463b807a542 思路 深度优先搜索暴力匹配 思路和算法这是一种最朴素的方法——深度优先搜索枚举 s 中的每一个节点,判断这个点的子树是否和 t 相等。如何判断一个节点的子树是否…

JSP在页面用<%=调用声明函数时出现HTTP 500错误

JSP在页面用<%调用声明函数时出现HTTP 500错误 错误描述&#xff1a; Eclipse在编写JSP页面时&#xff0c;在其中采用<%&#xff01;%>方式声明了函数&#xff0c;然后在页面中用<%函数名%>方式调用时&#xff0c;出现HTTP状态500错误&#xff0c;提示为&#…

【吊打面试官系列】Java高并发篇 - Java 中 notify 和 notifyAll 有什么区别?

大家好&#xff0c;我是锋哥。今天分享关于 【Java 中 notify 和 notifyAll 有什么区别&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Java 中 notify 和 notifyAll 有什么区别&#xff1f; notify() 方法不能唤醒某个具体的线程&#xff0c;所以只有一个线程…

maya blendshape

目录 shape编辑器 maya创建blendshape python 脚本 添加形变动画 查看顶点个数 shape编辑器 打开方式&#xff1a; 窗口-动画编辑器-形变编辑器 maya创建blendshape python 脚本 import maya.cmds as cmds# 创建基础网格 - 球体 baseMesh cmds.polySphere(name"bas…

路透社:美国SEC将拒绝以太坊ETF

4月25日&#xff0c;据路透社报道&#xff0c;美国SEC在下个月将拒绝以太坊现货ETF申请。根据4位知情人士表示&#xff0c;在最近几周与美国证券交易委员会&#xff08;SEC&#xff09;进行了会议之后&#xff0c;美国发行商和其他公司预计SEC将拒绝他们推出与以太坊价格挂钩的…

15(第十四章,大数据和数据科学)

目录 概述 基本概念 数据仓库/传统商务智能与数据科学的比较 数据科学的过程 大数据 大数据来源 数据湖 机器学习 监督学习 无监督学习 强化学习 扩展 1、数据仓库&#xff08;Data Warehouse&#xff09; 2、数据湖(Data Lake) 3、大数据平台1.0 4、数据中台 …

基于ssm的高校课程评价评教系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于ssm的高校课程评价评教系统拥2有四种角色 管理员&#xff1a;学生管理、指标管理、课程两个、院系管理、评教管理等 学生&#xff1a;评教教师、登录注册、查看课程信息等 专家&am…