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

Linux系统:Ext系列文件系统(硬件篇)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一,理解硬件
    • 1-1 磁盘、服务器、机柜、机房
    • 1-2 为什么需要磁盘?
    • 1-3 磁盘的物理结构
    • 1-4 磁盘的存储结构
    • 1-5 磁盘的逻辑结构
      • 1-5-1 抽象概念
      • 1-5-2 真实过程
    • 1-6 CHS && LBA地址
      • 1-6-1 CHS转成LBA:
      • LBA 转成CHS:
  • 二,分区,inode,块
    • 2-1 块
    • 2-2 分区
    • 2-3 inode


前言

在 Linux 系统中,文件系统是操作系统与磁盘之间最关键的桥梁。Ext 系列文件系统作为 Linux 中最经典和广泛使用的一种,不仅关系到数据的存储与访问效率,也深刻影响着系统的性能与稳定性。了解 Ext 文件系统的结构与机制,是深入掌握 Linux 操作系统不可或缺的一步。学 Ext 文件系统,就像掌握了 Linux 磁盘世界的地图,能让你真正理解数据如何生、存、亡!!!

本文用于文件系统的硬件学习


一,理解硬件

1-1 磁盘、服务器、机柜、机房

磁盘是服务器的一部分,服务器放在机柜中,多个机柜组成一个机房。

  • 磁盘服务器的“存储器”
    • 是最基础的硬件之一,负责存储数据
    • 可以是机械硬盘(HDD)、固态硬盘(SSD)、企业级磁盘阵列等。
    • 一台服务器通常包含1块或多块磁盘,用来安装操作系统、保存文件、运行数据库等。
  • 服务器就像一个“执行任务的智能设备”,磁盘只是它的“硬盘”
    • 是一台专门处理请求、提供服务的计算机(物理的或虚拟的)
    • 它可能提供网站服务、数据库服务、文件存储、AI 推理等。
    • 一台服务器通常包含:CPU、内存、磁盘、网卡、电源等部件。
    • 有 1U、2U 等机架式形态,也有塔式、刀片式。
  • 机柜机柜就像一个“服务器的集装箱”,是物理收纳单元
    • 是放置多台服务器、交换机、电源模块等设备的标准化金属柜子
    • 通常高 42U(1U 是 1.75 英寸),能容纳多台设备。
    • 便于布线、散热和集中管理。
  • 机房“所有服务器工作的地方”,是基础设施的终点站
    • 是集中放置多个机柜的大型房间或建筑
    • 拥有供电系统、冷却系统、防火/防雷系统、安全系统等。
    • 保障服务器全天候运行,是云计算/互联网服务的基础设施核心。

1-2 为什么需要磁盘?

磁盘让计算机拥有“记忆”,没有磁盘,计算机就无法保存任何有用的东西。

磁盘的作用

  • 永久保存数据
    • 与内存(RAM)不同,磁盘即使断电也能保存数据。
    • 比如:操作系统、文档、图片、视频、数据库,都保存在磁盘上。
  • 运行操作系统的载体
    • 没有磁盘,系统无法安装和启动操作系统(除非用U盘或网络引导)。
  • 软件与服务的依托
    • 应用程序、系统日志、缓存等都依赖磁盘空间。
    • 比如网页服务器要存网页文件,数据库服务器要存数据库文件。
  • 大容量、低成本
    • 相比内存,磁盘可以提供更大容量、更低价格的数据存储。

如果没有磁盘会怎样?

  • 计算机只能靠内存临时运行,一旦断电,数据全部消失。
  • 操作系统无法启动,应用无法运行,文件无法保存。
  • 等于“失忆”的电脑,无法承担任何实用任务。

1-3 磁盘的物理结构

盘片是“书”,磁头是“眼睛和笔”,磁头臂是“翻书的手”,主轴是“转动的书架”,永磁铁帮助精准控制手的动作。
在这里插入图片描述

  • 盘片存储数据的“光盘”,表面有磁性材料,通过磁化方向记录0和1。
  • 主轴带动盘片高速旋转(比如7200转/分钟),让磁头能快速访问不同位置的数据。
  • 磁头负责读取和写入数据,悬浮在盘片上方(几乎不接触),感应或改变磁性。
  • 永磁铁配合磁头臂运动,提供精准的磁力控制,让磁头能快速移动到正确位置。
  • 磁头臂支撑磁头,像机械手臂一样来回摆动,让磁头能覆盖整个盘片。

1-4 磁盘的存储结构

  • 扇区(Sector)
    • 是磁盘上最小的可寻址存储单元,通常为 512 字节(现在也有 4KB 的)。
    • 每一条磁道会被划分成若干个扇区。
  • 磁道(Track)
    • 磁盘在每个盘面上从内到外的一圈圈圆形路径。
    • 当磁头在一个固定位置旋转时,磁头划过的路径就是一条磁道。
    • 类似于老式黑胶唱片上的同心圆。
  • 柱面(Cylinder)
    • 所有盘片中同一半径上的所有磁道组成的集合,称为一个柱面。
    • 举个例子:如果一个磁盘有4个盘面(上下两个盘片),那么第100号磁道的4个盘面合起来就是“柱面100”
  • 磁头(Head)
    • 每个盘面有一个磁头负责读写。
    • 多个盘面就有多个磁头。
  • CHS (Cylinder-Head-Sector)
    • 是对磁盘上每一个扇区的物理定位方法
    • 每个数据块的位置可以用三元组 (柱面号,磁头号,扇区号) 表示。

在这里插入图片描述

  • 一块传统的机械硬盘(HDD)其实就像一个数据汉堡,里面有好几张圆圆的盘片一层层叠在一起,每张盘片的正反两面都能存数据。每一面都配有一个磁头,就像唱针一样,它用来读写数据。
  • ==这些磁头都安装在一个“磁臂”上,磁臂可以前后移动,这样磁头就能在盘片上来回扫,找到不同的圈圈来读写数据。而盘片本身是高速旋转的,这样每次旋转一圈,磁头下方就会经过很多数据区。
  • 盘面上的数据是按一圈圈排好的,这些圈叫做磁道(Track)。每个磁道再被分成一小块一小块的“披萨片”,这些就是扇区(Sector),是硬盘能读写的最小单位,常见大小是 512 字节或者 4K
  • 再进一步看,所有盘片上编号相同的磁道,比如说每张盘片上的第100圈,这些磁道在垂直方向上对齐,就组成了一个“柱子”,这叫柱面(Cylinder)。这样只要磁臂把磁头移动到某个柱面,再根据要用哪个磁头(也就是哪个盘面),就能定位到很精确的位置。
  • 早期的硬盘访问方式叫 CHS地址模式,意思就是用三个数字来找数据:
    • C 是柱面号(Cylinder)
    • H是磁头号(Head,对应盘面)
    • S 是扇区号(Sector)

然而,CHS 寻址方式存在容量限制。这是因为:

  • 磁头地址(Head):使用 8 位表示,最大支持 256 个磁头
  • 柱面地址(Cylinder):使用 10 位表示,最大支持 1024 个柱面
  • 扇区地址(Sector):使用 6 位表示,最大支持 63 个扇区(注意扇区编号从 1 开始)
  • 每个扇区大小为 512 字节

因此,CHS 模式下最大可寻址容量为:

256(磁头) × 1024(柱面) × 63(扇区) × 512 字节
= 8,455,716,864 字节 ≈ 8064 MB(按 1MB = 1,048,576 字节)
≈ 8.4 GB(按 1MB = 1,000,000 字节)

这意味着,CHS 模式最多支持约 8.4GB 的硬盘容量,无法满足日益增长的存储需求,因此后来被 LBA(逻辑块地址)模式所取代。


1-5 磁盘的逻辑结构

1-5-1 抽象概念

磁带
磁盘的逻辑结构可以抽象为我们小时候用的磁带一样,是一种线形的结构

磁盘存储结构:

磁带上⾯可以存储数据,我们可以把磁带“拉直”,形成线性结构
在这里插入图片描述
虽然磁盘是硬质的机械设备,但从逻辑角度来看,我们可以把磁盘想象成卷成盘状的一条磁带。因此,磁盘的逻辑存储结构也可以类比于磁带的线性数据排列方式,呈现出类似的连续性和顺序性

在这里插入图片描述
这样,每一个扇区就拥有了一个线性地址,就像一维数组中的下标一样。这个线性地址称为 LBA(Logical Block Address,逻辑块地址),它用于唯一标识磁盘上的每一个数据块,简化了磁盘的寻址方式。
在这里插入图片描述


1-5-2 真实过程

⼀个细节:传动臂上的磁头是共进退的
在这里插入图片描述
柱面”其实是一个逻辑上的说法,意思就是每一张盘片上那些半径一样的磁道,叠起来看就像是围成了一个圆柱面。
虽然磁盘在物理上有好几张盘片,但我们可以把它想象成一圈圈的柱面一层层地卷起来组成整个磁盘

  • 磁道:

  • 某⼀盘⾯的某⼀个磁道展开:
    在这里插入图片描述

  • 柱⾯:

  • 整个磁盘所有盘⾯的同⼀个磁道,即柱⾯展开:
    在这里插入图片描述

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

  • 换句话说,整个磁盘的柱面结构就像一个规则的二维数组——一行行是柱面上的磁道,一列列是磁道上的扇区。

整盘:
在这里插入图片描述

  • 整个磁盘,其实可以理解成很多张二维的“扇区表”堆叠在一起,就像一个三维数组。

  • 所以当我们要定位(寻址)某个扇区时,其实就是按“CHS”三个维度来找的:
    先确定在哪个柱面(Cylinder),然后是柱面上的哪一个磁头(Head,对应磁盘的某一面),最后是具体的扇区(Sector)

  • 不过如果你学过 C/C++ 的数组,其实这些看起来像三维的结构,我们都可以把它看成是一维数组来处理——本质上就是线性排列的。

在这里插入图片描述


1-6 CHS && LBA地址

1-6-1 CHS转成LBA:

  • 一个柱面上的扇区总数 = 磁头数 × 每个磁道的扇区数

  • LBA(逻辑块地址)的计算方法是:先用柱面号乘以每个柱面的扇区总数,再加上磁头号乘以每个磁道的扇区数,最后加上扇区号减1(因为扇区号是从1开始的)

  • 公式就是:LBA = 柱面号 × (磁头数 × 每磁道扇区数) + 磁头号 × 每磁道扇区数 + (扇区号 - 1)

  • 这里要注意,扇区号是从1开始的,而LBA是从0开始算的

  • 柱面和磁头的编号都是从0开始的。

  • 磁盘会自动保存这些参数,系统启动时会去读取这些信息。

LBA 转成CHS:

  • 柱面号 C = LBA 除以(磁头数 × 每磁道扇区数),这里的乘积就是一个柱面上的扇区总数。
  • 磁头号 H = (LBA 除以 每磁道扇区数 的余数)再除以 每磁道扇区数,结果取整
  • 扇区号 S = LBA 除以 每磁道扇区数 的余数,再加 1(因为扇区号从1开始)
  • 这里的“除以”是向下取整的除法。
  • 所以从现在开始,对于磁盘的使用者来说,根本不用管 CHS 地址,直接用 LBA 就行了,磁盘内部会自动帮你转换
  • 换句话说,现在的磁盘就像一个扇区为元素的一维数组,而每个扇区的“下标”就是它的 LBA 地址。操作系统访问磁盘时,只需要用一个数字就能找到对应的扇区,非常方便。

二,分区,inode,块

2-1 块

“块”(block)是磁盘上用于存储数据的最小单位,就像写字用的格子一样。

  • 硬盘是一种典型的块设备(block device)。在操作系统访问硬盘时,并不会逐个扇区(sector)地进行读写操作——这种方式效率较低。相反,系统通常以块(block)为单位进行批量读取,即一次性连续读取多个扇区的数据

  • 每个硬盘分区在格式化时都会被划分为若干个逻辑块,每个块的大小在格式化时指定,之后不可更改。最常见的块大小为 4KB对应于 8 个扇区(每个扇区通常为 512 字节)
    块是文件系统进行数据读写的最小单位,也是文件系统分配磁盘空间的基本单元

在这里插入图片描述

  • 实际上,磁盘可以类比为一个三维数组(柱面、磁头、扇区),但为了简化访问逻辑,现代操作系统将其视作一个线性的一维数组,每个元素对应一个扇区(Sector),下标即为LBA(Logical Block Address)地址。

  • 每个扇区都对应一个唯一的LBA地址,而多个扇区(通常为8个)组成一个块(Block),即文件系统的数据读写单位。

  • 给定某个扇区的 LBA,可通过 块号 = LBA ÷ 8 向下取整计算其所属块编号。

  • 反过来,若已知块号及块内偏移 n(第几个扇区),则可以通过 LBA = 块号 × 8 + n 计算对应扇区的 LBA 地址。


2-2 分区

  • 磁盘可以被划分为多个分区(partition),以Windows系统为例,一块物理硬盘可能被划分为多个逻辑驱动器,如C盘、D盘、E盘,这些逻辑驱动器实际上就是对应的不同分区。分区本质上是对硬盘进行的逻辑划分和格式化,以便操作系统能够更好地管理和使用磁盘空间。

  • 而在Linux系统中,所有设备均以文件的形式存在于 /dev 目录下。磁盘的分区在Linux中通常以设备文件的形式体现,例如 /dev/sda1/dev/sda2 等,分别对应物理硬盘 /dev/sda 的不同分区。Linux通过分区表(如MBR或GPT)来管理分区信息,操作系统根据分区表识别和挂载各个分区,实现磁盘的逻辑划分和管理。

  • 柱面是划分分区时常用的物理参考单位。我们通过指定每个分区的起始柱面和结束柱面来完成分区。这样就好像把硬盘上的柱面按顺序排开,铺成一个大平面,方便直观地表示各个分区的位置和大小。但是扇区才是分区的基本单位

  • 柱面的大小是固定的,每个柱面上的扇区数也是一致的。因此,只要知道每个分区的起始柱面号和结束柱面号,以及每个柱面包含多少扇区,就能很清楚地计算出该分区的大小,也能明确该分区对应的LBA地址范围
    在这里插入图片描述


2-3 inode

之前我们提到过,文件 = 数据 + 属性。当我们使用ls -l命令查看文件时,除了文件名,还能看到文件的元数据(属性),比如权限、所有者、大小和修改时间等信息。
在这里插入图片描述
每行包含:文件权限(读、写、执行权限),链接数(有多少个目录项指向这个inode),拥有者和用户组文件大小文件创建、修改、访问时间文件类型(普通文件、目录、链接等),

  • ls -l读取的是文件的信息,

  • 除了通过 ls -l 查看文件信息外,我们还可以使用 stat 命令来获取文件的更多详细元数据。

在这里插入图片描述
我们来想个问题:文件的数据都放在“块”里,那文件的各种信息,比如谁创建的、什么时候创建的、文件多大, 这些东西得放哪里呢,这些文件的“身份证明”和属性信息,就是存在叫做 inode(中文叫“索引节点”)的地方。
在这里插入图片描述

  • 每⼀个⽂件都有对应的inode,⾥⾯包含了与该⽂件有关的⼀些信息。为了能解释清楚inode,我们需要是深⼊了解⼀下⽂件系统

  • 在 Linux 里,文件的属性和内容是分开存着的。

  • 文件的属性信息都存在一个叫 inode 的地方。每个文件对应一个 inode,里面有个唯一的编号,叫做 inode 号。

inode在linux系统中的源代码:

#define EXT2_N_BLOCKS 15struct ext2_inode {__le16  i_mode;         /* 文件类型和权限 */__le16  i_uid;          /* 所有者用户ID */__le32  i_size;         /* 文件大小(字节) */__le32  i_atime;        /* 最后访问时间 */__le32  i_ctime;        /* 创建时间 */__le32  i_mtime;        /* 最后修改时间 */__le32  i_dtime;        /* 删除时间 */__le16  i_gid;          /* 所属组ID */__le16  i_links_count;  /* 链接数 */__le32  i_blocks;       /* 文件占用的块数 */__le32  i_flags;        /* 文件标志 */__le32  i_block[EXT2_N_BLOCKS]; /* 数据块指针数组 */// 省略其他字段...
};

注意:

  • 文件名本身其实不保存在 inode 里面。
  • inode 的大小一般是 128 字节256 字节,我们这边统一按照 128 字节来讲。
  • 不管文件内容有多大,文件的属性大小都是一样的,因为 inode 的结构是固定的。

本文用于文件系统的硬件学习,如果要学习软件请阅读Linux系统:Ext系列文件系统(软件篇)

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

相关文章:

  • 专题二_滑动窗口_将x减到0的最小操作数
  • Dart 单例模式:工厂构造、静态变量与懒加载
  • 频谱图学习笔记
  • python 通过Serper API联网搜索并大模型整理内容
  • 软件测试面试常见问题【含答案】
  • EtherCAT WatchDog
  • V4L2摄像头采集 + WiFi实时传输实战全流程
  • 深圳市天正达电子股份有限公司参展AUTO TECH China 2025 广州国际汽车技术展览会
  • std::transform
  • AI大模型专题:LLM大模型(Prompt提示词工程)
  • C语言实现经典扫雷游戏全解析
  • 使用观测云打造企业级监控告警中心
  • cudagraph 本质详解
  • Vue框架进阶
  • 宠智灵打造宠物AI开放平台:精准识别、灵活部署、生态共建
  • C++入门(上) -- 讲解超详细
  • 【狂神说java学习笔记】四:java流程控制(用户交互Scanner、顺序结构、if选择结构、switch选择结构)
  • isulad + harbor私有仓库登录
  • 大模型性能测试实战指南:从原理到落地的全链路解析
  • Claude使用报错 Error: Cannot find module ‘./yoga.wasm‘
  • 鸿蒙中使用tree
  • 系统集成项目管理工程师【第十一章 规划过程组】规划成本管理、成本估算、制定预算和规划质量管理篇
  • 安全基础DAY1-安全概述
  • Xiphos Q8 摄像头板 高性能图像处理板
  • 案例实战:机器学习预测粘度+耐热高分子筛选,聚合物研发效率倍增秘籍
  • 锯床自动长度检测与参数闭环补偿系统
  • 2025年环境工程与新能源科学国际会议(EENES 2025)
  • x265开源编码器源码框架深度解析
  • 知识图谱【2】
  • 五、SpringBoot工程打包与运行