磁盘文件系统

文件分为被打开的文件和没有打开的文件

被打开的文件是放在内存里的

未打开的文件是放在磁盘里的

打开文件的前提是找到文件

找到文件则需要文件的路径

每一个文件都有其对应的路径

路径就是由磁盘文件系统进行管理的

磁道构成柱面,柱面构成磁盘

本质上是一个三维数组

磁盘就是一个以扇区为单位的一维数组

数组的下标就是每一个扇区的LBA地址

OS使用磁盘,就可以用一个数字访问磁盘扇区

OS和磁盘进行IO时,以扇区为基本单位,512字节,单次IO的数据量少

文件 = 内容 + 属性

属性也是数据,保存在结构体inode中

一个文件就有一个inode

inode值不重复

Linux中的文件内容和属性分开存储

磁盘是这样的

最后会划分成一个个block group

所以只要管理好一个个block group就可以了

文件系统里,以4kb来划分块

inode会保存和数据块之间的映射关系

找到inode后就能找到块

inode bitmap记录了data block中哪个数据块被占用了

新建一个文件

需要先分配inode

要分配inode,需要去inode bitmap上去查找一个没有被使用的数据块

然后将文件属性写入数据块

删除文件本质上是将文件对应的inode bitmap和block bitmap中的比特位由1变成0

就代表这个文件已经被删除了

被删除的文件是可以恢复的,只要拿到被删除文件的inode,然后将它的inode bitmap和block bitmap的比特位由0变成1,就可以了

当然前提是文件没有被覆盖成别的

但是要恢复还是很麻烦

在Linux中删除文件,本质是设置inode和block无效

后续很可能就会被占用

因此被删除的文件最好直接别动

ex2文件系统会根据分区的大小划为分数个block group

每个block group都由相同的结构组成

super block用来记录block和inode的总量,未使用的block和inode的数量

一个block和inode的大小等数据

super block记录分区block和inode的信息

因此不是所有的分组中都有super block

每几百组就会有一个super block

这些super block中的内容是相同的

文件系统

对于一个分区,它的每一个分组所对应的inode号的个数,block个数都是固定的

可能存在inode全部用完,但是block还没有用完的情况

关于inode

inode是以分区为单位的一套inode

inode在分配的时候,只需要确定起始的inode即可

关于block

块号也是统一编号的,也是一套

每一个组里也只需要确认block起始块号即可

inode的block数组分为12个直接映射和3个间接索引

block数组下标中的前12位是直接映射,里面就是文件的内容

剩下的三个则分别指向别的块

剩下三个间接索引指向的块不存文件的数据,存储其他的块号

存储的块号存储文件的内容

文件的大小是有限的

如何理解目录文件

目录 = inode + datablock = 属性 + 内容

因此目录也有对应的数据块

目录的数据块存储的是:文件名和inode的映射关系

要找到文件名,首先要打开当前目录

而当前目录也是文件,也有文件名

因此需要进行逆向的路径解析

如果要访问相同路径下的不同文件

本质还是重新从根目录进行路径解析

但是这样效率太低了

因此Linux系统要对路径进行缓存,来减少重复路径解析的消耗

Linux会以多叉树的形式进行路径缓存

在Linux中如果存在多个分区

一定存在一个分区包含根目录

同时存在若干个普通目录

若只有分区,该分区是无法使用的

分区必须挂载到目录上,分区才能够被通过路径的方式进行访问

dd命令

是以二进制的形式在磁盘中形成文件

相关推荐
l1t17 小时前
DeepSeek总结的从 Crunchy PGO 迁移到使用 CloudNativePG 管理的 PostgreSQL 18
数据库·postgresql
陈陈CHENCHEN18 小时前
【Linux】Rsync + Inotify 实时文件同步案例
linux·运维·服务器
夜雪闻竹18 小时前
Claude Code 对话自动导入完全指南
数据库·数据挖掘·copilot
xhbh66618 小时前
光纤端口映射完全教程:光猫虚拟服务器配置+免费穿透工具实战
运维·服务器·网络·智能路由器·端口映射·流量端口转发·ssh端口转发
初雪云18 小时前
让安卓发版再简单一点,体验一键自动化发布
android·运维·自动化
charlie11451419118 小时前
嵌入式Linux嵌入式Linux驱动开发:设备树驱动改造——从硬编码到设备树的实战之旅
linux·运维·驱动开发
云祺vinchin18 小时前
云祺x鼎捷,为制造企业ERP打造双保险
数据库·安全·制造
Hoxy.R18 小时前
银河麒麟 V10 离线安装 s3cmd 踩坑记录+存储负载均衡测试
linux·运维·华为·存储
我滴老baby18 小时前
2026年AI Agent将走向何方?十大趋势深度解析:从多模态融合到自主决策,从端侧部署到具身智能,提前布局下一个万亿级市场
数据库·人工智能·知识图谱
AC赳赳老秦19 小时前
OpenClaw与思维导图工具联动:自动生成工作规划脑图、拆解任务节点,适配职场管理
java·大数据·服务器·数据库·python·php·openclaw