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

Linux_Ext系列文件系统基本认识(一)

18fde01fee5e4278981004762ce48cc4.png

✨✨ 欢迎大家来到小伞的大讲堂✨✨

🎈🎈养成好习惯,先赞后看哦~🎈🎈

所属专栏:LInux_st
小伞的主页:xiaosan_blog

制作不易!点个赞吧!!谢谢喵!!

1. 硬件认识

机械磁盘作为计算机中唯一的一个机械设备,虽然他的访问速度慢于机械硬盘,但因其容量大,价格便宜,被服务器所选中。

1.1 磁盘物理结构

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

如何定位一个扇区呢?

  1. 可以先定位磁头 (header)
  2. 确定磁头要访问哪一个柱面(磁道)(cylinder)
  3. 定位一个扇区(sector)
  4. CHS地址定位

  • 扇区是从磁盘读出和写入信息的最小单位,通常大小为512字节。
  • 磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头
  • 磁道(track)数:磁道是从盘片外圈往内圈编号0磁道,1磁道...,靠近主轴的同心圆用于停靠磁头,不存储数据
  • 柱面(cylinder)数:磁道构成柱面,数量上等同于磁道个数
  • 扇区(sector)数:每个磁道都被切分成很多扇形区域,每道的扇区数量相同
  • 圆盘(platter)数:就是盘片的数量
  • 磁盘容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数

1.2 磁盘的逻辑结构

磁带上面可以存储数据,我们可以把磁带“拉直”,形成线性结构

逻辑上我们可以把磁盘想象成一卷磁带

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

某一磁道展开,如一维数组

当我们将磁道展开,如二维数组

在柱面上的磁道,扇区个数是一样的

当柱面展开,就组成了多维数组

寻址一个扇区:先找到哪一个柱面(Cylinder),在确定柱面内哪一个磁道(其实就是磁头位置,
Head),在确定扇区(Sector),所以就有了CHS。

我们之前学过C/C++的数组,在我们看来,其实全部都是一维数组:

每一个扇区都有一个下标,我们叫做LBA(LogicalBlockAddress)地址,其实就是线性地址。

那我们如何找到LBA地址呢,我们需要通过CHS地址转化成LBA,CHS转换LBA地址,这是有硬件本身磁盘来做的

1.3 CHS&&LBA地址

CHS转成LBA:

  • 磁头数*每磁道扇区数=单个柱面的扇区总数
  • LBA=柱面号C*单个柱面的扇区总数+磁头号H*每磁道扇区数+扇区号S-1
  • 即:LBA=柱面号C*(磁头数*每磁道扇区数)+磁头号H*每磁道扇区数+扇区号S-1
  • 扇区号通常是从1开始的,而在LBA中,地址是从0开始的
  • 柱面和磁道都是从0开始编号的
  • 总柱面,磁道个数,扇区总数等信息,在磁盘内部会自动维护,上层开机的时候,会获取到这些参数。

LBA转成CHS:

  • 柱面号C=LBA//(磁头数*每磁道扇区数)【就是单个柱面的扇区总数】
  • 磁头号H=(LBA%(磁头数*每磁道扇区数))//每磁道扇区数
  • 扇区号S=(LBA%每磁道扇区数)+1
  • "//":表示除取整

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

2.文件系统

2.1 "块"概念

当操作系统读取硬盘数据,并不会一个个扇区读取,这样效率太低,而是通过连续读取多个扇区,即被称为“快”

硬盘的每个分区是被划分为一个个的”块”。一个”块”的大小是由格式化的时候确定的,并且不可
以更改,最常见的是4KB,即连续八个扇区组成一个”块”。”块”是文件存取的最小单位。

注意:

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

2.2 “inode”概念

文件=数据+属性,当我们用ls -l 除了能看到文件名,还能看到文件属性

-rwxr-xr-x. 1 root root 7438 "9⽉ 13 14:56" a.out
-rw-r--r--. 1 root root 654 "9⽉ 13 14:56" test.c

每行包含7列:

  • 模式
  • 硬链接数
  • 文件所有者
  • 大小
  • 最后修改时间
  • 文件名

ls -l 读取存储在磁盘上的文件信息,然后显示出来

其实这个信息除了通过这种方式来读取,还有一个stat命令能够看到更多信息

[root@localhost linux]# stat test.cFile: "test.c"Size: 654 Blocks: 8 IO Block: 4096 普通⽂件
Device: 802h/2050d Inode: 263715 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-09-13 14:56:57.059012947 +0800
Modify: 2017-09-13 14:56:40.067012944 +0800
Change: 2017-09-13 14:56:40.069012948 +0800

到这我们要思考一个问题,文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存
文件的元信息(属性信息),
比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。

  • Linux下文件的存储是属性和内容分离存储的
  • Linux下,保存文件属性的集合叫做inode,一个文件,一个inode,inode内有一个唯一的标识符,叫做inode号
  • 文件名属性并未纳入到inode数据结构内部
  • inode的大小一般是128字节或者256,我们后面统一128字节
  • 任何文件的内容大小可以不同,但是属性大小一定是相同的
http://www.xdnf.cn/news/1167985.html

相关文章:

  • Fluent许可与网络安全策略
  • 【洛谷】用两个数组实现静态单链表、静态双向链表,排队顺序
  • 【C语言进阶】动态内存管理(1)
  • 赋能未来数学课堂——基于Qwen3、LangChain与Agent架构的个性化教辅系统研究
  • Vue + WebSocket 实时数据可视化实战:多源融合与模拟数据双模式设计
  • vscode目录,右键菜单加入用VSCode打开文件和文件夹(快速解决)(含删除)(脚本)
  • 华为服务器操作系统openEuler介绍与安装
  • 信息学奥赛一本通 1553:【例 2】暗的连锁
  • C++_Hello算法_队列
  • Grails(Groovy)框架抛出NoHandlerFoundException而不是返回404 Not Found
  • Android-API调用学习总结
  • 专题 前端面试知识梳理大全
  • Leetcode题解:209长度最小的子数组,掌握滑动窗口从此开始!!!
  • Android13重置锁屏(1)
  • 碰一碰发视频源码搭建:支持OEM
  • 现在希望用git将本地文件crawler目录下的文件更新到远程仓库指定crawler目录下,命名相同的文件本地文件将其覆盖
  • 【Tomcat】Tomcat线程池深度调优手册(终极版)
  • 用USBi仿真器的SPI模式和IIC模式来调试DSP应该怎么做?
  • Vue项目中的AJAX请求与跨域问题解析
  • Linux CentOS 虚拟机升级内核至4.x以上版本
  • 异构融合 4A:重构高性能计算与复杂场景分析的安全与效率边界
  • Go 的第一类对象与闭包
  • Vercel AI SDK 3.0 学习入门指南
  • 厚铜板载流革命与精密压合工艺——高可靠性PCB批量制造的新锚点
  • 容器化部署 Tomcat + MySQL 实战指南:从入门到进阶
  • 分布式高可用ELK平台搭建及使用保姆级教程指南
  • 智能制造——解读52页汽车设计制造一体化整车产品生命周期PLM解决方案【附全文阅读】
  • linux用户态各定时器抖动测试
  • 操作符练习
  • 【Linux内核模块】模块声明与描述