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

Ext文件系统

文件=内容+属性

被打开的文件在内存中,没有被打开的文件在磁盘里文件系统的工作就是根据路径帮我们找到在磁盘上的文件

磁盘(硬件)

磁盘的存储结构

磁头在传动臂的运动下共同进退,向磁盘写入的时候是向柱面批量写入的

OS文件系统访问磁盘不以扇区为单位,而是以块为单位,一般是4KB(连续8个扇区),(可以调整)

磁盘的存储结构

扇区是磁盘存储数据的基本单位,512字节,块设备

定位一个扇区,可以先定位磁头,确定磁头要访问的柱面/磁道,再定位扇区

CHS地址定位     柱面(cylinder),磁头(head),扇区(sector)    数据定位

扇区是从磁盘读写信息的最小单位,通常大小为512字节

磁头数:每个盘片一般有上下两面,共两个

磁道数:磁道是从盘片外圈往内圈编号。靠近主轴的同心圆用于停靠磁头,不存储数据

柱面数:磁道构成柱面 柱面数=磁道数

扇区数:每个磁道的扇区数相等

圆盘数:盘片的数量

磁盘容量=磁头数*磁道数*每磁道扇区数)每扇区字节数

磁盘的逻辑结构

逻辑上我们可以把磁盘想象成磁带,磁盘的逻辑存储结构我们可以类似于数组

这样每一个扇区就有了一个线性地址(数组下标),这种地址也叫LBA(线性地址)

相同半径的磁道逻辑上构成柱面,逻辑上磁盘整体是由柱面卷起来的

柱面展开

CHS 和LBA

CHS -> LBA

LBA = 柱⾯号C*(磁头数*每磁道扇区数) + 磁头号H*每磁道扇区数 + 扇区号S - 1
扇区号通常是从1开始的,⽽在LBA中,地址是从0开始的
柱⾯和磁道都是从0开始编号的

LBA -> CHS

柱⾯号C = LBA // (磁头数*每磁道扇区数)【就是单个柱⾯的扇区总数】

磁头号H = (LBA % (磁头数*每磁道扇区数)) // 每磁道扇区数
扇区号S = (LBA % 每磁道扇区数) + 1
"//": 表⽰除取整

磁盘使用者直接使用LBA地址

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

文件系统

硬盘是"块"设备

连续8个扇区组成一个块,块是文件存取村的最小单位

一个块的大小是在格式化的时候确定的,不可以更改,最常见的是4KB

磁盘就是⼀个三维数组,我们把它看待成为⼀个"⼀维数组",数组下标就是LBA,每个元素都是扇区
每个扇区都有LBA,那么8个扇区⼀个块,每⼀个块的地址我们也能算出来。
LBA:块号 = LBA/8
块号:LAB=块号*8 + n. (n是块内第⼏个扇区)

分区

分区是对硬盘的一种格式化

windows方向看,磁盘分为CDE盘,CDE就是分区

柱面是分区的最小单位

只要知道每个分区的起始和结束柱⾯号,知道每 ⼀个柱⾯多少个扇区,那么该分区多大,解释LBA是多少也就清楚了

inode

文件=内容+属性

Linux中,内容和属性是分开存储的,任何正常文件都要有自己的属性集合

struct inode

{

  type

  size

  pri

  ...

};

文件的属性大小是一样的,128字节

文件名属性并没有在inode数据结构里

ext2 文件系统

我们想在硬盘上存储文件,必须先把硬盘格式化为某种格式的文件系统才能存储文件。文件系统的目的就是组织和管理硬盘中的文件

ext2是最常见的文件系统,ext2文件系统将整个分区划分成若干个同样大小的块组,只要能管理一个分区就能管理所有分区,也就能管理所有磁盘文件

ext2文件系统会根据分区的大小换份我数个Block Group,每个Block Group都有相同的结构组成

数据区:存放文件内容,也就是一个一个的Block

对于普通文件,文件的数据存储在数据块中

对于目录,该目录下的所有文件名和目录名存储在所在目录的数据块中,除了文件名以外,看到的其他信息保存在该文件的inode中

inode编号以分区为单位,整体划分,不可以跨分区

Block号按照分区划分,不可跨分区

目录与文件名:

目录也是文件,但是磁盘上没有目录的概念,只有文件内容+属性

目录的属性的内容保存的是文件名+inode号的映射关系

Filename: tmp, Inode: 1179650
917505 drwxr-xr-x 3 root root 4096 May 6 14 : 37 opt

访问文件必须打开当前目录,根据文件名获得对于的inode号,然后进行文件访问

软硬链接

找到磁盘上文件的不是文件名而是inode

软链接(类似快捷方式)是独立文件,因为他有独立的inode 

硬链接(对文件进行备份)只是文件名和目标文件inode的映射关系,不是一个独立的文件,因为他没有独立的inode

eg: . 和 ..

硬链接只能给普通文件进行建立,Linux系统不支持给目录建立硬链接,但  . 和 .. 本质就是对目录的硬链接。所以是不允许用户给目录建立硬链接,但是OS自己可以

用户自己给目录建立硬链接容易形成路径环问题

. 和 .. 名字特殊,做特殊处理即可,方便命令行操作

但是可以对目录建立软链接

http://www.lryc.cn/news/531940.html

相关文章:

  • 回溯算法---数独问题
  • 蓝桥杯python基础算法(2-1)——排序
  • 【课程笔记】信息隐藏与数字水印
  • Page Assist实现deepseek离线部署的在线搜索功能
  • composeUI中Box 和 Surface的区别
  • 【LeetCode】5. 贪心算法:买卖股票时机
  • MySQL表的CURD
  • Java 如何覆盖第三方 jar 包中的类
  • VSCode中使用EmmyLua插件对Unity的tolua断点调试
  • 【数据结构】_链表经典算法OJ(力扣/牛客第二弹)
  • Spring Boot 2 快速教程:WebFlux优缺点及性能分析(四)
  • 自定义多功能输入对话框:基于 Qt 打造灵活交互界面
  • 基于springboot河南省旅游管理系统
  • LabVIEW图像采集与应变场测量系统
  • CommonAPI学习笔记-2
  • ISP代理与住宅代理的区别
  • [25] cuda 应用之 nppi 实现图像色彩调整
  • Java 大视界 -- Java 大数据在智慧文旅中的应用与体验优化(74)
  • PyTorch快速入门
  • 100.7 AI量化面试题:如何利用新闻文本数据构建交易信号?
  • CF 465B.Inbox (100500)(Java实现)
  • 微信小程序获取openid和其他接口同时并发请求如何保证先获取到openid
  • 实现动态卡通笑脸的着色器实现
  • DeepSeek R1 模型解读与微调
  • YOLOv11实时目标检测 | 摄像头视频图片文件检测
  • Node.js学习指南
  • 2.5学习总结
  • java进阶文章链接
  • vue2+vue3 HMCXY基础入门
  • 一次线程数超限导致的hive写入hbase作业失败分析