Linux:Ext系列⽂件系统(一)

我们学完了系统文件IO,但是没有对磁盘文件做一个了解,于是这个系列将解答一下磁盘存储相关知识

作为计算机系统里 "特殊" 的硬件 ------ 机械磁盘是唯一带机械设备的外设,它不像 CPU、内存那样靠纯电子元件工作,却凭借 "大容量、低成本" 的优势,成为数据持久化存储的核心。今天我们就从硬件基础到地址寻址,一步步揭开磁盘的底层秘密

下面是磁盘的图片:

一、计算机里的 "大块头":磁盘的硬件定位

在服务器、机柜乃至整个机房的硬件体系里,磁盘始终扮演着 "数据仓库" 的角色。我们先明确几个基础认知:

  • 磁盘的身份:属于计算机外设,不是核心运算部件,这意味着它的数据传输需要经过 I/O 总线,速度远慢于内存(内存是纳秒级,磁盘是毫秒级);
  • 机械属性:机械磁盘内部有高速旋转的盘片、可移动的磁头,是计算机中唯一的机械设备 ------ 这也是它 "慢" 的根源,但同时让它能以极低的成本提供大容量存储(比如 1TB 机械盘价格仅为同容量固态硬盘的 1/3);
  • **题外话:机房里的磁盘与 "磁铁"**机房里的磁盘通常以 RAID 阵列形式存在,确保数据可靠性;而磁盘的核心原理是 "磁记录"------ 盘片表面的磁性材料通过不同的磁化方向存储 0 和 1,拆开磁盘(非专业勿试!)能看到里面的永磁体,这就是 "磁铁" 的由来

下面是服务器,机柜,机房的相关图片:

二、磁盘的物理结构:三维空间里的 "数据格子"

要理解磁盘怎么存数据,得先拆穿它的 "物理真面目"。一块机械磁盘的核心部件包括:盘片(platter)、磁头(head)、传动臂、主轴电机,而数据存储的最小单元是扇区(sector)(512 字节,磁盘属于 "块设备",读写必须按扇区为单位)

我们可以把磁盘想象成多层的 "甜甜圈",每个 "甜甜圈" 的结构对应这些关键概念:

  1. 盘片:就是 "甜甜圈" 本身,一块磁盘通常有多个盘片,每个盘片有上下两个面(都能存数据)
  2. 磁头 :每个盘面对应一个磁头,负责读写数据 ------ 所有磁头固定在同一根传动臂上,共进退(这是关键细节,后面寻址会用到)
  3. 磁道(track):盘面上一圈圈的同心圆,从外圈到内圈编号(0 磁道、1 磁道......),靠近主轴的最内圈是磁头停靠区,不存数据
  4. 柱面(cylinder):所有盘面上相同编号的磁道合起来就是一个柱面(比如所有盘面的 0 磁道构成 0 柱面),柱面数量等于单个盘面的磁道数
  5. 扇区:每个磁道被切成若干扇形区域,就是扇区 ------ 每个磁道的扇区数量相同,这是数据存储的最小单位

磁盘容量怎么算?

记住这个公式:磁盘容量 = 磁头数 × 柱面数(磁道数) × 每磁道扇区数 × 每扇区字节数(通常512)比如一块磁盘有 2 个磁头、1024 个柱面、63 个每磁道扇区,容量就是:2×1024×63×512 = 6442450944 字节 ≈ 6.4GB

三、从三维到一维:CHS 寻址与 LBA 的诞生

知道了物理结构,接下来的问题是:怎么找到某个具体的扇区?这就引出了两种寻址方式。

1. CHS 寻址:早期的 "三维定位"

CHS 是磁头(Head)、柱面(Cylinder)、扇区(Sector)的缩写,是早期磁盘的寻址方式 ------ 就像在图书馆找书:先确定楼层(磁头)、再找书架(柱面)、最后定位某一层的书(扇区)

比如要找某个扇区,步骤是:① 传动臂带动磁头移动到目标柱面;② 磁头对准目标盘面;③ 盘片旋转,让目标扇区转到磁头下方

但 CHS 有个致命缺点:容量限制。早期系统用 8bit 存磁头数(最多 256 个)、10bit 存柱面数(最多 1024 个)、6bit 存扇区数(最多 63 个),算下来最大支持容量:256×1024×63×512B = 8064MB ≈ 8.4GB(按 1MB=1048576B 算)------ 这显然满足不了现代大容量磁盘的需求

2. LBA 寻址:把磁盘 "掰直" 成一维数组

既然 CHS 有局限,工程师们想到了一个办法:把磁盘的三维物理结构抽象成一维的线性地址 ------ 这就是 LBA(Logical Block Address,逻辑块地址)

为什么能 "掰直"?

我们可以做个类比:

  • 把单个柱面展开:每个柱面包含多个磁道(对应磁头数),每个磁道有多个扇区,相当于一个二维数组;
  • 把整个磁盘的所有柱面按顺序排列:就变成了一个三维数组;
  • 而计算机最擅长处理一维数组,所以我们给每个扇区分配一个唯一的 "下标"(从 0 开始),这个下标就是 LBA 地址
LBA 与 CHS 的转换:磁盘自己搞定!

OS(操作系统)不需要关心复杂的 CHS,只需要给磁盘传一个 LBA 地址,磁盘的固件(硬件电路 + 伺服系统)会自动完成转换:

  • CHS 转 LBALBA = 柱面号C × (磁头数×每磁道扇区数) + 磁头号H × 每磁道扇区数 + 扇区号S - 1(扇区号从 1 开始,LBA 从 0 开始,所以要减 1)
  • LBA 转 CHS柱面号C = LBA // (磁头数×每磁道扇区数)``磁头号H = (LBA % (磁头数×每磁道扇区数)) // 每磁道扇区数``扇区号S = (LBA % 每磁道扇区数) + 1

举个例子:磁头数 2,每磁道扇区数 63,LBA=1000C = 1000 // (2×63) = 1000//126 = 7余数 = 1000 % 126 = 1000 - 7×126 = 1000-882=118H = 118 // 63 = 1S = 118 % 63 +1 = 55 +1=56即 LBA=1000 对应 CHS:C=7,H=1,S=56

四、总结:磁盘寻址的本质

对我们(以及 OS)来说,磁盘就是一个 "元素为扇区的一维数组",数组下标是 LBA 地址 ------ 我们不用关心磁头怎么移动、盘片怎么旋转,只需要告诉磁盘 "我要访问 LBA=XXX 的扇区",剩下的底层转换全由磁盘固件完成

理解这些底层逻辑,不仅能搞懂 "磁盘为什么慢"(磁头移动、盘片旋转需要时间),也为后续学习文件系统(比如 EXT4、NTFS 怎么管理扇区)打下基础 ------ 毕竟所有文件的内容和属性,最终都是存在一个个扇区里的

但是你想一下,一个扇区只有512字节,也就是0.5kb,也太小了,不适合管理,在如今这种动不动就要几十上百kb的文件下,显得力不从心,所以下篇博客我们将讲解一下块,分区,组~~

相关推荐
专业开发者8 小时前
技术说明:基于 Wi-Fi Aware™的 Miracast® 应用
linux·运维·网络
拾光Ծ8 小时前
【linux】环境变量(详解)
linux·运维·服务器
电商API_180079052478 小时前
主流电商平台 API 横向测评:淘宝、京东、拼多多接口能力与对接成本分析
大数据·开发语言·网络·数据库·人工智能
落羽的落羽8 小时前
【C++】并查集的原理与使用
linux·服务器·c++·人工智能·深度学习·随机森林·机器学习
赵谨言8 小时前
基于OpenCV的数字识别系统
大数据·开发语言·经验分享·python
神奇的程序员15 小时前
从已损坏的备份中拯救数据
运维·后端·前端工程化
虾..16 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙17 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
玄斎17 小时前
MySQL 单表操作通关指南:建库 / 建表 / 插入 / 增删改查
运维·服务器·数据库·学习·程序人生·mysql·oracle