核心内容摘要
身体的颂歌:在“肉体摄影”中寻找真实与美的边界
目录前言
认识文件系统的硬件基础从机房到磁盘
1 机房、机柜、服务器与磁盘的层级关系
2 磁盘物理结构机械硬盘的 “五脏六腑”
3 磁盘存储结构磁道、柱面与扇区的三维布局
1.
1 磁道Track
1.
2 扇区Sector
1.
3 柱面Cylinder
1.
4 磁盘容量的计算方式
磁盘的逻辑结构从三维物理空间到一维线性地址
1 逻辑结构的核心思想把磁盘 “拉直” 成磁带
2 磁盘逻辑结构的真实映射
3 逻辑结构的优势
CHS 与 LBA 地址磁盘寻址的两种方式
1 CHS 寻址基于物理结构的传统寻址方式
3.
1 CHS 寻址的工作原理
3.
2 CHS 寻址的局限性
2 LBA 寻址基于逻辑结构的现代寻址方式
3.
1 LBA 寻址的工作原理
3.
2 LBA 寻址的优势
3 CHS 与 LBA 地址的相互转换
3.
1 转换前的准备参数
3.
2 CHS 转换为 LBA
3.
3 LBA 转换为 CHS
3.
4 转换的实际应用场景
4 实战用 bash 命令查看磁盘的 CHS 和 LBA 信息
3.
1 查看磁盘的基本信息
3.
2 计算磁盘的 CHS 参数
3.
3 验证分区的 LBA 地址
硬件底层与 Ext 文件系统的关联
总结前言在 Linux 系统中Ext 系列文件系统Ext2/Ext3/Ext4无疑是最核心的存储基石。
我们每天用touch创建文件、用cp复制数据、用rm删除内容却很少思考这些操作背后的硬件底层是如何工作的。
文件数据是如何在机械磁盘中存储的磁头、磁道、柱面这些硬件概念和文件系统有什么关联CHS 和 LBA 地址又是如何实现数据精准定位的今天这篇文章我们就从硬件底层出发一步步揭开 Ext 系列文件系统的硬件工作原理带大家走进磁盘存储的微观世界。
下面就让我们正式开始吧
认识文件系统的硬件基础从机房到磁盘要理解 Ext 系列文件系统首先得搞清楚它赖以生存的硬件环境。
从宏观的机房到微观的磁盘扇区每一层硬件都在为文件存储提供支撑。
1 机房、机柜、服务器与磁盘的层级关系在互联网架构中存储数据的硬件设备有着清晰的层级结构。
最顶层是机房这里是所有硬件设备的 “家”配备了恒温、恒湿、防静电、防雷击等专业设施确保设备稳定运行。
机房里整齐排列着一个个机柜机柜就像 “货架”承载着服务器、交换机、存储阵列等核心设备。
服务器是数据处理和存储的核心单元而我们今天的主角 ——磁盘就是服务器的重要外设。
与 CPU、内存等高速电子设备不同机械磁盘是计算机中唯一的机械设备这也决定了它 “容量大、价格便宜但速度慢” 的特性。
我们平时存储的文件、数据库数据、日志等最终都会落脚到磁盘这个物理载体上。
2 磁盘物理结构机械硬盘的 “五脏六腑”如果把磁盘拆开我们会发现它的内部结构并不复杂主要由盘片、磁头、磁头臂、主轴、永磁铁等部件组成就像一个精密的 “机械玩具”。
盘片Platter这是磁盘存储数据的核心载体类似我们日常用的光盘表面涂有一层磁性材料数据就是通过改变磁性材料的极性来存储的。
一个磁盘通常会有多个盘片叠放在一起就像一叠 CD 光盘。
磁头Head负责读取和写入盘片上的数据相当于我们写字的 “笔”。
每个盘片的上下两面都对应一个磁头也就是说一个有 3 个盘片的磁盘会有 6 个磁头。
磁头非常精密工作时会悬浮在盘片表面的气垫上距离盘片仅有几纳米几乎快要接触到盘片但又不会碰到这也是为什么磁盘工作时不能剧烈晃动的原因。
磁头臂Actuator Arm磁头被固定在磁头臂的末端磁头臂可以带动磁头在盘片的半径方向上移动从而让磁头能够访问盘片上不同位置的数据。
主轴Spindle所有盘片都固定在主轴上主轴会以恒定的转速旋转常见转速有 7200 转 / 分、15000 转 / 分带动盘片一起转动让磁头能够连续访问盘片上的不同扇区。
这些部件协同工作就构成了机械磁盘的物理基础。
数据的读写过程本质上就是磁头在旋转的盘片上移动、定位并进行磁性操作的过程。
3 磁盘存储结构磁道、柱面与扇区的三维布局了解了磁盘的物理部件后我们再来看数据在磁盘上的存储布局。
从物理层面看数据被存储在盘片的磁性涂层上其存储结构可以分为磁道、柱面和扇区三个关键概念三者构成了一个三维的存储地址空间。
1.
1 磁道Track当盘片高速旋转时磁头在盘片表面划出的圆形轨迹就是磁道。
我们可以把磁道想象成盘片上的一个个同心圆从盘片的外圈到内圈磁道被依次编号为 0 磁道、1 磁道、2 磁道…… 需要注意的是靠近主轴的最内圈磁道通常不存储数据而是用于磁头的停靠和校准。
每个磁道的宽度非常窄一盘磁盘的盘片上通常会有数千个磁道。
由于磁道是圆形的外圈磁道的周长比内圈磁道长但它们存储的数据量却是相同的这就导致外圈磁道的存储密度比内圈磁道低这也是机械磁盘存储效率的一个小遗憾。
1.
2 扇区Sector为了方便数据的读写和管理每个磁道又被划分成了多个相等的扇形区域这就是扇区。
扇区是磁盘存储数据的最小物理单位每个扇区的大小固定为 512 字节这是行业标准后续虽然出现了 4KB 扇区的磁盘但 512 字节扇区的兼容性仍被广泛支持。
扇区的编号从 1 开始注意不是从 0 开始每个磁道上的扇区数量通常是相同的比如 63 个。
这样一来每个扇区就可以通过 “磁头 磁道 扇区” 的组合来唯一标识这也是后续 CHS 寻址方式的基础。
1.
3 柱面Cylinder前面提到一个磁盘有多个盘片每个盘片有上下两个盘面每个盘面都有自己的磁头和磁道。
那么所有盘面上半径相同的磁道就会构成一个圆柱形的空间这个空间就是柱面。
柱面是一个非常重要的逻辑概念它的数量等同于单个盘面上的磁道数量。
为什么柱面如此重要因为所有磁头都由同一个磁头臂带动能够 “共进退”—— 当磁头臂移动时所有磁头会同时移动到各个盘面的同一半径位置也就是同一个柱面上。
这意味着访问同一个柱面上的数据时不需要移动磁头臂只需要切换不同的磁头即可这能极大地提高数据读写效率。
1.
4 磁盘容量的计算方式了解了磁头、磁道柱面、扇区的概念后我们就可以计算磁盘的总容量了。
磁盘的容量计算公式如下磁盘容量 磁头数 × 柱面数磁道数× 每道扇区数 × 每扇区字节数举个例子假设一个磁盘有 2 个磁头1 个盘片上下两面1024 个柱面每个磁道有 63 个扇区每个扇区 512 字节那么这个磁盘的容量就是2 × 1024 × 63 × 512 65536 × 63 4128768字节 4032KB
9375MB虽然这个例子中的磁盘容量很小但它清晰地展示了磁盘容量的计算逻辑。
实际应用中的磁盘磁头数、柱面数和每道扇区数都会大得多从而实现更大的存储容量。
磁盘的逻辑结构从三维物理空间到一维线性地址磁盘的物理结构是三维的磁头、柱面、扇区但这种三维结构对操作系统来说并不友好 —— 操作系统更习惯用线性的地址来管理存储资源。
为了解决这个问题我们需要将磁盘的三维物理结构映射为一维的逻辑结构这就引出了LBALogical Block Address逻辑块地址的概念。
1 逻辑结构的核心思想把磁盘 “拉直” 成磁带我们可以做一个形象的比喻磁带是一种线性存储设备数据被顺序存储在磁带上访问数据时需要从磁带的一端依次查找。
而磁盘虽然是三维物理结构但从逻辑上看我们可以把它想象成一卷卷起来的磁带 —— 当我们把这些 “磁带”磁道拉直后磁盘上的所有扇区就会形成一个连续的线性序列每个扇区都对应一个唯一的线性地址这个地址就是 LBA 地址。
这种逻辑结构的转换让操作系统不再需要关心磁盘的物理结构磁头、柱面、扇区只需要通过 LBA 地址就可以访问任意扇区的数据极大地简化了操作系统对磁盘的管理。
2 磁盘逻辑结构的真实映射前面我们提到所有磁头是 “共进退” 的这意味着磁盘的物理访问顺序是按柱面优先的 —— 先访问完一个柱面上的所有扇区再移动磁头臂访问下一个柱面。
这种物理访问特性也决定了逻辑 LBA 地址与物理 CHS 地址的映射关系。
从逻辑上看磁盘的扇区排列顺序是这样的先访问柱面 0 上的所有扇区依次访问每个磁头盘面对应的磁道每个磁道上的扇区按编号从 1 到 n 依次排列柱面 0 的所有扇区访问完毕后磁头臂移动到柱面 1重复步骤 1 的过程依次类推直到所有柱面的扇区都被排列完毕。
这种排列方式就像把磁盘的三维物理空间柱面 C、磁头 H、扇区 S“扁平化” 成了一维的 LBA 地址序列。
每个 LBA 地址都对应着唯一的一个物理扇区而 LBA 地址与物理 CHS 地址之间的转换则由磁盘的固件硬件电路和伺服系统自动完成不需要操作系统干预。
3 逻辑结构的优势磁盘逻辑结构的
核心价值在于 “屏蔽物理细节简化管理”。
具体来说它有以下几个优势简化地址管理操作系统只需要维护一个线性的 LBA 地址空间不需要关心磁头、柱面、扇区的物理分布提高访问效率由于 LBA 地址是连续的操作系统可以很容易地实现连续存储和顺序读写而磁盘固件会根据物理结构优化访问路径兼容不同硬件不同厂商、不同规格的磁盘其物理结构磁头数、柱面数、扇区数可能不同但通过 LBA 地址的统一抽象操作系统可以无缝兼容这些不同的硬件设备。
CHS 与 LBA 地址磁盘寻址的两种方式磁盘的寻址方式有两种CHSCylinder-Head-Sector寻址和LBALogical Block Address寻址。
CHS 是基于磁盘物理结构的寻址方式而 LBA 是基于逻辑结构的寻址方式。
两者之间可以相互转换共同支撑起磁盘的数据访问功能。
1 CHS 寻址基于物理结构的传统寻址方式CHS 寻址是最早的磁盘寻址方式它直接使用磁盘的物理结构参数柱面号 C、磁头号 H、扇区号 S来定位扇区。
3.
1 CHS 寻址的工作原理CHS 寻址的过程非常直观就像我们在图书馆找书一样确定柱面号 C相当于找到书架所在的区域确定磁头号 H相当于找到书架的某一层确定扇区号 S相当于找到该层书架上的某一本书。
通过这三个参数的组合就可以唯一确定一个物理扇区。
例如CHS 地址C0H1S5表示的是第 0 个柱面、第 1 个磁头盘面、第 5 个扇区。
3.
2 CHS 寻址的局限性CHS 寻址虽然直观但存在一个致命的缺陷 ——支持的磁盘容量有限。
这是因为早期的 BIOS 和操作系统对 CHS 地址的存储位数做了限制磁头号 H用 8 位存储最多支持 2^8256 个磁头柱面号 C用 10 位存储最多支持 2^101024 个柱面扇区号 S用 6 位存储最多支持 2^663 个扇区扇区号从 1 开始所以实际支持 63 个。
结合每个扇区 512 字节的标准CHS 寻址支持的最大磁盘容量为注这里的 1MB1048576 字节如果按 1MB1000000 字节计算大约是
4GB这个容量限制在早期的小容量磁盘时代不成问题但随着磁盘技术的发展当磁盘容量超过 8GB 后CHS 寻址就无法支持了。
这也促使了 LBA 寻址方式的诞生。
2 LBA 寻址基于逻辑结构的现代寻址方式LBA 寻址是为了解决 CHS 寻址的容量限制而设计的它将磁盘上的所有扇区按逻辑顺序编号形成一个线性的地址空间地址从 0 开始递增。
3.
1 LBA 寻址的工作原理LBA 寻址完全忽略磁盘的物理结构将磁盘视为一个由扇区组成的一维数组每个扇区对应一个数组下标即 LBA 地址。
操作系统访问磁盘时只需要给出目标扇区的 LBA 地址磁盘固件会自动将 LBA 地址转换为 CHS 地址然后定位到对应的物理扇区。
例如LBA 地址 0 对应磁盘的第一个扇区CHS 地址通常为 C0H0S1LBA 地址 1 对应下一个扇区以此类推。
3.
2 LBA 寻址的优势相比 CHS 寻址LBA 寻址有以下几个显著优势1支持大容量磁盘LBA 地址的位数不受限制现代系统通常用 32 位或 64 位存储 LBA 地址32 位 LBA 地址支持的最大磁盘容量为而 64 位 LBA 地址支持的最大容量更是达到了惊人的 18EB1EB1024PB1PB1024TB完全满足现代大容量磁盘的需求。
2简化操作系统实现操作系统不需要关心磁盘的物理参数磁头数、柱面数、扇区数只需要管理线性的 LBA 地址空间极大地简化了文件系统和磁盘驱动的实现。
3兼容性更好LBA 寻址是行业标准所有现代磁盘和操作系统都支持能够无缝兼容不同规格的存储设备。
3 CHS 与 LBA 地址的相互转换虽然现代操作系统都使用 LBA 寻址但磁盘固件仍需要将 LBA 地址转换为 CHS 地址才能访问物理扇区。
同时在某些特殊场景下如磁盘分区、系统启动也可能需要进行 CHS 与 LBA 地址的转换。
下面我们就来详细介绍两者的转换公式。
3.
1 转换前的准备参数在进行地址转换前我们需要知道磁盘的三个关键参数磁头数H_total磁盘的总磁头数量每磁道扇区数S_per_track每个磁道的扇区数量单个柱面的扇区总数S_per_cylinder这三个参数会存储在磁盘的固件中操作系统可以通过磁盘驱动获取。
3.
2 CHS 转换为 LBA已知一个扇区的 CHS 地址CHS将其转换为 LBA 地址的公式如下公式说明首先计算该扇区所在柱面之前的所有柱面占用的扇区总数C×Sper_cylinder然后计算该扇区所在磁头之前的所有磁头占用的扇区总数H×Sper_track最后计算该扇区在当前磁道中的偏移量S−1因为扇区号从 1 开始而 LBA 地址从 0 开始三者相加即为该扇区的 LBA 地址。
举个例子假设磁盘参数为 H_total2S_per_track63那么 S_per_cylinder2×63126。
如果 CHS 地址为C1H1S5则对应的 LBA 地址为
3.
3 LBA 转换为 CHS已知一个扇区的 LBA 地址将其转换为 CHS 地址CHS的公式如下公式说明柱面号 CLBA 地址除以单个柱面的扇区总数取整数部分磁头号 HLBA 地址对单个柱面的扇区总数取余结果再除以每磁道扇区数取整数部分扇区号 SLBA 地址对每磁道扇区数取余结果加 1因为扇区号从 1 开始。
继续用上面的例子LBA 地址 193磁盘参数 H_total2S_per_track63S_per_cylinder126。
则对应的 CHS 地址为与之前的 CHS 地址一致验证了转换公式的正确性。
3.
4 转换的实际应用场景CHS 与 LBA 地址的转换主要由磁盘固件自动完成但在以下场景中我们也可能会手动涉及磁盘分区在MBRMaster Boot Record分区表中分区的起始和结束地址会同时存储 CHS 地址和 LBA 地址用于兼容不同的寻址方式系统启动早期的 BIOS 启动程序使用 CHS 地址访问磁盘的引导扇区而现代 UEFI 启动程序则使用 LBA 地址磁盘故障排查当磁盘出现坏道时我们可以通过 LBA 地址定位到对应的物理扇区进行修复或屏蔽。
4 实战用 bash 命令查看磁盘的 CHS 和 LBA 信息在 Linux 系统中我们可以通过fdisk命令查看磁盘的 CHS 和 LBA 相关信息。
下面我们就来实战操作一下。
3.
1 查看磁盘的基本信息执行以下命令查看系统中的磁盘设备fdisk -l命令输出示例Disk /dev/vda:
4
9 GB, 42949672960 bytes, 83886080 sectors Units sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000b2d99 Device Boot Start End Blocks Id System /dev/vda1 * 2048 83875364 41936658 83 Linux从输出中我们可以获取以下关键信息磁盘总容量
4
9 GB总扇区数83886080LBA 地址范围从 0 到 83886079扇区大小512 字节分区 /dev/vda1 的起始扇区LBA2048结束扇区LBA83875364。
3.
2 计算磁盘的 CHS 参数由于现代磁盘容量较大fdisk命令默认不会显示 CHS 参数但我们可以通过总扇区数和磁盘的默认参数通常 H_total255S_per_track63来估算 CHS 参数。
根据磁盘容量公式我们可以推导出柱面数代入示例中的总扇区数 83886080假设 H_total255S_per_track63则这就是该磁盘的柱面数估算值。
3.
3 验证分区的 LBA 地址我们可以通过lsblk命令查看分区的详细信息验证 LBA 地址lsblk -o NAME,SIZE,START,END,TYPE命令输出示例NAME SIZE START END TYPE vda 40G 0 83886079 disk vda1 40G 2048 83875364 part输出中的START和END字段就是分区的起始和结束 LBA 地址与fdisk命令的输出一致。
硬件底层与 Ext 文件系统的关联看到这里可能有同学会问我们讲了这么多磁盘硬件和寻址方式这些和 Ext 系列文件系统有什么关系呢其实Ext 系列文件系统的核心功能就是在磁盘硬件的基础上实现文件的组织、管理和访问。
磁盘硬件提供了最底层的存储能力扇区存储而 Ext 文件系统则在这个基础上构建了一套逻辑结构块、inode、目录、分区等让用户能够通过文件名而非 LBA 地址来访问文件。
两者的关联可以
总结为以下几点扇区是文件系统的物理基础Ext 文件系统的最小存储单位是“块”Block而一个块由多个连续的扇区组成常见的块大小为 4KB即 8 个扇区。
文件系统的块分配、数据读写最终都会映射到磁盘扇区的读写。
LBA 地址是文件系统的寻址桥梁Ext 文件系统在管理块时会将块映射到对应的 LBA 地址范围。
当文件系统需要读写某个块时会通过 LBA 地址访问磁盘而磁盘固件会自动完成 LBA 到 CHS 的转换。
磁盘分区是文件系统的独立空间Ext 文件系统通常会安装在磁盘的一个分区上分区本质上是磁盘上的一个连续 LBA 地址范围。
文件系统只需要管理该分区内的 LBA 地址不需要关心其他分区的情况。
硬件特性决定文件系统的优化方向由于磁盘的磁头移动和盘片旋转需要时间Ext 文件系统会通过预分配块、优化 inode 布局、目录缓存等方式减少磁头移动次数提高数据访问效率这都是基于磁盘硬件特性的优化。
总结通过这些内容我们可以得出一个核心结论Ext 系列文件系统的底层依赖于磁盘硬件的存储能力和寻址方式。
磁盘硬件提供了扇区级别的存储而 LBA 寻址方式则为文件系统提供了统
高效的寻址接口。
理解这些硬件底层原理不仅能帮助我们更好地理解 Ext 文件系统的工作机制还能在实际应用中如磁盘分区、性能优化、故障排查提供理论支持。
在后续的文章中我们将在此基础上进一步讲解 Ext 系列文件系统的逻辑结构块、inode、目录、超级块等以及文件的创建、读取、修改、删除等操作的底层实现。
如果大家有任何疑问或想了解的内容欢迎在评论区留言讨论最后感谢大家的阅读如果这篇文章对你有帮助别忘了点赞、收藏、转发哦