【Linux系统】Ext系列磁盘文件系统一

news2025/1/15 8:05:35




在这里插入图片描述



0. 从快递系统引入文件系统

理解文件系统:菜鸟驿站的类比

在日常生活中,我们常常会使用到快递服务来寄送和接收包裹。这个过程虽然看似简单,但背后却有着一套复杂而有序的管理系统在支撑。今天,我们将通过一个类比——将文件系统与菜鸟驿站相比较,帮助大家更好地理解计算机中的文件存储原理。

磁盘等文件存储空间:菜鸟驿站

首先,想象一下磁盘就像是一个巨大的仓库——菜鸟驿站。它拥有特定的容量来存放各种大小的包裹(文件)。就像菜鸟驿站负责保管和管理每一个快递包裹一样,磁盘也是我们数据的“家”,无论是文档、照片还是视频,都被安全地保存在这里。

文件:一件件快递

接着,让我们来看看文件。在计算机的世界里,文件就是我们要存储和检索的数据单元,正如每个快递包裹一样,每个文件都有其独特的信息内容和用途。从一封电子邮件到一部电影,每一份文件都承载着不同的信息。

文件的存放目录:唯一货号

为了方便查找和管理这些“快递”(文件),我们需要一种方法来组织它们。这正是目录结构发挥作用的地方。就像菜鸟驿站使用唯一的货号(例如17-3-9018表示第17号柜的第3层的第9018号位置)来快速定位特定的快递,计算机中我们也使用路径名来指示文件的具体位置。比如/home/user/documents/report.docx就是一个具体的文件路径,清晰地标明了文件在系统中的具体位置。

文件系统:快递系统的角色

最后,文件系统就如同整个快递系统,它不仅负责管理文件的存取,还处理诸如磁盘分区、格式化、错误检测与修复等任务,确保数据能够安全高效地存储和检索。文件系统跟踪文件的状态(如创建时间、修改时间、访问权限等),就像快递系统管理着快递从发货到收货的整个流程,并且监控着包裹的状态(如已发货、运输中、已到达等)



1、理解硬件

1.1 磁盘、服务器、机柜、机房

  • 机械磁盘是计算机中唯⼀的⼀个机械设备
  • 磁盘—外设
  • 容量大,价格便宜

在这里插入图片描述

(1)关于机房

在选择机房位置时,必须考虑散热效果和电力供应

为什么需要考虑散热效果?

服务器运行起来会产生大量热量,必须要考虑散热

高效的散热管理能够防止设备因过热而性能下降或损坏,同时降低冷却成本。

为什么需要考虑电力供应?

服务器一般运行起来就不会轻易关闭停止,则需要稳定且充足的电力供应,避免因停电导致的服务中断和数据丢失。

(2)磁盘的存储原理

磁铁:引出磁盘是如何保存数据的

磁铁通常由 N / S 南北极两段组成,有且仅有这两种磁极,而我们计算机存储数据是依靠 0/1 二进制存储,刚好也是两种模式,因此我们会通过设置磁体的磁极,用于表示二进制数据的 0/1

而一次性会通过几百亿个小磁铁分别表示二进制数据的 0/1 存储信息,这样使用磁体存储的设备就是磁盘!!

逻辑线:磁铁有且仅有 N / S 南北极 ——> 刚好对于 0/1 二进制 ——> 多个磁铁存储二进制数据 ——> 即为磁盘

(3)如何销毁磁盘

国家规定互联网公司,若需要停用某块磁盘机房,就需要销毁磁盘,因为需要保证用户的信息不被泄漏,而一般不会通过格式化的方式销毁数据,因为数据是可以恢复的,因此需要另寻他法:直接将磁盘消磁!使得该磁盘直接不能使用了,一般消磁方式:高温消磁

1.2 磁盘物理结构


在这里插入图片描述


磁头和盘片是不接触的,但是距离比较近:中间有真空

盘片是非常光滑的,当磁盘中进灰了,在盘片高速旋转和磁头摆动时,容易刮花盘片

同时磁盘一般不要剧烈晃动:可能会造成磁头和盘片接触,刮花盘片

导致物理上数据的丢失,因此,有时候磁盘中某些文件打不开了,可能就是磁盘自己该部分被刮花了



1.3 磁盘的存储结构


在这里插入图片描述


确实,扇区是磁盘存储数据的基本单位,通常大小为512字节,尽管现在也有一些硬盘使用(4KB)作为其基本的扇区大小。以下是关于扇区以及为什么磁盘被称为块设备的简要介绍:

扇区
  • 定义:扇区是磁盘上最小的物理存储单元,最常见的是512字节大小,但也有部分现代硬盘采用4KB大小(4096字节)。
  • 操作方式:当我们向磁盘写入数据时,并不是直接对某几个字节进行修改,而是需要将包含目标位置的整个扇区读入内存中。在内存中完成修改后,再将整个扇区的数据写回磁盘。

在这里插入图片描述


块设备
  • 概念:由于数据的读取和写入都是以一个或多个完整的扇区为单位进行的,因此像硬盘这样的存储设备被称为“块设备”。这意味着数据传输是以固定大小的数据块(即扇区)为单位进行的。

一般一个磁盘会记录自己有多少个扇区,因为扇区是磁盘记录数据的基本单位

命令:fdisk -l /dev/vda

在这里插入图片描述



盘片旋转 和 磁头臂摆动

盘片按照一个方向不停高速旋转:定位扇区

​ (顺时针和逆时针旋转都有,不同磁盘转速不同)

磁头臂不停上下摆动:定位磁道


在这里插入图片描述




侧视盘片 与 读写磁头

通过一张侧面的硬盘结构图讲解如下

实际上磁盘是有多个盘片组成的,每个盘片正反面都能存储数据,都是通过传动臂作为笔写入:


在这里插入图片描述




如何定位⼀个扇区呢?

CHS地址定位法:定位目标扇区

CHS 地址定位法

1、定位柱面(cylinder C

2、定位磁头(header H

3、定位扇面(sector S

4、最后找到该扇面


盘片旋转,磁头摆动:两两配合,用于读写磁盘数据

CHS定位的过程:先定位在哪个柱面上读写数据(即定位柱面 C ),再定位是该柱面上的哪一层(即哪一个盘面:定位磁头 H),最后依靠该盘面旋转到磁头的位置上(定位扇面 S )

定位扇区本质就是读写数据:文件由 内容+属性,本质都是数据,一个文件可能会占据多个扇区,既然能够定位一个扇区,就能定位多个扇区,就能用于读写一整个文件数据


在这里插入图片描述



扇区的大小

学到这里肯定有一个疑问:圆的半径不同,扇区的弧度大小也不同,那每个扇区都是 512 字节大小吗?

在这里插入图片描述

我们本文讲解暂时将扇区都统一理解成大小相同:外圈大扇区存储密度小,内圈密度大,保证存储大小一致

实际上现代技术已经可以做到扇区密度相等,即外圈大扇区的存储大小可以很大,内圈的可以很小



磁盘容量的计算

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

  • 磁头数:即为 盘面数
  • 磁道数:即为 柱面数



1.4 磁盘的逻辑结构

磁头是同进退的:理解柱面

磁头有多个,磁头臂也有多个,但是传动臂只有一个,因此所有磁头实际上就是一起运动的

既然所有磁头都是共进退的,则每次运动到一个位置,所有磁头能访问的位置,逻辑上可以构成一个圆柱


在这里插入图片描述


柱面是一个逻辑上的概念,其实就是每一面上,相同半径的磁道逻辑上构成柱面。

所以,磁盘物理上分了很多面,但是在我们看来,逻辑上,磁盘整体是由“柱面”卷起来的,就跟山楂一样。


在这里插入图片描述




LBA 逻辑块寻址:线性结构的磁盘

抛开磁盘的整体结构,只看一个盘片,先研究一个盘片,再拓展到全部,从小到大理解


在这里插入图片描述




磁盘作为线性结构

当你把磁盘像磁带一样拉直成为长条的线性结构后,这样的线性结构,想不想一个数组结构!!!

数组结构:在这个线性结构中,每个扇区就像是数组中的一个元素。通过给每个扇区分配一个唯一的数组下标,我们可以快速定位到特定的扇区。

数组下标的0和1:为什么扇区数组下标从 1 开始,不是零?这是一种标准或协议的规定,并不是技术上的必然选择,而是为了遵循某些历史惯例和兼容性考虑。



逻辑块寻址(LBA)

  • 定义:逻辑块寻址是一种为存储设备上的数据块(通常是扇区)提供唯一地址的方法。它允许操作系统以一种简单且直接的方式访问磁盘上的任何位置,而不必关心底层硬件的具体细节。
  • 英文名:Logical Block Addressing, LBA
  • 线性地址:在LBA模式下,每个扇区都被赋予了一个独一无二的线性地址。这个地址就是该扇区在整个磁盘(视为线性结构)中的位置标识符。例如,在一个具有2048个512字节扇区的磁盘上,第一个扇区的LBA可能是1,最后一个则是2048。


在这里插入图片描述




在逻辑上,即从逻辑块寻址(LBA)的角度来看待磁盘结构,可以将磁盘视为一个巨大的一维数组。每个扇区相当于这个数组中的一个元素,每个元素都有一个独一无二的索引号,即LBA值。这种理解方式极大地简化了对磁盘上数据的访问和管理过程。

在物理上,磁盘是一种一维二维三维的结构,如下:



一维二维三维的结构

磁道展开:某一盘面的某一个磁道展开

一维数组
在这里插入图片描述

柱面展开:整个磁盘所有盘面的同一个磁道

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

  • 这不就是二维数组

在这里插入图片描述

整个磁盘展开:就是多个柱面展开的合体,即为三维数组!

在这里插入图片描述

因此,我们的磁盘的物理结构可以抽象理解成 逻辑上的 三维数组结构!
定位扇区,也就是定位三维数组中的某元素 !



一维二维三维的作用

定位一二三维的过程和机制就是前面讲解过的 CHS !!

C 为柱面 :即定位三维体中的二维面

H 为磁头,即盘片 :即定位二维面中的一维线

S 为扇区:即定位一维线中的具体一个位置点

为什么名为顺序 CHS ,因为他的寻址顺序就是如此!先柱面,再磁头,再扇区


有了 LBA 地址,是否还需要CHS定址法?

问题:既然有 LBA 逻辑上将磁盘抽象成一维数组结构 的这样 “极简化结构”,是否还需要CHS定址法这样 三维 的 “复杂结构”?

  • 毕竟 LBA 逻辑下的磁盘是一个巨大的一维数组,定位扇区只需要给出扇区的一维数组下标,直接一步定位即可
  • 而 CHS 定址法却需要 C、H、S 三步!

答: 必须要!因此磁盘本身的结构决定,就是 CHS 模式,也必须通过 CHS 的模式来寻找定位扇区

而 LBA 定址法是方便操作系统通过数组下标的形式,便利定位与操作磁盘扇区。


(1)操作系统和 LBA

对于操作系统来说,使用 LBA(逻辑块寻址)是最常见的做法。LBA 提供了一个线性的、连续的地址空间,使得操作系统可以更方便地管理和访问硬盘上的数据。操作系统通过 LBA 地址来请求读取或写入特定的扇区。


(2)硬盘内部的 CHS 转换

虽然现代硬盘和操作系统主要使用 LBA 进行寻址,但硬盘控制器内部仍然需要将 LBA 地址转换为 CHS(圆柱号、磁头号、扇区号)来实际定位和访问物理扇区。这是因为在物理层面上,硬盘的结构仍然是基于圆柱、磁头和扇区的。(每个 圆柱(柱面) 包含多个磁道,每个磁道对应一个磁头,每个磁道上有多个扇区。)


(3)总结

操作系统通过 LBA 方式定位磁盘扇区位置,而磁盘本身还需要将操作系统给的 LBA地址转换成 CHS 地址,来定位某个扇区物理位置

对于磁盘来说,会将 CHS 地址转换成 LBA 地址,返回给操作系统用于操作

因此,因为在物理层面上硬盘的结构仍然是基于圆柱、磁头和扇区,因此硬盘寻址底层上还是需要使用 CHS 方式寻址,只不过在表层操作系统操作磁盘时,是通过 LBA 的方式寻址,为了便于操作(这个根源就是硬盘的物理结构决定的)



LBA 地址 和 CHS 地址的相互转换

上面讲解了 磁盘的 LBA 地址 和 CHS 地址会进行相互转换,这个操作主要是由 磁盘自己来做:相关固件(硬件电路,伺服系统)

总柱面,磁道个数,扇区总数等信息,在磁盘内部会自动维护,上层开机的时候,会获取到这些参数。


LBA 地址 和 CHS 地址的相互转换本质是:三维地址和一维地址的相互转换



前置知识

柱面和磁道都是从 0 开始编号的

扇区号通常是从 1 开始的,而在 LBA 中,地址是从 0 开始的


柱面号是指该三维数组中哪一个二维平面

磁道号是指该二维数组中哪一排一维数组

扇区号是指该一维数组中哪一个元素位置


CHS 转成 LBA:三维地址转换为一维地址
  • 磁头数 * 每磁道扇区数 = 单个柱面的扇区总数
  • LBA = 柱面号C * 单个柱面的扇区总数 + 磁头号H * 每磁道扇区数 + 扇区号 S -1
  • LBA = 前面有多少组二维数组 + 本二维数组的前面有多少组一维数组 + 本一维数组中的位置 - 1

理解了 CHS 转成 LBA,就能够反过来理解:



LBA转成CHS:一维地址转换为三维地址
柱面号C = LBA / (磁头数 * 每磁道扇区数)     // 就是单个柱面的扇区总数

磁头号H = (LBA % (单个柱面的扇区总数)) / 每磁道扇区数

扇区号S = (LBA % 包磁道扇区数)+1

"/":表示除取整

简单来说:

柱面号C = 总数LBA中有多少个 完整柱面

磁头号H = 最后一个不完整柱面中,有多少个完整的一维数组

扇区号S = 最后一个不完整一维数组中,剩余的数字+1 就是扇区号

因此,从此往后,在磁盘使用者看来,根本就不关心 CHS 地址,而是直接使用 LBA 地址,只需磁盘内部自己转换

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2276898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1Hive概览

1Hive概览 1hive简介2hive架构3hive与Hadoop的关系4hive与传统数据库对比5hive的数据存储 1hive简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。 其本质是将SQL转换为MapReduce/Spark的任务进…

Elasticsearch入门学习

Elasticsearch是什么 Elasticsearch 是一个基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展的数据存储和矢量数据库。 它针对生产规模工作负载的速度和相关性进行了优化。 使用 Elasticsearch 近乎实时地搜索、索引、存储和分析各种形状和大小的数据。 特点 分布式&a…

[读书日志]8051软核处理器设计实战(基于FPGA)第七篇:8051软核处理器的测试(verilog+C)

6. 8051软核处理器的验证和使用 为了充分测试8051的性能,我们需要测试每一条指令。在HELLO文件夹中存放了整个测试的C语言工程文件。主函数存放在指令被分为五大类,和上面一样。 打开后是这样的文件结构。HELLO.c是主文件,这是里面的代码&am…

【Vue实战】Vuex 和 Axios 拦截器设置全局 Loading

目录 1. 效果图 2. 思路分析 2.1 实现思路 2.2 可能存在的问题 2.2.1 并发请求管理 2.2.2 请求快速响应和缓存带来的问题 3. 代码实现 4. 总结 1. 效果图 如下图所示,当路由变化或发起请求时,出现 Loading 等待效果,此时页面不可见。…

一文读懂yolo11模型训练

一文读懂yolo11模型训练 一、环境准备 Anaconda安装 简介 Anaconda 是一个流行的开源 Python 发行版,专注于数据科学、机器学习、科学计算和分析等领域。它提供了一个强大的包管理器和环境管理器,名为 Conda,以及一个预装了大量科学计算和…

Apache PAIMON 学习

参考:Apache PAIMON:实时数据湖技术框架及其实践 数据湖不仅仅是一个存储不同类数据的技术手段,更是提高数据分析效率、支持数据驱动决策、加速AI发展的基础设施。 新一代实时数据湖技术,Apache PAIMON兼容Apache Flink、Spark等…

音视频入门基础:RTP专题(1)——RTP官方文档下载

一、引言 实时传输协议(Real-time Transport Protocol,简写RTP)是一个网络传输协议,由IETF的多媒体传输工作小组1996年在《RFC 1889》中公布的。 RTP作为因特网标准在《RFC 3550》有详细说明。而《RFC 3551》详细描述了使用最小…

【Vim Masterclass 笔记13】第 7 章:Vim 核心操作之——文本对象与宏操作 + S07L28:Vim 文本对象

文章目录 Section 7:Text Objects and MacrosS07L28 Text Objects1 文本对象的含义2 操作文本对象的基本语法3 操作光标所在的整个单词4 删除光标所在的整个句子5 操作光标所在的整个段落6 删除光标所在的中括号内的文本7 删除光标所在的小括号内的文本8 操作尖括号…

LiveGBS流媒体平台GB/T28181常见问题-没有收到视频流播放时候提示none rtp data receive未收到摄像头推流如何处理?

LiveGBS没有收到视频流播放时候提示none rtp data receive未收到摄像头推流如何处理? 1、none rtp data receive2、搭建GB28181视频直播平台 1、none rtp data receive LiveSMS 收不到下级推流 首先需要排查服务器端 UDP & TCP 30000-30249 端口是否开放其次排…

使用Docker模拟PX4固件的无人机用于辅助地面站开发

前言 最近在制作鸿蒙无人机地面站,模仿的是QGroundControl,协议使用mavlink,记录一下本地模拟mavlink协议通过tcp/udp发送 废话不多说直接上命令 1.启动docker的桌面端 启动之后才能使用docker命令来创建容器 docker run --rm -it jonas…

【Docker】保姆级 docker 容器部署 MySQL 及 Navicat 远程连接

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. docker 容器部署 MySQL1.1 拉取mysql镜像1.2 启动容器1.3 进入容器1.4 使用 root 用户登录 2. Navicat 连…

【大数据】机器学习-----线性模型

一、线性模型基本形式 线性模型旨在通过线性组合输入特征来预测输出。其一般形式为: 其中: x ( x 1 , x 2 , ⋯ , x d ) \mathbf{x}(x_1,x_2,\cdots,x_d) x(x1​,x2​,⋯,xd​) 是输入特征向量,包含 d d d 个特征。 w ( w 1 , w 2 , ⋯ ,…

装备制造行业(复杂机械制造)数字化顶层规划 - 汇报会

行业业务特点: 尊敬的各位管理层: 大家好!今天我将向大家汇报装备制造企业数字化战略的顶层规划设计。在当今数字化浪潮下,装备制造企业面临着转型升级的迫切需求,数字化战略的制定与实施对于提升企业竞争力、实现可持…

深度探索C++20协程机制

#include <iostream> #include <coroutine>class CoroTaskSub { public://编译器在处理协程函数时是通过其返回类型【即协程接口类型】&#xff0c;确定协程的承诺类型和协程句柄类型struct promise_type;using CoroHdl std::coroutine_handle<promise_type>…

linux手动安装mysql5.7

一、下载mysql5.7 1、可以去官方网站下载mysql-5.7.24-linux-glibc2.12-x86_64.tar压缩包&#xff1a; https://downloads.mysql.com/archives/community/ 2、在线下载&#xff0c;使用wget命令&#xff0c;直接从官网下载到linux服务器上 wget https://downloads.mysql.co…

Java Stream实现【Int / Long / Double / Bigdecimal】累计求和

文章目录 背景实现方案案例素材Int类型求和Long 类型求和Double 类型求和BigDecimal 类型求和 背景 在项目开发中经常会使用到数据统计&#xff0c;Java中有求和的方法&#xff0c;可使用Java的Stream工作流实现&#xff0c;记录下来&#xff0c;方便备查。 实现方案 可使用…

OFD文件纯前端查看解决方案

文章目录 ofd.js原有bug修复1、ofd格式文档打开报错2、签章信息不显示 效果展示源码下载 使用前请查看免责声明 ofd.js原有bug修复 1、ofd格式文档打开报错 原因分析&#xff1a; 文档打开时会解析所用到的字体信息&#xff0c;如果字体不在ofd.js预设字体时&#xff0c;会触…

使用 Docker 部署 Java 项目(通俗易懂)

目录 1、下载与配置 Docker 1.1 docker下载&#xff08;这里使用的是Ubuntu&#xff0c;Centos命令可能有不同&#xff09; 1.2 配置 Docker 代理对象 2、打包当前 Java 项目 3、进行编写 DockerFile&#xff0c;并将对应文件传输到 Linux 中 3.1 编写 dockerfile 文件 …

二手车交易系统的设计与实现(代码+数据库+LW)

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统二手车交易信息管理难度大&#xff0c;容错率低&#xf…

抖音ip属地没有手机卡会显示吗

在数字时代&#xff0c;社交媒体平台如抖音已成为人们日常生活的重要组成部分。随着抖音等应用对用户体验和隐私保护的不断优化&#xff0c;IP属地显示功能逐渐走进大众视野。这一功能旨在提高网络环境的透明度&#xff0c;打击虚假信息和恶意行为。然而&#xff0c;对于没有手…