文件系统--inode

news2024/9/17 8:33:32

在这里插入图片描述

文章目录

  • 概述
  • 认识磁盘
    • 了解磁盘的存储结构
    • 对磁盘的存储结构进行逻辑抽象
  • 操作系统对磁盘的使用
    • 宏观认识
    • 细节认识
    • 再谈目录
    • 再谈文件的增删

概述

文件有很多,但是被打开的文件很少,这些没有被打开的文件在磁盘中,这就叫做磁盘文件。每次先打开一个文件,需要先找到这个文件,需要通过文件路劲及文件名先在磁盘中找到这个文件。本篇文章要研究的是磁盘文件,核心问题是如何存取问题。在研究这些问题之前,需要先认识一下硬件–磁盘


认识磁盘

磁盘本质是一个机械设备

在这里插入图片描述

计算机只认识二进制,即0和1,在物理层面上有不同的表现

  • 盘片:可读可写可擦出,一片两面都可以使用
  • 磁头:在磁盘上来回读写,盘片一面一个磁头,磁头和盘片不是挨着的

了解磁盘的存储结构

磁盘是一个机械设备,是一个外设,速度比较慢。

在这里插入图片描述
在这里插入图片描述

磁盘读写的基本单位是扇区,512字节,4KB
1片=n磁道,1磁道=m扇区

这么多扇区,如何找到指定位置的扇区?

  1. 找到指定磁头Header
  2. 磁头移动,找指定的磁道(柱面) Cylinder
  3. 找到指定的扇区(通过磁盘旋转) Sector

上述称为CHS定址法

所谓把文件存储在磁盘,本质是文件在磁盘中占几个扇区

对磁盘的存储结构进行逻辑抽象

为什么需要把磁盘的存储结构进行逻辑抽象?
一方面如果操作系统直接用CHS地址,硬件改了,那么软件也改了,耦合度过高; 另一方面方便实现内核进行磁盘管理。

在块级别上,磁盘被划分为若干个固定大小的块(通常是几KB或几MB)。文件系统会将文件分割成多个块,并将这些块按需存储到磁盘上。每个块都有一个唯一的地址,文件系统通过记录块的地址和文件的元信息(如文件大小、创建时间等)来管理文件的存储和访问。
在这里插入图片描述

最终一个磁盘可以看作是基于扇区的数组,每一个扇区都对应有一个下标来唯一标识。通过这个下标(LBA 逻辑扇区地址),再结合每一面磁道的个数和每一个磁道上扇区的个数就可以定位到该扇区在磁盘上的位置(CHS地址)。

通过逻辑抽象,用户和应用程序可以像操作文件一样操作磁盘上的数据,而不需要了解底层的物理存储细节。文件系统负责将逻辑操作转换为物理操作,并管理数据在磁盘上的存储和检索。这样,文件系统提供了一种方便和可靠的方式来管理和利用磁盘的存储空间。

进一步可得,所谓的文件只需要知道LBA地址,文件=很多个LBA地址(纯硬件)。

操作系统对磁盘的使用

宏观认识

Linux文件系统特点:文件内容和文件属性分开存储
先简单了解一下文件系统:
在这里插入图片描述
在每一个分区内部分组,然后写入文件系统的管理数据

Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的

  • Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。简而言之,描述整个分区(一个分区多大,有多少块组,每个块组使用情况等等)。超级块不是每个分区都有,一个分区也不一定只有一个超级块。
  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息,描述一个块组的具体使用情况
  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用,比特位的位置表示块号,比特位的内容,表示该块是否被占用
  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用
  • i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等,一个正常文件一个inode属性
    inode内部不包含文件名,内核层面每一个文件都要有inode_number,我们通过inode号标识一个文件。
    通过ll -li即可查看文件号

在这里插入图片描述
在这里插入图片描述

  • 数据区(Data Blocks):存放文件内容

在这里插入图片描述

细节认识

我们在寻找文件的时候,需要找到inode编号
inode编号是分区为单位整体分配的,一个分区内inode编号不可能重复。两个分区的inode编号可能是重复的,因此inode不能跨分区访问。一个分组使用的inode编号,是在一个范围中;例如,第一个分组时1 ~ 10000,第二个分组是 10001 ~ 20000…
在Super Block和GDT中都会记录start_inode和end_inode,这样就能确定inode在哪一个分组里。

datablocks也是如此

再谈目录

目录=文件属性+文件内容 ,目录也有自己的inode属性

在这里插入图片描述
通过上述可见,目录和文件的属性结构是一致的

查找一个文件,是根据该文件的文件名在系统中找到该文件对应的inode编号。

因此可以解释一下现象:

  1. 一个目录下不能建立同名目录
    文件名的inode互为键值
  2. 查找文件的顺序,先根据文件名找到inode编号,然后根据编号在所在的分区确定范围,确定在某个组里面,然后找对应的inode Bitmap和inode Table,确定是合法的然后找到对应的属性,属性找好了之后,对应的大小等都找到了。
  3. 进入目录需要x权限,目录的r权限本质为是否允许我们读取目录的内容,文件名:inode的映射关系;目录的w权限,新建文件,最后一定要向当前所处的目录中写入文件名和inode映射关系

再谈文件的增删

首先创建文件一定是在一个路径下(目录)进行创建,这个路径就会帮我们定位到一个分区,然后去从第一个分组开始查看当前分组的 GDT 字段,看该分组中 inode 的使用情况,若当前分组中的 inode 还有剩余,接着去读取 inode_Bitmap,获取最近一个未被使用的 inode 编号,然后拿着 inode 编号去 inode_Table 里面找到对应的 inode,将文件的属性信息一填。如果有文件内容,先拿着 inode 编号找到对应的分组,根据写入内容的大小去 Block_Bitmap 中找出对应数量未被使用的块号,然后将这些块号写入到 inode 对应的属性里面,然后拿着块号去 Data blocks 中进行写入。


删除文件只要拿着该文件的 inode 编号,在 inode Table 中找到对应的 indoe,获取到里面的 blocks,即拿到该文件对应的所有块号,然后根据这些块号将 Block Bitmap 中对应的比特位置0(假设 0 表示对应的块未被使用)。最后再根据 inode 编号到 inode Bitmap 中将该 inode 对应的比特位置为0,至此,一个文件就被删除啦。可以发现从头到尾并没有去修改块中的内容,这也是为什么拷贝 4G 的文件很慢,删 4G 的文件很快。所以在理论上,一个被删除的文件,可以根据 inode 将其恢复出来。

在这里插入图片描述

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

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

相关文章

用眼某星的名片识别与手工录入名片数据的效率及效果对比

OCR名片识别技术,作为现代信息处理领域的一项创新技术,已经逐渐取代了传统的名片管理方式,成为商务人士不可或缺的工具。本文将从OCR名片识别的特点与优势出发,详细阐述其相较于传统人工处理名片的显著差别,并揭示其在…

在chrome中查找和验证xpath

1、快速获取XPath表达式 按F12打开chrome浏览器的开发者模式,点击选择光标,选择页面上的元素位置,在控制台右键选择Copy XPath,表达式就复制到粘贴板中了。 获取到的xpath路径://*[id"hotsearch-content-wrapper…

护目镜佩戴自动识别预警摄像机

护目镜佩戴自动识别预警摄像机是一种智能监测设备,专门用于佩戴护目镜的工人进行作业时,能够自动识别有潜在风险的场景,并及时发出预警信号。该摄像机配备人脸识别和智能预警系统,可以检测危险情况并为工人提供实时安全保护&#…

【qt】标准项模型

标准项模型 一.使用标准型项模型1.应用场景2.界面拖放3.创建模型4.配套模型5.视图设置模型6.视图属性的设置 二.从文件中拿到数据1.文件对话框获取文件名2.创建文件对象并初始化3.打开文件对象4.创建文本流并初始化5.读取文本流6.关闭文件7.完整代码 三.为模型添加数据1.自定义…

Java 对外API接口开发 java开发api接口如何编写

Java API API(Application Programming Interface)是指应用程序编程接口,的JavaAPI是指JDK提供的各种功能的Java类 String类 String类的初始化: (1)使用字符串常量直接初始化 初始化:String s…

沃通国密根证书入根红莲花浏览器,共建国密HTTPS应用生态

近日,沃通CA与海泰方圆红莲花安全浏览器进一步达成合作,沃通新增国密根证书入根红莲花安全浏览器。此次入根合作,标志着沃通国密数字证书产品兼容性再次得到提升,进一步夯实国密应用根基。 沃通CA入根红莲花浏览器,自动…

什么是谷歌留痕?

其实它就是指你的网站在谷歌中留下的种种痕迹,无论你是在做外链,还是优化网站内容,或是改善用户体验,所有这些都会在谷歌的搜索引擎里留下一些“脚印”,用比较seo一点的说法,指的是网站在其构建和优化过程中…

ARM|DSP+FPGA+NVIDIA AI摄像头定制

信迈拥有高性能的摄像头全栈能力:掌握车载模组光学设计能力,具有多名经验丰富光学设计专家;具备丰富的车载摄像模组硬件设计经验;掌握目前市面上大部分车载平台的ISP图像画质服务能力,能自主开发图像ISP和增强算法&…

大厂程序员离职,开发一个盲盒小程序2万,一周开发完!

大家好,我是程序员小孟! 前面接了一个盲盒的小程序,主要的还是商城,盲盒的话只是其中的有一个活动。 现在的年轻人是真的会玩,越来越新的东西出来,越来越好玩的东西流行。 就像最近很火的地摊盲盒。 讲…

Linux配置nginx代理功能

ywtool运维工具下载链接及介绍: 工具下载/介绍/安装页面 目录 一.nginx proxy功能介绍二.配置nginx proxy功能2.1 新增nginx代理配置2.1.1 反向代理(当前只举例https转https)2.1.2 负载均衡(当前只举例https转https) 2.2 修改nginx代理配置2.2.1 手动修改配置文件2.2.2 通过此脚…

【图书推荐】《Vue.js 3.x+Element Plus从入门到精通(视频教学版)》

本书用处 内容简介 本书通过对Vue.js(简称Vue)的示例和综合案例的介绍与演练,使读者快速掌握Vue.js 3.x框架的用法,提高Web前端的实战开发能力。本书配套示例源码、PPT课件、教学大纲、教案、同步教学视频、习题及答案、其他资源…

插件“猫抓”使用方法 - 浏览器下载m3u8视频 - 合并 - 视频检测下载 - 网课下载神器

前言 浏览器下载m3u8视频 - 合并 - 网课下载神器 chrome插件-猫抓 https://chrome.zzzmh.cn/info/jfedfbgedapdagkghmgibemcoggfppbb 步骤: P.s. 推荐大佬的学习视频! 《WEB前端大师课》超级棒! https://ke.qq.com/course/5892689#term_id…

水面漂浮物生活垃圾识别检测系统

水面漂浮物生活垃圾识别检测系统通过现场监控摄像机对河道湖面等水体进行实时监测,水面漂浮物生活垃圾识别检测系统借助智能视频分析技术和YOLO深度学习技术,系统能够自动识别和抓拍水面上的垃圾漂浮物。一旦系统检测到有垃圾漂浮在水面上,立…

Android-自定义三角形评分控件

效果图 序言 在移动应用开发中,显示数据的方式多种多样,直观的图形展示常常能带给用户更好的体验。本文将介绍如何使用Flutter创建一个自定义三角形纬度评分控件,该控件可以通过动画展示评分的变化,让应用界面更加生动。 实现思…

Pantera 合伙人简谈 Morpho:更高效、适应性更强的 DeFi 解决方案

原文标题:《Pioneering Peer-to-Peer Lending in the DeFi Revolution》撰文:Pantera Capital 合伙人 Paul Veradittakit编译:Chris,Techub News 文章来源:香港Web3媒体Techub News Morpho 正在超越 Compound 等传统…

linux系统安全加固

目录 1、账户安全基本措施 1)系统账户清理 2)密码安全控制 3)命令历史限制 2、用户切换及提权 1)使用 su命令切换用户 2)使用sudo机制提升权限 3、系统引导和安全登录控制 1)开机安全控制 2&…

亚马逊卖家账号注册复杂吗?需要什么辅助工具吗?

在当今数字化的商业世界中,亚马逊作为全球最大的电商平台之一,吸引着无数的卖家和买家。对于想要进入亚马逊销售市场的卖家来说,首先要完成的一项重要任务就是注册亚马逊卖家账号。本文将详细介绍亚马逊注册的步骤、所需时间,以及…

Advanced Installer 使用教程-注册表的读写

一、写入 1、注册表的写入:点击左侧“注册表”,在配置单元注册表的条目上右击选择“新建项”,填入新建项名称,如下图新建了一个“InstallerManager”项 2、在刚才的新建项上右击选择“新建值”,在弹出的窗口中填入名称…

微服务框架Go-kit 01 - 基础示例

一、Go kit简介 Go kit 是一个用于构建可扩展、灵活和可维护微服务的框架和工具集合。它提供了一系列库和组件,涵盖了微服务开发的各个方面,包括服务发现、负载均衡、通信、日志记录、请求跟踪、限流、熔断等。 Go kit 构建微服务时遵循一种类似于传统…

java/php/node.js/python农业技术学习平台【2024年毕设】

本系统带文档lw万字以上 文末可领取本课题的JAVA源码参考 开发环境 开发语言:Java 框架:ssm 技术:ssmvue JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7或8.0 数据库工具:Navicat11 …