上一篇我们结束了 Linux 基础 IO 系列的讲解搞懂了文件操作的上层接口但始终绕不开一个核心问题程序操作的文件最终到底存在哪里这些二进制数据又是如何被硬件精准定位和读写的答案就是磁盘—— 作为计算机最核心的持久化存储硬件是所有文件系统的底层载体Linux 中一切文件的操作最终都会转化为磁盘的寻址和读写动作。这篇作为文件系统系列的开篇我们从磁盘的硬件本质出发一步步拆解它的物理结构、逻辑结构再讲清磁盘最核心的CHS 和 LBA 寻址机制最后通过fdisk -l命令实战解析 Linux 系统中的磁盘信息让你从根上理解「文件存储的底层逻辑」。文章目录一、先搞懂磁盘的基础认知与核心属性1.1 机械磁盘的核心硬件属性1.2 磁盘与服务器 / 机柜 / 机房的关联二、磁盘物理结构从硬件组件到核心读写原理2.1 核心硬件组件拆解附通俗类比2.2 磁盘的核心读写原理三、磁盘逻辑结构磁道 / 扇区 / 柱面文件存储的底层单位3.1 三大核心逻辑概念解析3.1.1 扇区Sector磁盘**最小的物理存储 / 读写单位**3.1.2 磁道Track磁头的「读写路径」3.1.3 柱面Cylinder磁盘寻址的**核心维度**3.2 磁盘容量的计算公式实例计算四、磁盘寻址机制CHS 与 LBA从硬件寻址到系统抽象4.1 CHS 寻址柱面 - 磁头 - 扇区的硬件原生寻址4.1.1 CHS 寻址的三步定位流程4.1.2 CHS 寻址的局限性4.2 LBA 寻址操作系统友好的线性地址抽象4.2.1 LBA 寻址的核心思想4.2.2 LBA 与 CHS 的转换由磁盘固件完成4.3 CHS 与 LBA 的相互转换公式4.3.1 CHS 转 LBA 公式4.3.2 LBA 转 CHS 公式4.3.3 实例计算重点理解地址映射场景 1CHS (2,1,3) 转 LBA场景 2LBA100 转 CHS五、实战用 fdisk -l 命令解析 Linux 磁盘 / 分区信息5.1 执行 fdisk -l 命令需 root 权限5.2 fdisk -l 输出内容逐行解析5.2.1 磁盘整体信息解析5.2.2 分区信息解析5.3 实战小技巧六、常见坑 避坑指南误区 1将扇区当作文件系统的最小存取单位误区 2认为 LBA 是磁盘的硬件寻址方式误区 3混淆磁道的编号方向误区 4认为柱面是物理结构误区 5扇区号与 LBA 地址均从 0 开始编号七、总结与下一篇预告本节核心总结下一篇预告一、先搞懂磁盘的基础认知与核心属性在深入结构之前我们先建立对磁盘的基础认知明确它的硬件定位、核心特性以及和服务器、机柜、机房的关联贴合实际的 Linux 运维场景。1.1 机械磁盘的核心硬件属性我们日常所说的磁盘狭义上指机械硬盘HDD它是计算机中唯一的机械设备和固态硬盘SSD的纯电子存储不同机械磁盘通过磁介质实现数据存储核心特性可以总结为 4 点存储介质盘片表面的磁涂层无数小磁铁颗粒通过磁铁的南北极编码存储 0 和 1读写速度相对较慢寻道、旋转存在物理延迟顺序读写约 100-200MB/s随机读写性能更差容量与价格容量大、性价比高目前消费级可达 10TB 以上企业级可达百 TB 级别设备类型典型的块设备以固定大小的块为单位进行读写底层最小单位是扇区。补充机械磁盘与固态硬盘的核心区别固态硬盘SSD基于闪存芯片存储无机械结构读写速度快顺序读写可达 GB/s 级别但同等容量价格更高而机械磁盘依靠机械运动读写速度慢但容量大、成本低是服务器中持久化存储的主流选择也是我们本篇讲解的核心。1.2 磁盘与服务器 / 机柜 / 机房的关联磁盘并非单独存在而是作为服务器的外设部署这是 Linux 运维的基础常识简单梳理三者的关系服务器提供计算、存储服务的核心设备磁盘直接挂载在服务器上本地磁盘或通过 SAN/NAS 等方式连接网络存储机柜收纳服务器、交换机、磁盘阵列等设备的物理载体起到规整、固定、保护的作用一个机柜可部署多台服务器机房集中部署机柜、服务器的专业场所具备稳定供电双路市电 UPS 发电机、恒温散热、安防监控、网络带宽等保障设施中小公司可通过租赁机房机柜 / 服务器使用。简单说机房→机柜→服务器→磁盘这是企业级磁盘存储的物理部署链路。二、磁盘物理结构从硬件组件到核心读写原理机械磁盘的所有读写操作都基于其物理结构的机械运动我们先拆解它的核心硬件组件再讲清底层的读写原理用「通俗类比」让抽象的硬件结构变得易懂。2.1 核心硬件组件拆解附通俗类比机械磁盘的内部核心硬件由盘片、主轴、磁头、磁头臂、永磁铁组成各组件分工明确协同完成数据读写用一张表格讲清每个组件的作用和类比硬件组件核心作用通俗类比关键细节盘片Platter数据存储的物理载体写字的「纸」多为圆形金属盘表面有磁涂层一个磁盘可包含多个盘片每片有上下两个盘面主轴马达驱动盘片旋转带动纸旋转的「马达」以固定转速旋转常见 7200 转 / 分钟、15000 转 / 分钟服务器多为 15000 转磁头Head读取 / 写入磁盘的磁信号写字 / 读字的「笔」每个盘面对应一个磁头磁头不直接接触盘片悬浮在盘片表面磁头臂支撑并带动磁头做径向移动控制笔移动的「手臂」所有磁头固定在同一磁头臂上磁头臂移动时所有磁头同步「共进退」永磁铁驱动 / 定位磁头臂控制手臂移动的「动力源」为磁头臂的径向移动提供动力保证磁头的精准定位2.2 磁盘的核心读写原理磁盘的读写操作本质是磁头、盘片、磁头臂的协同机械运动核心可以总结为 3 个关键点也是磁盘读写存在物理延迟的根本原因盘片旋转主轴带动所有盘片以固定转速旋转让磁头能够扫过盘片的不同区域磁头悬浮磁头在盘片表面的纳米级气垫上悬浮距离约 0.1-0.3 微米避免直接接触造成盘片磨损即「磁盘坏道」磁头臂径向移动磁头臂带动所有磁头沿盘片的半径方向移动让磁头定位到盘片的不同环形区域配合盘片旋转实现全盘面的覆盖。简单说磁盘读写的过程就是磁头臂移动定位磁道→盘片旋转让目标区域到达磁头下方→磁头完成读 / 写的过程。三、磁盘逻辑结构磁道 / 扇区 / 柱面文件存储的底层单位磁盘的物理结构是机械运动的基础而逻辑结构是为了方便数据的管理和寻址将物理的盘片抽象为「磁道、扇区、柱面」三个核心概念这也是文件系统对磁盘进行管理的底层基础所有文件的存储最终都会映射到磁盘的逻辑结构上。3.1 三大核心逻辑概念解析磁盘的逻辑结构是基于物理结构的抽象所有概念都围绕「磁头的运动和盘片的旋转」展开我们逐个拆解结合物理结构理解3.1.1 扇区Sector磁盘最小的物理存储 / 读写单位盘片旋转时磁头在盘片表面划出的轨迹是同心圆而每个同心圆被等分为若干个弧段这个弧段就是扇区。标准大小512 字节部分新磁盘支持 4K 扇区即「高级格式化」但向下兼容 512 字节核心属性磁盘的硬件最小单位任何读写操作都不能小于一个扇区即使只写 1 个字节也会占用整个扇区编号规则每个磁道的扇区从 1 开始依次编号这是后续 CHS 与 LBA 转换的关键。3.1.2 磁道Track磁头的「读写路径」盘片表面以盘片中心为圆心的同心圆环形区域就是磁道是磁头在盘片上的读写路径。编号规则从盘片的外圈到内圈依次编号0 磁道、1 磁道、2 磁道……0 磁道是盘片的最外圈也是磁盘的重要区域若 0 磁道损坏磁盘将无法使用核心属性同一盘片的不同磁道扇区数量相同磁道之间存在间隙用于磁头的切换和定位间隙不存储数据。3.1.3 柱面Cylinder磁盘寻址的核心维度当磁盘包含多个盘片时所有盘片中半径相同的磁道在空间上会形成一个圆柱状的结构这个结构就是柱面。核心特性由于所有磁头固定在同一磁头臂上共进退磁头臂移动时所有磁头会同时定位到不同盘片的同一柱面寻址意义柱面是磁盘硬件寻址的核心单位定位柱面就是定位所有盘片的同半径磁道大幅减少磁头的移动次数提升寻址效率。3.2 磁盘容量的计算公式磁盘的总容量由其逻辑结构的四个参数决定容量计算公式是理解磁盘存储的基础也是后续寻址转换的前提磁盘总容量 磁头数 × 柱面数磁道数 × 每磁道扇区数 × 每扇区字节数磁头数等于磁盘的总盘面数每个盘面对应一个磁头柱面数等于单个盘片的磁道数所有盘片的磁道数相同每磁道扇区数单个磁道被划分的扇区数量所有磁道的扇区数相同每扇区字节数标准为 512 字节。实例计算假设某磁盘有 4 个盘片8 个盘面即 8 个磁头单个盘片有 1024 个磁道柱面数 1024每磁道 63 个扇区每扇区 512 字节计算总容量容量 8 × 1024 × 63 × 512 8×102481928192×63516096516096×512264241152 字节 转换为GB264241152 ÷ 1024 ÷ 1024 ÷ 1024 ≈ 0.246GB四、磁盘寻址机制CHS 与 LBA从硬件寻址到系统抽象所谓寻址就是磁盘找到目标数据所在位置的过程。磁盘的寻址机制分为两种CHS 寻址硬件层的物理寻址和LBA 寻址操作系统层的逻辑抽象寻址。CHS 是磁盘硬件的原生寻址方式而 LBA 是为了解决 CHS 的局限性为操作系统设计的友好寻址方式也是 Linux 系统实际使用的寻址方式。4.1 CHS 寻址柱面 - 磁头 - 扇区的硬件原生寻址CHS 寻址是磁盘硬件层面的原生寻址方式全称Cylinder-Head-Sector柱面 - 磁头 - 扇区通过三个参数唯一确定一个扇区的位置也是磁盘机械运动的直接体现。4.1.1 CHS 寻址的三步定位流程由于磁头臂「共进退」的特性CHS 寻址遵循先定位柱面→再选择磁头→最后等待扇区旋转到位的流程和磁盘的机械运动完全匹配这也是最有效率的硬件寻址方式定位柱面Cylinder磁头臂带动所有磁头沿径向移动让所有磁头同步定位到目标柱面即不同盘片的同半径磁道选择磁头Head确定目标数据所在的盘面选择该盘面对应的磁头其余磁头闲置扇区旋转到位Sector主轴带动盘片旋转让目标扇区旋转到选中磁头的正下方此时磁头即可对该扇区进行读 / 写操作。4.1.2 CHS 寻址的局限性CHS 寻址是磁盘硬件的原生方式但受限于硬件设计和地址位宽存在最大容量支持的限制这也是其被 LBA 寻址取代的核心原因早期 BIOS 和磁盘固件对 CHS 的地址位宽做了限制8 位存储磁头数最大 256、10 位存储柱面数最大 1024、6 位存储扇区数最大 63按此计算CHS 寻址支持的最大磁盘容量为256磁头 × 1024柱面 × 63扇区 × 512字节 8064MB ≈ 8.4GB当磁盘容量超过 8.4GB 时CHS 寻址无法覆盖整个磁盘因此操作系统引入了LBA 寻址对磁盘地址进行线性抽象。4.2 LBA 寻址操作系统友好的线性地址抽象LBA 寻址全称Logical Block Address逻辑块地址是操作系统为磁盘设计的线性地址抽象解决了 CHS 寻址的容量限制也是 Linux 等现代操作系统实际使用的磁盘寻址方式。4.2.1 LBA 寻址的核心思想LBA 将整个磁盘的所有扇区按照一定的顺序柱面→磁头→扇区进行连续的线性编号编号从0开始形成一个「一维数组」数组的下标就是 LBA 地址一个非负整数数组的元素就是磁盘的扇区核心特性操作系统只需通过一个唯一的 LBA 地址就能定位到目标扇区无需关心底层的柱面、磁头、扇区参数。4.2.2 LBA 与 CHS 的转换由磁盘固件完成LBA 是操作系统的抽象而磁盘硬件最终只能识别 CHS 地址因此LBA 地址到 CHS 地址的转换由磁盘的固件硬件电路 伺服系统自动完成操作系统无需参与这也是 LBA 寻址的便捷性所在。4.3 CHS 与 LBA 的相互转换公式虽然磁盘固件会自动完成 LBA 与 CHS 的转换但理解转换公式能帮助我们更深入地理解磁盘的地址映射也是后续学习文件系统「块」的基础。转换的前提已知磁盘的磁头数H_total和每磁道扇区数S_total且满足CHS 参数柱面号 C从 0 开始、磁头号 H从 0 开始、扇区号 S从 1 开始LBA 参数LBA 地址从 0 开始单个柱面的扇区总数C_sector H_total × S_total核心中间参数。4.3.1 CHS 转 LBA 公式LBA C × C_sector H × S_total S - 1公式解析扇区号 S 从 1 开始而 LBA 从 0 开始因此需要减 1进行地址对齐先计算目标柱面前的所有扇区数再计算目标磁头前的扇区数最后加上目标扇区的偏移量。4.3.2 LBA 转 CHS 公式1. 计算单个柱面扇区数C_sector H_total × S_total 2. 柱面号C LBA // C_sector // 表示整数除法取商 3. 磁头号H (LBA % C_sector) // S_total % 表示取余 4. 扇区号S (LBA % S_total) 1 1 对齐扇区的1开始编号4.3.3 实例计算重点理解地址映射已知条件磁盘磁头数 H_total4每磁道扇区数 S_total16单个柱面扇区数 C_sector4×1664。场景 1CHS (2,1,3) 转 LBALBA 2×64 1×16 3 - 1 128 16 2 146场景 2LBA100 转 CHS1. C 100 // 64 1 2. 余数 100 % 64 36H 36 // 16 2 3. 余数 100 % 16 4S 4 1 5 最终CHS(1,2,5)五、实战用 fdisk -l 命令解析 Linux 磁盘 / 分区信息fdisk是 Linux 中最常用的磁盘分区与信息查看工具而fdisk -llist命令用于列出系统中所有磁盘的硬件信息、分区信息是我们排查磁盘问题、理解磁盘结构的核心命令本节结合实际输出逐行解析命令的输出内容将前面的理论知识落地到实际操作。5.1 执行 fdisk -l 命令需 root 权限在 Linux 系统中fdisk -l需要root 或 sudo 权限才能执行直接执行会提示权限不足执行方式# 查看系统中所有磁盘/分区的信息 sudo fdisk -l # 查看指定磁盘的信息推荐避免输出过多 sudo fdisk -l /dev/vda5.2 fdisk -l 输出内容逐行解析以云服务器中常见的/dev/vda磁盘为例给出命令的典型输出并结合前面的扇区、柱面、磁头等概念逐行解析所有关键概念与理论知识一一对应# 磁盘整体信息 Disk /dev/vda: 42.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 Sectors Size Id Type /dev/vda1 * 2048 83875364 83873317 40.0G 83 Linux5.2.1 磁盘整体信息解析输出行核心解析关联知识点Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors磁盘设备名/dev/vda容量 42.9GB总字节数 42949672960总扇区数 83886080扇区是磁盘最小单位总扇区数 总容量 / 512Units sectors of 1 * 512 512 bytes命令输出的单位为扇区1 个扇区 512 字节扇区标准大小 512 字节Sector size (logical/physical): 512 bytes / 512 bytes逻辑扇区 / 物理扇区大小均为 512 字节部分磁盘为 4K 物理扇区512 字节逻辑扇区向下兼容I/O size (minimum/optimal): 512 bytes / 512 bytes磁盘最小 / 最优 IO 操作大小均为 512 字节磁盘硬件最小读写单位为扇区Disk label type: dos磁盘的分区表类型为 DOS即 MBR 分区表常见分区表类型MBRDOS、GPT支持大容量磁盘Disk identifier: 0x000b2d99磁盘的唯一标识符用于区分不同磁盘无实际寻址意义仅为标识5.2.2 分区信息解析Linux 中磁盘的分区设备名规则/dev/磁盘名分区号如/dev/vda1表示/dev/vda磁盘的第 1 个分区核心列解析列名核心解析关键细节Device分区设备名如/dev/vda1Boot启动分区标记带*表示该分区是系统启动分区存放引导程序Start/End分区的起始 / 结束扇区号分区的范围由扇区号确定是磁盘分区的底层依据Sectors分区包含的总扇区数分区大小 扇区数 ×512 字节Size分区的直观容量由扇区数换算而来方便查看Id分区类型 ID83 表示Linux 主分区82 表示 Linux 交换分区ef 表示 EFI 分区Type分区类型描述与 Id 对应如 83 对应 Linux5.3 实战小技巧计算分区的实际容量以/dev/vda1为例扇区数 83873317容量 83873317×51242943138304 字节≈40.0GB与输出的Size一致区分磁盘与分区Linux 中磁盘设备名无数字如/dev/vda、/dev/sda分区设备名带数字如/dev/vda1、/dev/sda2查看 GPT 分区表磁盘对于大容量磁盘2TB通常使用 GPT 分区表fdisk -l会显示Disk label type: gpt并列出 GPT 分区的相关信息。六、常见坑 避坑指南学习磁盘底层原理时很多人会因混淆物理 / 逻辑概念、硬件 / 系统抽象陷入误区这里整理了最常见的 5 个误区帮你避坑误区 1将扇区当作文件系统的最小存取单位错误认知磁盘的最小单位是扇区所以文件系统也以扇区为单位存取正确认知扇区是磁盘硬件的最小单位而文件系统的最小存取单位是「块Block」后续讲解块是多个扇区的聚合常见 4KB8 个扇区文件系统不会逐个扇区读写效率过低。误区 2认为 LBA 是磁盘的硬件寻址方式错误认知操作系统用 LBA 寻址所以 LBA 是磁盘硬件的原生方式正确认知LBA 是操作系统的逻辑抽象磁盘硬件最终只能识别 CHS 地址LBA 到 CHS 的转换由磁盘固件自动完成操作系统无需关心。误区 3混淆磁道的编号方向错误认知磁道从盘片内圈到外圈编号正确认知磁道从外圈到内圈依次编号0 磁道是盘片最外圈也是磁盘的关键区域0 磁道损坏会导致磁盘无法识别。误区 4认为柱面是物理结构错误认知柱面是磁盘内部的一个物理圆柱结构正确认知柱面是逻辑结构是多个盘片的同半径磁道在空间上的抽象无实际的物理实体其核心意义是提升磁盘的寻址效率。误区 5扇区号与 LBA 地址均从 0 开始编号错误认知扇区和 LBA 的编号都是从 0 开始正确认知扇区号从 1 开始CHS 寻址的硬件规定LBA 地址从 0 开始操作系统的抽象规定这是 CHS 与 LBA 转换时需要加 1 / 减 1的根本原因。七、总结与下一篇预告本节核心总结本篇作为文件系统系列的开篇我们从磁盘的硬件本质出发完成了从物理结构到逻辑结构再到寻址机制的全流程讲解核心知识点可以总结为 5 点机械磁盘是计算机唯一的机械设备以磁介质存储数据是文件系统的底层持久化载体核心特性是「容量大、价格低、速度慢」磁盘物理结构由盘片、主轴、磁头、磁头臂、永磁铁组成所有磁头「共进退」读写依赖机械运动磁盘逻辑结构的核心是扇区最小硬件单位512 字节、磁道读写路径、柱面寻址核心维度磁盘容量由「磁头数 × 柱面数 × 每磁道扇区数 × 每扇区字节数」计算磁盘寻址机制分为 CHS硬件原生三步定位最大支持 8.4GB和 LBA系统线性抽象唯一编号无容量限制LBA 到 CHS 的转换由磁盘固件自动完成Linux 中用fdisk -l命令查看磁盘 / 分区信息分区的范围由起始 / 结束扇区号确定这是磁盘分区的底层依据。下一篇预告通过本篇的学习我们懂了磁盘如何通过 CHS/LBA 寻址定位到扇区但发现两个核心问题逐个扇区读写效率极低操作系统如何优化裸磁盘的扇区无法直接管理文件如何对磁盘进行逻辑抽象让其能够存储和管理文件下一篇我们将讲解文件系统的三大核心抽象块Block、分区Partition、inode索引节点解答「为什么扇区不适合直接作为文件存取单位文件的属性和内容如何分离存储」让磁盘从「裸硬件」变成「可管理文件的载体」敬请期待