磁盘文件系统

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

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

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

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

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

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

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

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

本质上是一个三维数组

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

数组的下标就是每一个扇区的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命令

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

相关推荐
数据库知识分享者小北1 小时前
智能运维+多模型服务能力,阿里云 RDS AI 助手旗舰版正式上线!
运维·数据库·阿里云·阿里巴巴·rds·智能运维
zhangfeng11331 小时前
LLaMA-Factory 保存 checkpoint 时崩溃解决办法 OOM 内存溢出(不是显存)
运维·服务器·人工智能·深度学习·llama
YaBingSec1 小时前
玄机网络安全靶场:GeoServer XXE 任意文件读取(CVE-2025-58360)
java·运维·网络·安全·web安全·tomcat·ssh
m0_588758481 小时前
如何解决Oracle启动ORA-00119错误_网络服务名与listener相关性
jvm·数据库·python
PSLoverS1 小时前
MySQL如何利用防火墙限制MySQL端口_使用iptables或安全组防御
jvm·数据库·python
REDcker1 小时前
Webpack Rollup Vite三者构建对比详解 开发体验与选型考量
运维·webpack·devops
qq_414256571 小时前
Go语言如何用strings.Builder_Go语言strings.Builder教程【总结】
jvm·数据库·python
北极熊kw1 小时前
FreeBSD 安装 Xrdp 后,远程桌面时只显示白色终端 Xterm
linux·运维·服务器·rdp·freebsd·xterm
阿坤带你走近大数据1 小时前
Oracle-表空间temp
数据库·oracle