一、磁盘1. 特点机械磁盘是计算机中唯一的一个机械设备磁盘— 外设慢容量大价格便宜2. 物理结构磁盘的读写的基本单位是一个扇区512不同位置可能疏密不一样3. 如何写入初步理解CHS写入数据就得找最小写入单元扇区。1找到哪一面磁头编号header2在当前面中哪一个磁道cylinder3磁道中第几个扇区sectorCHS定位。逻辑结构LBA每个磁道将其想象成一条直带每个扇区就是上面的一个区域。这样每一个扇区就有了一个线性地址也就是数组下标这种地址叫LBALogical Block Address真实过程因为所有磁头的运动都是相同的那么每个磁头在其对应盘片的运动也相同所以我们要把所有磁头的运动整体来看现在我们不再关注到盘面把角度放在每一个柱面上再理解CHS定位首先找到柱面Cylinder再通过磁头Head找对应磁道再确定扇区Sector。那么也就变成了二维扇区数组那么整个磁盘就是多个柱面也就是有多个二维数组表磁盘就成了个三维数组。注意尽管我们知道这个多维逻辑但是实际上终究还是一维就像C/C中的二维数组本质还是一维线性一样。所以每一个扇区都有一个下标叫做**LBA地址也就是线性地址。OS只要用LBA**就行了。LBA与CHS的转换1CHS - LBA三维转一维C柱面从0开始编号H磁头从0开始编号S扇区从1开始编号LBA地址从0开始的下标。给一组CHS**4, 5, 6**转成LBA已知单个柱面总扇区数A 磁头数 M* 单磁道扇区数NCHS**4, 5, 6**在第5张柱面上在第6个磁头对应磁道上在第6个扇区上。直接得LBA4 * A 5 * N 6 - 1.2LBA - CHS一维转三维“//”: 表示除取整CLBA // AH(LBA % A) // NS(LBA % N) 1二、文件系统1. 最小“块”硬盘属于典型块设备。操作系统读取硬盘数据时不会逐个扇区读取效率过低而是一次性连续读取多个扇区也就是读取一个数据块。硬盘分区会被划分成若干数据块块的大小在格式化时设定设定后无法修改常见大小为 4KB通常由连续8 个扇区组合构成。块是文件存储与存取的最小单位。注意知道LBA块号 LBA/8知道块号LAB块号*8 n. (n是块内第几个扇区)2. 磁盘“分区”磁盘可以划分成多个分区。在 Windows 系统里一块磁盘常会分出 C、D、E 等盘符这些盘符对应的就是磁盘分区分区本质上也是对硬盘的格式化操作。分治思想而 Linux 系统中所有设备均以文件形式呈现分区同样遵循对应的分区规范来划分管理。柱面是分区的最小单位可通过参考柱面编号划分分区本质就是设定每个分区的起始柱面与结束柱面编号。3. 盘区“分组”在分区之后文件系统还会对其分组4. 块组结构1. 文件 内容 属性。在Linux中文件内容和文件属性分开存储**2. 一个组里应该包含什么内容**文件数据 管理数据的数据文件属性inode Table 与 文件内容Data Blocks管理数据Block Bitmap管理数据inode Bitmap管理数据GDT整个分区只有一张 GDT块组描述符表放在分组 0 的开头这张 GDT 里有所有块组的描述信息每个分组占 32 字节为了防损坏这张同一份 GDT 会在某些块组里做备份不是每个组都有GDT 到底存什么每个分组在 GDT 里对应一条 “描述符”记录这个组的块位图在哪一块这个组的inode 位图在哪一块这个组的inode 表从哪块开始空闲块数、空闲 inode 数、目录数……管理数据Super Block1.作用整个文件系统的总档案、总账本2.存放位置分区开头块组 0 里3.存核心全局信息分区总块数、总 inode 数量块大小、inode 大小空闲块、空闲 inode 总数块组数量、挂载状态、文件系统版本4.特点损坏 整个分区大概率打不开、数据读不出会在多个块组做冗余备份防止丢失5. 和 GDT 区别超级块管整个分区全局整体信息块组描述符表 GDT管每一个小块组的明细信息
搞懂文件系统:从磁盘分区到挂载,Linux 存储管理实战指南(上)
发布时间:2026/5/25 14:56:09
一、磁盘1. 特点机械磁盘是计算机中唯一的一个机械设备磁盘— 外设慢容量大价格便宜2. 物理结构磁盘的读写的基本单位是一个扇区512不同位置可能疏密不一样3. 如何写入初步理解CHS写入数据就得找最小写入单元扇区。1找到哪一面磁头编号header2在当前面中哪一个磁道cylinder3磁道中第几个扇区sectorCHS定位。逻辑结构LBA每个磁道将其想象成一条直带每个扇区就是上面的一个区域。这样每一个扇区就有了一个线性地址也就是数组下标这种地址叫LBALogical Block Address真实过程因为所有磁头的运动都是相同的那么每个磁头在其对应盘片的运动也相同所以我们要把所有磁头的运动整体来看现在我们不再关注到盘面把角度放在每一个柱面上再理解CHS定位首先找到柱面Cylinder再通过磁头Head找对应磁道再确定扇区Sector。那么也就变成了二维扇区数组那么整个磁盘就是多个柱面也就是有多个二维数组表磁盘就成了个三维数组。注意尽管我们知道这个多维逻辑但是实际上终究还是一维就像C/C中的二维数组本质还是一维线性一样。所以每一个扇区都有一个下标叫做**LBA地址也就是线性地址。OS只要用LBA**就行了。LBA与CHS的转换1CHS - LBA三维转一维C柱面从0开始编号H磁头从0开始编号S扇区从1开始编号LBA地址从0开始的下标。给一组CHS**4, 5, 6**转成LBA已知单个柱面总扇区数A 磁头数 M* 单磁道扇区数NCHS**4, 5, 6**在第5张柱面上在第6个磁头对应磁道上在第6个扇区上。直接得LBA4 * A 5 * N 6 - 1.2LBA - CHS一维转三维“//”: 表示除取整CLBA // AH(LBA % A) // NS(LBA % N) 1二、文件系统1. 最小“块”硬盘属于典型块设备。操作系统读取硬盘数据时不会逐个扇区读取效率过低而是一次性连续读取多个扇区也就是读取一个数据块。硬盘分区会被划分成若干数据块块的大小在格式化时设定设定后无法修改常见大小为 4KB通常由连续8 个扇区组合构成。块是文件存储与存取的最小单位。注意知道LBA块号 LBA/8知道块号LAB块号*8 n. (n是块内第几个扇区)2. 磁盘“分区”磁盘可以划分成多个分区。在 Windows 系统里一块磁盘常会分出 C、D、E 等盘符这些盘符对应的就是磁盘分区分区本质上也是对硬盘的格式化操作。分治思想而 Linux 系统中所有设备均以文件形式呈现分区同样遵循对应的分区规范来划分管理。柱面是分区的最小单位可通过参考柱面编号划分分区本质就是设定每个分区的起始柱面与结束柱面编号。3. 盘区“分组”在分区之后文件系统还会对其分组4. 块组结构1. 文件 内容 属性。在Linux中文件内容和文件属性分开存储**2. 一个组里应该包含什么内容**文件数据 管理数据的数据文件属性inode Table 与 文件内容Data Blocks管理数据Block Bitmap管理数据inode Bitmap管理数据GDT整个分区只有一张 GDT块组描述符表放在分组 0 的开头这张 GDT 里有所有块组的描述信息每个分组占 32 字节为了防损坏这张同一份 GDT 会在某些块组里做备份不是每个组都有GDT 到底存什么每个分组在 GDT 里对应一条 “描述符”记录这个组的块位图在哪一块这个组的inode 位图在哪一块这个组的inode 表从哪块开始空闲块数、空闲 inode 数、目录数……管理数据Super Block1.作用整个文件系统的总档案、总账本2.存放位置分区开头块组 0 里3.存核心全局信息分区总块数、总 inode 数量块大小、inode 大小空闲块、空闲 inode 总数块组数量、挂载状态、文件系统版本4.特点损坏 整个分区大概率打不开、数据读不出会在多个块组做冗余备份防止丢失5. 和 GDT 区别超级块管整个分区全局整体信息块组描述符表 GDT管每一个小块组的明细信息