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

Linux文件系统底层原理:从磁盘物理结构到LBA寻址

目录

  • Linux文件系统底层原理:从磁盘物理结构到LBA寻址
    • 1. 磁盘物理结构:机械与电子的完美协作
      • 1.1 硬盘的"多层蛋糕"结构 🍰
      • 1.2 数据定位的三维坐标:柱面-磁头-扇区
      • 1.3 磁盘容量计算公式与实例 🧮
    • 2. 地址方式演进:从CHS到LBA的跨越
      • 2.1 CHS寻址的局限性与8GB壁垒 🚧
      • 2.2 LBA寻址:给每个扇区编上唯一身份证号 🆔
      • 2.3 CHS与LBA的双向转换公式与实例 🔄
    • 3. 文件系统核心概念:块、分区与缓存
      • 3.1 块(Block):文件存取的最小单位 🧱
      • 3.2 分区:硬盘的"抽屉式收纳" 🗄️
      • 3.3 页缓存(Page Cache):内存中的"磁盘数据缓冲区" 🚀
    • 4. 文件系统引入:给无序磁盘注入秩序 📊
    • 思考题(大学生必备知识点)🤔

在这里插入图片描述
🌟个人主页 :L_autinue_Star

🌟当前专栏:linux

Linux文件系统底层原理:从磁盘物理结构到LBA寻址

1. 磁盘物理结构:机械与电子的完美协作

1.1 硬盘的"多层蛋糕"结构 🍰

机械硬盘(HDD)的内部结构类似多层蛋糕,每一层都是一个盘片(Platter),上下两面都可存储数据。想象一下:

  • 每个盘片像一张CD光盘,但表面覆盖着磁性材料
  • 磁头(Head) 就像唱片机的针头,悬浮在盘片表面几纳米处(比头发丝细1000倍!)
  • 主轴马达带动盘片高速旋转(常见7200转/分钟,相当于每秒120转)

💡 为什么硬盘怕震动?因为磁头与盘片间距太小,震动可能导致"磁头碰撞",就像让高速行驶的汽车突然撞上墙壁🚗💥

1.2 数据定位的三维坐标:柱面-磁头-扇区

磁盘存储的最小物理单位是扇区(Sector),每个扇区固定512字节。要找到一个扇区,需要三个坐标:

  • 柱面(Cylinder):所有盘片上半径相同的磁道组成的虚拟圆柱(机械臂移动一次定位一个柱面)
  • 磁头(Head):选择哪个盘面(每个盘面一个磁头)
  • 扇区(Sector):磁道上的扇形区域(盘片旋转到磁头下方)

1.3 磁盘容量计算公式与实例 🧮

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

实例计算:

磁头数 = 2(上下两个盘面)
柱面数 = 1024(磁道数)
每磁道扇区数 = 63
每扇区字节 = 512B总容量 = 2 × 1024 × 63 × 512 = 65,536, 字节 = 65.536 MB

📌 注意:早期硬盘确实如此计算,但现代硬盘会通过" zone bit recording"优化外圈磁道的扇区数,实际容量会更大

2. 地址方式演进:从CHS到LBA的跨越

2.1 CHS寻址的局限性与8GB壁垒 🚧

CHS寻址使用8bit磁头+10bit柱面+6bit扇区:

  • 最大磁头数 = 2⁸ = 256
  • 最大柱面数 = 2¹⁰ = 1024
  • 最大扇区数 = 2⁶ = 63(实际每磁道扇区数)

最大容量 = 256 × 1024 × 63 × 512B = 8,455,716,864B ≈ 8.4GB

这就是为什么早期BIOS只支持8GB以下硬盘!当硬盘超过8GB,CHS寻址就无能为力了😥

2.2 LBA寻址:给每个扇区编上唯一身份证号 🆔

LBA(Logical Block Addressing)将磁盘视为一维数组:

  • 每个扇区有唯一编号(从0开始)
  • 操作系统只需告诉硬盘LBA编号,转换为CHS的工作由硬盘固件完成

在这里插入图片描述

2.3 CHS与LBA的双向转换公式与实例 🔄

CHS转LBA公式

LBA = 柱面号C × (磁头数H × 每磁道扇区数S) + 磁头号h × 每磁道扇区数S + 扇区号s - 1

实例计算
已知:C=2, H=2(总磁头数), S=63(每磁道扇区数), h=1(磁头号), s=3(扇区号)

LBA = 2×(2×63) + 1×63 + 3-1 = 2×126 + 63 + 2 = 317

LBA转CHS公式

柱面号C = LBA // (H×S)
磁头号h = (LBA % (H×S)) // S
扇区号s = (LBA % S) + 1

验证LBA=317转CHS:

C = 317 // (2×63) = 317 // 126 = 2
h = (317 % 126) // 63 = 65 // 63 = 1
s = (317 % 63) + 1 = 2 + 1 = 3

完美还原原始CHS参数!✅

3. 文件系统核心概念:块、分区与缓存

3.1 块(Block):文件存取的最小单位 🧱

块是文件存取的最小单位,由连续扇区组成(常见4KB=8个扇区)

  • stat命令中的"I/O Block: 4096"表示块大小为4KB
  • 块大小对性能影响巨大:
块大小小文件(1KB)浪费空间大文件(1GB)碎片数
1KB0% (完美)1,048,576 块
4KB75% (浪费3KB)262,144 块
64KB98.4% (浪费63KB)16,384 块

💡 现代文件系统会根据文件类型动态调整块大小,如Ext4的"块组"机制

3.2 分区:硬盘的"抽屉式收纳" 🗄️

分区就像C、D、E盘,更准确地说:

  • 柱面是分区的最小单位
  • MBR分区表支持4个主分区(或3主+1扩展分区)
  • GPT分区表突破限制(支持128个分区,最大容量18EB)

查看分区表

fdisk -l /dev/sda  # MBR分区表
gdisk -l /dev/sda  # GPT分区表

在这里插入图片描述

3.3 页缓存(Page Cache):内存中的"磁盘数据缓冲区" 🚀

重要概念:

  • 操作系统将频繁访问的磁盘数据缓存到内存
  • 写操作先到缓存,后台异步写入磁盘(提高性能)
  • 查看缓存命中率:
    grep PageCache /proc/meminfo
    # 理想命中率应>95%
    

🚨 数据一致性风险:突然断电可能导致缓存数据丢失,解决方案→Ext4日志功能!

4. 文件系统引入:给无序磁盘注入秩序 📊

没有文件系统的磁盘就是"数据垃圾堆":

  • 文件系统记录:哪个块存了什么数据?文件从哪里开始到哪里结束?
  • 支持文件名、权限、创建时间等元数据
  • 解决数据碎片化问题

常见文件系统对比:

文件系统特点最大文件最大卷日志功能
Ext2无日志2TB32TB
Ext3有日志2TB32TB
Ext4extent+延迟分配16TB1EB
XFS高性能大文件8EB8EB

接下来将深入Ext4的内部结构!


思考题(大学生必备知识点)🤔

  1. 为什么磁盘读写时"连续块"比"分散块"快10倍以上?
  2. 计算:一个LBA地址为1000的扇区,在磁头数=4、每磁道扇区数=63的硬盘上,对应的CHS地址是什么?
  3. 为什么删除文件后"清空回收站"才能真正释放空间?(提示:inode与数据块的关系)

答案将在《Ext4文件系统全景解析》中揭晓!🔜

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

相关文章:

  • MySQL锁(一) 概述与分类
  • springboot03-一个简单的SSMP框架
  • MySQL详解三
  • 详解Mysql HashJoin加速原理
  • 乐观锁实现原理笔记
  • LINUX入门(二)QT的安装及运行环境搭建
  • 虚拟机动态IP配置
  • HTTP1-HTTP2-HTTP3简要概述
  • Qt的安装和环境配置
  • Slack介绍(一款专注于企业协作的沟通平台,旨在通过整合聊天、文件共享、任务管理及第三方工具集成,提升团队的工作效率)
  • 【智能协同云图库】第一期:用户管理接口设计与功能实现
  • 统计与大数据分析和数字经济:专业选择指南
  • 数位 dp
  • kafka生产端和消费端的僵尸实例以及解决办法
  • NumPy 库的基本运用
  • 服务器上的文件复制到本地 Windows 系统
  • 语音识别技术:从声音到文字的 AI 魔法
  • 【Linux】权限详解 权限本质、权限属性、su、sudo提权、chmod\chown\chgrp、文件类别
  • 【软件测试】使用ADB命令抓取安卓app日志信息(含指定应用)
  • imx6ull-系统移植篇11——U-Boot 移植(下)
  • 第三章-提示词-中级:进阶技巧与实践指南(12/36)
  • #SVA语法滴水穿石# (014)关于链式蕴含的陷阱
  • 【Linux】1. Linux操作系统介绍及环境搭建
  • golang踩坑之url不会decode问题
  • 深度学习图像分类数据集—八种贝类海鲜食物分类
  • 秒赤Haproxy配置算法
  • 【RK3576】【Android14】显示屏MIPI开发调试
  • 2025.7.20总结-实战演讲
  • 上海生物医药战略入主康华生物,康华生物开启高质量发展新篇章
  • Agentic-R1 与 Dual-Strategy Reasoning