【Linux】Ext系列文件系统

回顾:

基础IO:被打开的文件都存在内存

磁盘:没有被打开的文件

目录

理解硬件

文件系统

Rxt2文件系统

软硬链接


理解硬件

1、CHS:定位一个扇区的方法:C柱面、H磁头、S扇区

其实也就是3个下标。C找到磁道,H找到盘面,一个盘对应两个面,S找到当前磁道的扇区。

柱⾯(cylinder)数:磁道构成柱⾯,数量上等同于磁道个数。

磁头(head)数:每个盘⽚⼀般有上下两⾯,分别对应1个磁头,共2个磁头。

扇区(sector)数:每个磁道都被切分成很多扇形区域,每道的扇区数量相同。

2、逻辑抽象:把磁盘看成线性结构

3、LBA(Logical Block Address):逻辑块地址,把CHS抽象为一维数组

磁盘内部用LBA,而不用CHS地址。磁盘的抽象是以柱面 为基本单位的,也就是一维数组

4、OS只需要使⽤LBA就可以了!! LBA地址转成CHS地址,CHS如何转换成为LBA地址。谁做啊??磁盘 ⾃⼰来做!

操作系统用LBA地址,从现在开始,磁盘就是⼀个元素为扇区的⼀维数组,数组的下标就是每⼀个扇区的LBA地址。OS使用磁盘,就可以用⼀个数字访问磁盘扇区了。

最终只要告诉磁盘一个512B的数据,以及这个扇区的LBA,系统就可以把数据写到磁盘中去了,系统可以写多个扇区,因此就可以实现对磁盘的写操作了。

文件系统

1、系统读取磁盘不是每一次读取一个扇区的,而是一个"块",一个块=4KB=8个扇区

  • 知道LBA:块号=LBA/8
  • 知道块号:LAB=块号*8+n.(n是块内第⼏个扇区)

Rxt2文件系统

1、文件系统是以分区为单位的

2、一个数据块的大小是4096

3、Block Group(块组):文件系统的 "管理单元"

每个块组是文件系统的最小管理单元,包含以下核心组件(以 EXT2 为例,大小是固定 / 按配置的):

  • Super Block(超级块) :记录整个文件系统的信息(总块数、空闲块数、块组数量等),大小是1 个数据块(通常 1KB/4KB),有的块组会备份一份,因为要是这个管理信息出问题了,那么整个300GB的D盘可能就出问题了,所以需要多个块组备份这部分信息。
  • GDT(块组描述符表) :记录每个块组的状态(比如该块组的空闲块数),大小通常是1 个数据块。目前的inode占比多少,data block占比多少,从哪起始从哪儿结束等信息需要GDT再去描述。
  • Block Bitmap(块位图) :用 "位" 记录该块组内哪些数据块是空闲的(1 位对应 1 个数据块),大小是1 个数据块(比如 1KB 的位图可以管理 8192 个数据块)。
  • inode Bitmap(inode 位图) :用 "位" 记录该块组内哪些 inode 是空闲的,大小是1 个数据块
  • inode Table(inode 表) :存放该块组内所有文件的 inode(文件元数据),每个 inode 大小是128 字节 / 256 字节(EXT2 默认 128 字节),一个块组的 inode 表通常占多个数据块。inode编号以分区为单位,整体划分,不可跨分区
  • Data Blocks(数据块) :实际存储文件内容的地方,每个数据块大小是1KB/2KB/4KB(用户可配置,EXT2 默认 1KB)。B lock 号按照分区划分,不可跨分区

4、格式化其实就是清除管理信息。

5、

实际磁盘没有目录,只是操作系统在内存构建一个目录,实际只有inode,目录也是inode 。访问过的目录构建成一个多叉树,访问的越多,后续就越快了。

6、挂载分区:怎么知道inode在哪个分区?

分区一定是被挂载到某个路径下的,所以比如code.c文件的目录前缀里面,一定有分区挂载的目录,这样就知道这个文件是在哪个分区里面的了。

7、inode和datablock映射(弱化)

  • 1 个文件 ↔ 1 个 inode :这是固定的,inode 是文件的唯一 "身份证";
  • 1 个 inode ↔ N 个 data block:N 的大小取决于文件大小,小文件 N=1,大文件 N 可以是成千上万。

例子:

一个 10MB 的文件,块大小 4KB:

  • 需要 10MB ÷ 4KB = 2500data block
  • inode 的 12 个直接指针用掉 12 个块;
  • 剩下的 2500-12=2488 个块,靠一级间接指针就能覆盖(因为一级间接能管 1024 个块,不够的话再用二级);
  • 最终,这个文件的 2500 个 data block 的位置,全记录在同一个 inode
  • a block 的位置,全记录在同一个 inode 里。

8、文件内容分组保存:

万一一个分组下存不下一个大文件,也就是说一个Block Group里面的Data Block可能存不下这个文件的内容,那么可以存到另外一个Block Group里面去,也就是文件内容可以分组保存。

0、文件系统的总结

软硬链接

1、软链接

是一个独立的文件,因为他有独立的inode number。软连接相当于windows下的快捷方式。

为啥需要软链接?当要运行的文件不在当前目录下时,需要运行别的目录下的.c文件,需要加一大堆前缀,那么直接在当前目录下创建别的目录下的.c文件的软连接后,可以直接在当前目录下./软链接名去运行别的目录下的文件。

软连接保存目标文件的路径!

2、硬链接

不是独立的文件。但可以对文件进行备份

cd ./.. 这个./..就是硬链接

3、

硬链接不能给目录建立,软链接可以。为什么?因为要是可以的话,那么用户可以给每个目录建立指向根目录的硬链接,最终导致目录变为环状结构,所以不能。但是那为啥./..也是硬链接呢,这个是Linux对这俩做了特殊处理,只是方便命令的执行。

相关推荐
OliverH-yishuihan3 小时前
开发linux项目-在 Windows 上 基于“适用于 Linux 的 Windows 子系统(WSL)”
linux·c++·windows
南棱笑笑生4 小时前
20251224给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-6.1】系统时确认ssh服务【内置dropbear】
linux·c语言·ssh·rockchip
I · T · LUCKYBOOM4 小时前
30.Firewalld-Linux
linux·运维·安全
沙滩小绵羊4 小时前
Linux常见命令
linux·运维·服务器
驰羽4 小时前
NAT模式下VMware的虚拟机DNS解析失败的问题解决
linux·网络·dns
菜鸡00015 小时前
安装G2O
linux
誰能久伴不乏5 小时前
epoll 学习踩坑:`fcntl` 设置非阻塞到底用 `F_SETFL` 还是 `F_SETFD`?
linux·服务器·网络·c++·tcp/ip
来鸟 鸣间7 小时前
MIPI D-PHY 理解
linux·音视频·sensor·mipi
么么...7 小时前
在 Ubuntu 上安装 Docker 并部署 MySQL 容器
linux·运维·经验分享·笔记·mysql·ubuntu·docker