linux——文件系统

article/2025/7/7 0:15:43
  • 被打开的文件放到内存中
  • 没有被打开的文件放到磁盘

1. 硬件-->磁盘

  • 磁盘的存储基本单位:扇区(512字节)

512字节写入到磁盘,磁盘如何转动:

磁盘写入的时候是向柱面进行批量写入的

CHS地址:cylind header sector

柱面,磁头,扇区:由这三个CHS地址就能够找到位置

将每一个柱面平面展开就成为了一个线性结构:磁带例子--->卷起来,拉出来一条线。

抽象成线性结构之后,就相当于是一个数组,访问这个数组下标就可以访问磁盘文件。

os访问磁盘不以扇区为单位,而是以块儿为单位,一般为4KB(可以调整),一块一般为8个扇区

  • 文件系统使用磁盘块儿,是以4KB为单位的

2. 文件系统

文件 = 内容+属性。

文件属性存储在inode里面,文件内容存在Data Block里面。

block bitmap

    • 对应记录data block中那些数据空间被占用
    • data block中有多少个bit,block bitmap中就有多少bit

inode bitmap

    • 对应记录inode table
    • inode table中有多少个bit,inode bitmap中就有多少bit

  • block bitmap和inode bitmap通过置0或者1的方式标识对应空间的占用情况。
  • 在删除数据的时候,将iNode/blockbitmap置0,恢复数据的时候将位图里面各个位置置1就行。
  • 每个组里面有多少个inode,data block就决定了整个block group,分别决定了其它的一些块儿信息。

  • inode和data block是跨组(block group)的
  • inode不能跨分区(partition),所以在同一个分区内部,inode编号,块号都是唯一的。
  • 如何确定文件在那个inode里面:除模运算。

上图各个模块儿解释

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节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
数据区:存放文件内容

格式化: 在使用之前将super block,GDT,block bitmap,inode bitmap这几个字段全部清0——》》写入文件系统的管理信息。

super block

不是所有的组里面都要包含super block,只有个别包含

每个block group中都有super block,他们里面的内容完全一样,为了保证super block的安全性,会在每一个block group中备份以保证文件系统的安全,如果一个block group中的super block挂掉,可以从其他的block group中恢复。

OS如何管理磁盘:

  • OS会将每个partition的super block,GDT的信息加载到内存中,使用链表将他们链接起来,对链表管理,就是对文件系统的增删查改。
  • 将inode bitmap和block bitmap置0或者1就行了

如何根据inode找到data block:

  • 在struck inode中存储了一个data block的编号信息,根据inode就可以找到文件数据。

linux下如何看待目录 :

  • 目录也有自己的inode,他也是按照内容和属性相分离存储的。目录的内容保存的是文件名和inode的映射关系,文件名和inode是互为键值,都是唯一的。所以在磁盘中保存文件没有了目录的概念,磁盘中保存的所有数据就是inode和数据。目录和普通文件保存方案一样。
  • 文件名不会作为属性保存在文件的inode中,保存在当前文件所需的目的数据内容当中
  • 访问磁盘上的文件只认inode。打开路径+文件名—>
  • 先打开所在路径。读取目录里面的数据内容,得到文件名和inode的映射关系,文件名→inode→inode 进行文件内的查找
  • 找到一个目录也要找到一个目录名的inode的,如何找到呢?→开机的时候固定打开“/”目录。→找到任何文件都必须要有路径。
    • 访问文件的时候进程提供路径,进行路径解析。
  • 自己提供的文件名+文件路径组成了文件。
  • OS在进行路径解析的时候,会把我们历史访问的所有的目录(路径)形成一颗多叉树,进行保存。—>linux系统树状目录结构。—>目录结构是内存级(里面是临时数据)的。—>实验现象:在第一次查目录文件的时候会比较慢,第二次后面就会快很多。

文件加载过程:

磁盘→分区→格式化→我们依旧不能使用这个分区。我们的分区,一定要和特定的一个目录进行关联→通过进入这个目录,就相当于进入这个分区→挂载。要使用分区就需要挂载得到目录。

inode存储文件属性结构:

3. 软硬链接

软连接

软连接是一个独立的文件,因为他有独立的inode number

软连接能干啥:相当于是windows下的快捷方式

软连接内容保存的是文件的路径

设置软连接:

  • 增加软连接:
//为文件建立软链接
ln -s ./soft.txt soft_link
//为目录建立软链接
ln -s ./FileSystem/ link_file
  • 删除软连接

直接rm 删除对应的文件就可以了

硬链接

ln code.c code-hard

硬链接本质不是一个独立的文件,没有独立的inode。本质是一组新的文件名和目标inode number的映射关系。

硬链接数相当于是一个引用计数。

硬链接作用:

  1. 对文件进行备份
  • 任何一个目录文件下都有一个” . ”文件,这个文件就是当前目录的硬链接。所以目录的硬链接数为2。
  1. 硬链接只能给普通文件进行建立,linux系统下,不支持给目录建立硬链接
  2. . 和 .. 本质是对目录进行硬链接
  3. 为什么不允许用户给目录进行硬链接:
    1. 容易形成路径环问题
    2. 因为软链接是一个独立的文件,所以不存在成环问题。


http://www.hkcw.cn/article/oCgIfQEYGD.shtml

相关文章

HBM的那些事2 写操作

搞懂写,把下面这幅图搞定,基本上就掌握了7成了。 术语解释 WL : write latency,说的是命令到发送数据的WDQS的间隔,注意这里不包含twpre1的时间,通过配置MR1实现。 twpre1: 在发送写数据之前,W…

B1039 PAT乙级JAVA题解 到底买不买

小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果…

力扣HOT100之多维动态规划:62. 不同路径

这道题用二维dp数组来做相当简单,是一道入门题。直接上动规五部曲: 1.确定dp[i][j]的含义:从起点到位置为[i][j]处的路径总数 2.确定递推公式 dp[i][j] dp[i - 1][j] dp[i][j - 1]; 3.dp数组初始化 dp[0][j] 1;dp[i][0] 1; 4.确定遍历顺序…

css呼吸灯

效果图 只是简单的呼吸效果,您按照需求自己拓展即可。 代码 keyframes light{from{opacity: 1;}to{opacity: 0.2;}}使用 .view{animation-name: light;animation-duration: 1s;animation-timing-function: linear;animation-iteration-count: infinite;animation-…

AI入门——AI大模型、深度学习、机器学习总结

以下是对AI深度学习、机器学习相关核心技术的总结与拓展,结合技术演进逻辑与前沿趋势,以全新视角呈现关键知识点 一、深度学习:从感知到认知的技术革命 核心突破:自动化特征工程的范式变革 深度学习通过多层神经网络架构&#x…

python训练营打卡第42天

Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 作业:理解下今天的代码即可 1.回调函数 def handle_result(result):"""处理计算结果的回调函数"""print(f"计算结果是: {resul…

ISO18436-2 CATII级振动分析师能力矩阵

ISO18436-2021是当前针对针对分析师的一个标准,它对振动分析师的能力和知识体系做了4级分类,这里给出的是一家公司响应ISO18436的CATII级标准,做的一个专题培训的教学大纲。摘自: 【振動噪音產學技術聯盟】04/19-23 ISO 18436-2…

YARN应用日志查看

YARN应用日志查看 1、页面查看2、命令行查看1、页面查看 1.1、YARN ResourceManager Web UI Spark on YARN时,YARN的资源管理器(ResourceManager)和历史服务器(History Server)提供了强大的日志和监控功能,可以帮助用户查看和管理Spark作业 访问YARN ResourceManager的…

免费酒店管理系统+餐饮系统+小程序点餐——仙盟创梦IDE

酒店系统主屏幕 房间管理 酒店管理系统的房间管理,可实现对酒店所有房间的实时掌控。它能清晰显示房间状态,如已预订、已入住、空闲等,便于高效安排入住与退房,合理分配资源,提升服务效率,保障酒店运营有条…

29 C 语言内存管理与多文件编程详解:栈区、全局静态区、static 与 extern 深度解析

1 C 语言内存管理概述 1.1 内存分区模型解析 在 C 语言程序中,内存的合理管理是确保程序高效运行的核心。为了深入理解变量的作用域、生命周期及内存分配机制,我们需要先掌握内存分区模型。C 语言将内存划分为以下几个核心区域: 栈区&#…

JavaScript 性能优化实战:从原理到框架的全栈优化指南

在 Web 应用复杂度指数级增长的今天,JavaScript 性能优化已成为衡量前端工程质量的核心指标。本文将结合现代浏览器引擎特性与一线大厂实践经验,构建从基础原理到框架定制的完整优化体系,助你打造高性能 Web 应用。 一、性能优化基础&#x…

2025年十大AI幻灯片工具深度评测与推荐

我来告诉你一个好消息。 我们已经亲自测试和对比了市面上最优秀的AI幻灯片工具,让你无需再为选择而烦恼。 得益于AI技术的飞速发展,如今你可以快速制作出美观、专业的幻灯片。 这些智能平台的功能远不止于配色美化——它们能帮你头脑风暴、梳理思路、…

MATLAB 安装与使用详细教程

目录 第一部分:MATLAB 安装教程第二部分:MATLAB 界面介绍第三部分:MATLAB 基础使用第四部分:MATLAB 脚本编程第五部分:MATLAB 编程示例 第一部分:MATLAB 安装教程 1 下载 MATLAB 安装文件 访问 MathWor…

【C++进阶篇】C++11新特性(上篇)

💡 解锁C11新技能:初始化、类型推导与智能指针的奥秘! 一. C11简介1.1 C11发展历史 二. 初始化列表2.1 内置类型2.2 initializer_list详解 三. 简化声明3.1 auto 自动推导类型3.2.1 注意事项 3.3 decltype 获取推导类型3.3.1 没有括号3.3.2 有…

Unity中应对高速运动的物体,碰撞组件失效的问题?

尝试方法一:修改重力组件Rigidbody中的碰撞检测模式Collision Detection 把碰撞检测模式Collision Detection属性修改成Continuous Dynamic后,发现效果不是很明显,还会有碰撞组件失效的问题。 尝试方法二:射线检测替代物理碰撞 private Vector3 _prevPos;void Start() {…

高性能MYSQL(三):性能剖析

一、性能剖析概述 (一)关于性能优化 1.什么是性能? 我们将性能定义为完成某件任务所需要的时间度量,换句话说,性能即响应时间,这是一个非常重要的原则。 我们通过任务和时间而不是资源来测量性能。数据…

《深入解析SPI协议及其FPGA高效实现》-- 第二篇:SPI控制器FPGA架构设计

第二篇:SPI控制器FPGA架构设计 聚焦模块化设计、时序优化与资源管理 1. 系统级架构设计 1.1 模块化硬件架构 verilog module spi_controller (input wire clk, // 系统时钟 (100 MHz)input wire rst_n, // 异步复位// 配置接口…

rabbitmq Fanout交换机简介

给每个服务创建一个队列,然后每个业务订阅一个队列,进行消费。 如订单服务起个多个服务,代码是一样的,消费的也是同一个队列。加快了队列中的消息的消费速度。 可以看到两个消费者已经在消费了

Ⅱ.计算机二级选择题(运算符与表达式)

【注:重点题以及添加目录格式导航!!!】 【重点题】(第5题) 【重点题】(第18题) 【重点题】(第19题) 【重点题】(第35题) 【重点题】&a…

使用Mathematica观察多形式根的分布随参数的变化

有两种方式观察多项式的根随着参数变化:(1)直接制作一个小的动态视频;(2)绘制所有根形成的痕迹(locus)。 制作动态视频: (*Arg-plane plotting routine with plotting …