[Linux]文件系统

本文以ext2文件系统进行讲解演示,ext2是一个很老的文件系统,现在并不常见,不过作为示例用来增强对底层的理解是足够的

粗略模型

从操作系统层面来说,一个Linux文件系统有且仅有一个磁盘,操作系统会先对磁盘进行分区,然后在对区进行分组,1个组中有多个内存块,用来存放文件的属性和文件的内容

文件在自己所在区中会有一个唯一标识符(inode)

详解组模型(Block Group)

一个组由5-6部分组成,为了便于理解我们倒着向前来解释这五六个元素是做什么的

  • Data blocks 整个组里空间最大的一部分,用来存放整个组里全部的文件的内容,内含大量的小数据块(一般4KB一个数据块),仅用来存放文件的数据,如果我们写一份c程序,全部代码就存在这个位置
  • inode Table 文件属性表,用来存放整个组里全部的文件的属性,大小是固定的,内部有一个data_block数组,指向文件使用的Data block,内部有一个整型inode,是文件的标识符,从代码角度来说,这是一个inode结构体数组
  • inode bitmap inode table的位图,一个比特位对应一个inode结构体是否为空
  • Block bitmap Data blocks的位图,一个比特位对应一个内存块是否为空
  • GDT 块组描述符,描述块组,内部存放诸如有多少inode结构体是空的,有多少数据库是空的
  • Super Block 超级块,存放本分区信息,与整个磁盘的安全有关,如果整个分区受到损毁,可以通过其进行恢复,并不直接参与管理组信息,并非每个组都有,而是隔三岔五有一个

区模型

相比之下区模型要简单许多

  • Boot Block 启动块,在分区的那一刻起大小不再发生变化,如果后续受到损坏,可有组里的Super Block恢复
  • Block group 组,详见上文

其他

inode,inode结构体与文件名

inode结构体是操作系统内核的一个c语言结构体,内部存储文件属性,如权限,修改时间,拥有者等,每个文件都有一个对应的inode

inode结构体里有一个整型变量叫,inode结构体里没有文件名

inode是所在分区的文件唯一标识符
Q:为什么能通过文件名来找到文件

A:文件名与inode的关系存放在该文件所在的目录文件的内容里

下载,删除与格式化

  1. 下载 : 不断地提供数据块,对数据块进行遍历修改
  2. 删除 : 将内存块位图置空
  3. 格式化 : 相当于直接将磁盘的系统进行删除重构

显然操作同样大小的数据速度:格式化 > 删除 > 下载

相关推荐
数据工匠老o13 分钟前
连接池配置实战——从“连不上“到“连太多“的完整排查指南
数据库
wenzhangli724 分钟前
oodAgent 4.0 Skills分布式调度 — 从Code Agent实战看自主维护的Agent网络
运维·网络·人工智能·自动化
做个文艺程序员39 分钟前
Linux第12篇:性能监控与瓶颈分析——CPU/内存/IO/网络全维度
linux·运维·网络
K姐研究社1 小时前
OiiOii 2.0 实测 – 智能画布实现 AI 视频创作自动化
运维·人工智能·自动化
一只专注api接口开发的技术猿1 小时前
电商评论自动化监控与情感数据分析完整落地教程(附可直接运行 Python 代码)
大数据·数据库·python·数据分析·自动化
hh真是个慢性子1 小时前
GaussDB Inside 2.23.01.280 集中式一主一备安装
数据库·database·gaussdb·国产数据库·高斯
沉静的小伙1 小时前
Spring事务
java·数据库·spring
HAPPY酷1 小时前
【ROS2】 Conda 环境搭建(命令行版)
linux·运维·python·ubuntu·机器人·conda
大侠锅锅1 小时前
第 3 篇:节点自动化纳管——从裸机到可管理的 7 步安装流水线
数据库·自动化·边缘计算·iot
笃行3501 小时前
踩坑实战 | MySQL/PostgreSQL 迁移必踩:LEFT JOIN 莫名丢数据,KES 外连接消除避坑指南
数据库