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

【Linux】磁盘存储+文件系统简介

目录

1、理解硬件

1.1 磁盘构成

1.2 CHS地址定位

1.3 磁盘的逻辑结构

1.3.1 理解过程

 1.3.2 真实过程

2、引入文件系统

2.1 引入“块的概念”

2.2 引入“分区”概念

2.3 了解分组细节


正文:

1、理解硬件

1.1 磁盘构成

磁盘由主轴马达、磁盘、磁头、磁头臂、永磁铁构成。如下图:

图中那面光滑的可以照镜子的圆盘就是磁盘,光滑的磁盘上其实有一圈一圈磁道,磁道又由一个一个扇区组成,每条磁道上扇区个数都是相同的。

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

如何定位⼀个扇区呢?
• 可以先定位磁头(header)
• 确定磁头要访问哪⼀个柱⾯(磁道)(cylinder)
• 定位⼀个扇区(sector)


1.2 CHS地址定位

每个磁头、磁道、扇区都有编号,起始编号分别是:0,0,1 这就称为CHS地址定位

文件=内容+属性都是数据,无非就是占据那几个扇区的问题!能定位一个扇区了,能不能定位多个扇区呢?
在这里插入图片描述

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

**CHS寻址
对早期的磁盘⾮常有效,知道⽤哪个磁头,读取哪个柱⾯上的第⼏扇区就可以读到数据了。
但是CHS模式⽀持的硬盘容量有限,因为系统⽤8bit来存储磁头地址,⽤10bit来存储柱⾯地
址,⽤6bit来存储扇区地址,⽽⼀个扇区共有512Byte,这样使⽤CHS寻址⼀块硬盘最⼤容量
为256 * 1024 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B来算就是
8.4GB)

1.3 磁盘的逻辑结构

【结论:磁盘是一个以扇区为单位的一维数组】

1.3.1 理解过程

逻辑上我们可以把一面磁盘想象成为卷在⼀起的磁带,把磁带“拉直”,形成线性结构,全是扇区

每面磁盘扇区总数相等,每条磁道扇区个数相等。

把多面磁盘按线性结构展开就是一个一维数组 ,确定一个扇区等于确定一个一维数组下标

用数组下标定义任意扇区称为:LBA

但系统不认识LBA只认CHS,所以要把LBA转换成CHS(转换由磁盘自己完成,我们知道磁盘容量就行)

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

例如:告诉我们磁盘有100面,10磁道,有个下标124,如何转成CHS?

124/100=1(H)找到第一面

124%100=24,24/10=2(C)确定磁道

24%10=4(S)确定扇区

这就是把LBA转换成CHS过程。 

以上是以面为单位展开,磁盘真实展开并不以物理盘面展开,而是以柱面为单位展开

 1.3.2 真实过程

⼀个细节:传动臂上的磁头是共进退的

柱面是⼀个逻辑上的概念,其实就是整个磁盘所有盘面的统一磁道。
所以,磁盘物理上分了很多⾯,但是在我们看来逻辑上,磁盘整体是由“柱⾯”卷起来的。

所以,磁盘的真实情况是:
磁道:
某⼀盘⾯的某⼀个磁道展开:

即:⼀维数组
柱⾯:
整个磁盘所有盘⾯的同⼀个磁道,即柱⾯展开:这不就是个二维数组

整盘:整个磁盘不就是多张⼆维的扇区数组表(三维数组)

所以,寻址⼀个扇区:先找到哪⼀个柱⾯(Cylinder) ,在确定柱⾯内哪⼀个磁道(其实就是磁头位置Head),在确定扇区(Sector),所以就有了CHS。
我们之前学过C/C++的数组,在我们看来,其实全部都是⼀维数组: 

 为什么要用CHS寻址,因为磁盘是三维的有三个下标,下标顺序不能乱!

LBA转换成CHS本质:一维数组下标转换成三个数字【数组的下标就是每⼀个扇区的LBA地址。OS使⽤磁盘,就可以⽤⼀个数字访问磁盘扇区了】磁盘就是一个以扇区为单位的一维数组

2、引入文件系统

2.1 引入“块的概念”

其实硬盘是典型的“块”设备,操作系统读取硬盘数据的时候,其实是不会⼀个个扇区地读取,这样效率太低,⽽是⼀次性连续读取多个扇区,即⼀次性读取⼀个”块”(block)
硬盘的每个分区是被划分为⼀个个的”块”。⼀个”块”的大小是由格式化的时候确定的,并且不可更改,最常⻅的是4KB,即连续八个扇区组成⼀个 ”块”。”块”是文件存取的最小单位。如下图:

通过上图,当给你一个磁盘总容量,总容量/4KB就知道有多少块,拿着块号++/--往上找不就可以访问任意扇区。

因此,OS看待磁盘认为是一个块设备,每块都有下标,文件OS的角度看待磁盘也是块设备,有两种访问方式:LBA和块号,而LBA又可以转换成块号。

2.2 引入“分区”概念

磁盘是一个个块组成,当磁盘很大OS还是不好管理,所以再分区,如果还大就再分组。把每个组管理好等于把磁盘管理好(分治思想

把磁盘分区后只要知道从哪个块号开始到哪个块号结束为一个分区,也就可以把整个分区内的内容管理好。例如Windows上我们有C、D、E、F盘,实际上我们只有一块物理盘,只是分区把它分成大家所看到的C、D、E、F盘。

2.3 了解分组细节

文件 = 内容 + 属性    对于Linux来说不管是内容还是属性都是数据,既然是数据就要存储。在还没被加载到内存前存放在磁盘中。

1. Linux中内容和属性分开存储

2. OS文件系统中和磁盘进行IO的基本单位是4KB(所以每个数据块大小是4KB)

以上是对文件系统的简要介绍,具体inode如何存储等一系列问题都还没解答!为了知识点的连贯性,统一放在下节ext2文件系统部分详细介绍。


感谢观看,下节再见~

http://www.dtcms.com/a/310075.html

相关文章:

  • android嵌套网页遇到的问题总结
  • mac系统自带终端崩溃修复
  • 使用自定义数据集训练 YOLOv12 以检测道路坑洞严重程度
  • 利用 AI 在 iPhone 上实现 App 文本情绪价值评估(上)
  • 基于Matlab的人眼虹膜识别门禁系统
  • 【Git 分支整合的艺术:岔路与归途的抉择 ——merge 与 rebase 深度解析】
  • Java函数式编程之【Stream终止操作】【下】【三】【收集操作collect()与分组分区和下游收集器】
  • 【MySQL】MySQL事务
  • 低空经济展 | 昂际智航携珑驭®系列产品亮相2025深圳eVTOL展
  • 向日葵软件提权
  • 第一篇:Linux 运维入门:虚拟机部署与基础环境配置
  • 《Java 程序设计》核心知识点梳理与深入探究
  • 工具Cursor(2)使用案例
  • 云函数编排深度解读:从概念到架构的全景指南
  • 计算声子谱
  • 详解K8s集群搭建:从环境准备到成功运行
  • 力扣面试150(46/150)
  • Spring AI MCP:解锁大模型应用开发新姿势
  • Idea快捷键
  • 从入仓到结算全自动化:易境通如何重构散货拼柜业务流程?
  • SpringBoot3.x入门到精通系列:1.3 创建第一个SpringBoot 3.x应用
  • LeetCode 刷题【24. 两两交换链表中的节点、25. K 个一组翻转链表】
  • Ubuntu 开启wifi 5G 热点
  • 数字孪生城市:以虚实映射为起点,开启城市全要素数字化转型新纪元
  • Docker学习其二(容器卷,Docker网络,Compose)
  • FEVER数据集:事实验证任务的大规模基准与评估框架
  • 如何安全管理SSH密钥以防止服务器被入侵
  • Wisdom SSH开启高效管理服务器的大门
  • 企业WEB应用服务器TOMCAT
  • 将Varjo XR技术融入战斗机训练模拟器,有效提升模拟训练沉浸感与效率