当前位置: 首页 > news >正文

Linux文件系统----磁盘级文件

系统中不是所有文件都被打开了,实际上大部分文件都没被打开,没有被打开的文件保存在磁盘,SSD中,操作系统需要管理磁盘中的文件,使得让其快速定位到一个文件。

1.磁盘的简单构成

        磁盘主要是一个磁头加一个盘片组成,一个磁头对应一个盘片,利用磁头可以在盘片上读取和写入,磁头读取时盘面高速移动,所以磁头不能贴着盘片,否则磁头会磨损盘片导致盘片受损,如果受损的是储存的重要的文件区域会导致文件无法被读取,但是磁头与盘片的距离极近,(就像本该在在万米高空飞行的飞机,现在在距离地面1m位置低空飞行)盘片中有数百万个小磁铁,它们的作用就是用来储存信息,这些磁铁的南北极被规定为二进制的01,磁头修改磁极来改变01二进制序列,进而存储文件。

2.磁盘的物理存储

如果想访问磁盘中的一个扇区:

通过磁头定位:
1.在哪个磁道/柱面 (哪个圆环)cylinder
2.在哪个磁头(哪个盘片)head
3.在哪个扇区 (哪个最小单位)sector

以上就是CHS定位法

找到了扇区就可以进行读写数据 ,任何文件都是由多个扇区组成,可以通过标记一些扇区,从而找到一个文件。

3.磁盘的逻辑存储

根据CHS定位法

sector/单盘扇区个数 = 在哪个盘面上 H
sector%单盘扇区个数 = temp
temp/一个磁道上的扇区的个数 = 在特定盘面的哪一个磁道 C
temp%一个磁道上扇区的个数 = 在特定磁道的哪个扇区 S

只需要知道磁盘总容量,有多少个盘面,每个盘面上有多少个磁道,每个磁道上有多少个扇区,知道某个文件的线性地址就能找到该文件具体的扇区

一次和磁盘IO一个扇区(512B)太小了,OS设定IO的基本单位是4KB,即一次与磁盘IO 8个扇区这就是LBA:Logical Block Address 逻辑块地址,这样在操作系统中对硬盘进行管理转化成对4KB数据块进行管理。


考虑一个800GB的硬盘,直接管理起来太麻烦,所以进行分区管理,而一个分区就是一个文件系统。(例如:笔记本电脑上的C盘,D盘,F盘,就是操作系统进行的分区处理)。

而对于分区的100GB,还可以继续进行分组处理,从而划分成更小的区域(例如10GB),方便更好的管理,这样一个分区就分成了许多组进行管理,这样以一个组为例,探究出一个组的构造,就弄清了整个硬盘的大致结构。

 以一个组为例

linux磁盘文件特性:
文件=内容+属性

Linux系统中内容和属性分开存储。
内容的大小不确定,可能很大也可能很小。
属性的大小固定,属性的类型是一样的,但属性的内容不一样。

系统中,标识一个文件,用的不是文件名,而是inode,文件的属性用一个结构体类型来描述,称为inode,这个结构体大小为128B。

一个文件在一个分区内只有唯一的inode,在不同分区可以有重复相同的inode。

struct inode(128字节)
{
	类型
	大小
	权限
	类型
	……
	inode编号//用来区分文件的唯一性,每个分区内唯一
}

一个数据块有4KB/128byte = 32个inode,注意文件名不属于文件属性


inode table

i节点表(inode table):存放文件属性,如文件大小,文件所有者,最近修改时间等。

inode Bitmap

inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。

比特位的位置:第几个inode。

比特位的内容:表示该inode是否被使用(01区分)。


Date Block

数据区(date block):存放文件内容。

Block Bitmap

块位图(Block Bitmap):记录着dateblock中哪个数据块被占用,哪个数据块没有被占用。

比特位的位置:第几个块。

比特位的内容:表示该块是否被使用(01区分)。


文件属性inode与文件数据内容block是如何关联的?

struct inode(128字节)//在结构体中实际上,有一个block成员变量,记录着文件的数据的位置
{
	……
	int block[15];
	……
}

在inode结构体上,有一个block成员变量,记录着文件的数据的位置。

关于block数组

block数组只有15个空间,只能储存15个数据块编号,15×4KB=60KB,也就是说文件最大只有60KB?显然不是,他的存储规则是这样的。通过这种方式储存数据就能使文件大很多。

每一个分组都规定一个起始inode的编号,而每一个分组中都有独立的inode位图,起始inode编号+inode位图中的偏移量,就是文件的inode编号。如下所示

通过inode编号查找一个文件

(根据inode编号确定分组和该分组中inode位图的位置)

给定一个文件的inode编号,先确定文件在哪个组里面,直接对比每个分组的起始编号,看文件编号位于哪两个起始inode编号之间,就可以确定分组,然后用inode编号减去该分组的起始inode编号,得到该文件在该分组的inode位图的位置(偏移量)。


Group Descriptor Table

块组描述符(Group Descriptor Table):描述块组属性信息,就是对分组进行管理。

Super Block

超级块(Super Block):存放文件系统本身的结构信息,就是对分区进行管理。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。

Super Block管理整个分区,Super Block的信息被破坏,整个分区整个文件系统结构就被破坏了。每个分组不是都有Super Block,只有个别分组有Super Block,它们的信息都是一致的,这样当一个分组的Super Block坏掉时,还有其他分组的Super Block来代替,提高了文件系统的容错性。

操作系统只需要管理Super Block,就管理了所有的分区(文件系统)。

解释一些问题

格式化的本质:向指定分区,写入全新的文件系统。

关于文件名

目录是文件,那么目录有目录的属性(属性里面有inode编号)+目录的内容,内容是什么,目录的内容存放着文件名与inode编号的映射关系。

如果一个目录权限没有 r , w , x表现是什么?

没有w:就无法在目录中创建/删除文件。(因为文件名与inode编号的映射关系无法写入目录内容,也无法删除)。

没有r:就无法查看目录中的文件。(ls指令无法在当前目录下使用)。

所以找任何一个文件都要从根目录开始查找,而且该文件所属的一系列目录的权限必须是可读权限。在Linux打开的路径会进行缓存,dentry路径缓存,所以查找操作文件时往往不需要,从根目录把所有的目录名输入来进行查找操作文件,只要 . / 文件名,操作系统会进行自动拼接路径。

查找一个文件,在内核中,都要逆向的递归般得到/,从根目录进行路径解析。

访问一个文件,可以根据路径前缀,优先区分出文件在哪一个分区。

结论:对一个文件,进行增删查改,都和文件所处的目录有关!

查找打开一个文件

首先给出文件路径和文件名,在该文件所属的目录下,在目录的内容里找到映射关系(即通过文件名找到文件的inode编号)然后通过inode编号查找一个文件。

删除一个文件

首先给出文件路径和文件名,在该文件所属的目录下,在目录的内容里找到映射关系(即通过文件名找到文件的inode编号)。

找到这个文件的inode后,在inodeBitmap中将1变成0,在inodetable中找到对应文件的属性,从而找到block Bitmap数据的位置然后将对应的block的1变成0。(只要把文件对应的inode位图与block位图置成0即可,数据并没有被删除)。

拓展:

一个被写入文件系统的分区,要被Linux使用,必须要先把这个具有文件系统的分区进行“挂载”,一个文件系统所对应的分区可以挂载到相应的目录里。

Linux中的根目录以外的文件要想被访问,需要将其“关联”到根目录下的某个目录来实现,这种关联操作就是“挂载”,这个目录就是“挂载点”,解除次关联关系的过程称之为“卸载”。

在Linux中使用mount命令来附加文件系统和可移动设备,例如USB闪存驱动器。大多数 Linux 发行版的默认文件系统是 ext4。我们还可以使用unmount命令卸载文件系统。

结论:分区的访问,都是通过所挂载的路径访问的。

相关文章:

  • 《GNU/Linux Shell命令全解析》
  • CSS背景属性
  • python——GUI图形用户界面编程
  • MySQL主从服务器配置教程
  • 【C++】模板初阶和STL简介
  • Linux提权之metasploit 提权(五)
  • 登录-07.JWT令牌-登录后下发令牌
  • 编程题-连接两字母单词得到的最长回文串(中等)
  • 从网络基础到安全防护:网安运维小白的入门学习路线
  • python-静态方法和类方法
  • 蓝桥杯训练题目(一)—— 难度:简单(除了最后一题哈)
  • 《Python实战进阶》专栏 No 4:高效、简洁、强大之使用 FastAPI 构建高性能异步API
  • 请简述一下Prefab(预制体)的本质是什么?
  • 大白话TypeScript第三章高级特性学习
  • 使用Socket编写超牛的http服务器和客户端(一)
  • L1-6 剪切粘贴(字符串增删查改)
  • INTJ人格的本质
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter21-错误处理与调试
  • Linux 命令大全完整版(12)
  • apply的用法
  • 2025年度人大立法工作计划将公布:研究启动法律清理工作
  • 韩国检方起诉前总统文在寅
  • “2025未来地球:科学与应用大会”在江西景德镇开幕
  • 最大涨幅9800%!金价新高不断,引发期权“末日轮”效应,沪金期权多张合约大涨
  • 日方炒作中国社会治安形势不佳,外交部:政治操弄意图明显
  • GDP增长4.1%,一季度广东经济数据出炉