Linux之磁盘--硬件
前言学习 Linux Ext2/Ext3/Ext4 文件系统不能直接上手 inode、块组。文件系统运行在磁盘硬件之上必须先搞懂磁盘物理结构、逻辑寻址模型。本文按照目录脉络逐层梳理磁盘硬件体系为后续 Ext 文件系统原理打下底层基础。1. 硬件层级磁盘 → 服务器 → 机柜 → 机房从最小存储单元向上分层磁盘硬盘最小物理存储载体分为机械硬盘 HDD、固态硬盘 SSD服务器依靠磁盘持久化存储数据。在机房中使用的都是磁盘,第一是因为比较便宜,还有可以存储更多的空间服务器多块磁盘安装在同一台主机搭载 CPU、内存、网卡对外提供服务。机柜机房中标准化机架一台机柜可以堆叠数十台服务器统一供电、布线。机房大量机柜集中部署配套空调、UPS 不间断电源、消防、网络设备提供稳定运行环境。机房三问一、为什么会有机房互联网业务需要大量服务器 7×24 小时持续运行。 个人电脑无法满足稳定供电、恒温环境、大带宽、不间断运维、安全防护。 于是把成千上万台服务器集中放置统一配套供电、制冷、网络设施机房数据中心就此诞生。中小企业无力自建可租用第三方 IDC 机房体量巨大的大厂选择自建大型数据中心。二、为什么大多是大公司自建机房成本门槛极高土地、机房土建、空调、UPS、发电机组、光纤带宽、运维团队前期投入数十亿小企业负担不起。业务规模需求大厂海量用户、海量数据需要数万、数十万台服务器租用第三方机房长期成本更高自建更划算。数据安全与自主可控核心业务、用户敏感数据放在自有机房不受第三方托管服务商约束合规可控。定制化需求可以按需设计供电、制冷、机柜布局适配 AI 算力、存储集群等特殊硬件。三、大厂数据中心偏爱选址偏远地区电费是最大开销服务器空调常年运转电费占运营成本大头。偏远地区水电、风电等清洁能源充足电价更低。土地成本低廉大型机房占地极大一线城市土地昂贵偏远区域地价便宜。散热自然优势北方高海拔、寒冷区域可利用自然冷空气冷却减少空调耗电自然冷却大幅省电。层级关系磁盘属于服务器硬件服务器收纳于机柜机柜集中部署在机房。1-2 磁盘物理结构机械硬盘 HDD机械硬盘核心物理组件盘片Platter圆形磁性薄片正反两面均可存储数据一块硬盘可以包含多张盘片。磁头Head读写盘片上的数据一个盘面对应一个磁头读写时磁头悬浮在盘面上方不接触盘面。主轴电机带动所有盘片高速旋转常见 7200 转 / 10000 转。磁臂承载磁头负责径向移动切换不同同心圆轨道。核心概念磁道 (Track)盘面上一圈一圈同心圆。扇区 (Sector)磁道被切分出最小物理单元传统磁盘扇区大小 512 字节现代 4K 扇区。柱面 (Cylinder)所有盘片上半径相同的磁道构成一个柱面磁臂移动一次定位一个柱面。 机械硬盘读写开销寻道时间磁臂移动 旋转等待时间 数据传输时间。随机读写性能远弱于顺序读写。1-3 磁盘存储结构数据在磁盘上的组织层次由大到小磁盘 → 柱面 → 磁道 → 扇区一块硬盘由若干柱面构成单个柱面对应所有盘片同一半径磁道单条磁道分割为大量扇区扇区 磁盘最小物理读写单位硬件层面无法读写小于 1 个扇区的数据。1-4 磁盘逻辑结构操作系统不会直接操作原始磁道、扇区在内核和磁盘硬件之间建立逻辑抽象。1-4-1 理想化理解过程简化模型 操作系统把整块磁盘视为连续线性地址空间。上层程序读写文件 → 文件系统转换 → 访问磁盘连续扇区。 理想模型磁盘就是连续编号的块顺序读写效率一致不用关心物理磁道、柱面。1-4-2 真实硬件访问过程机械硬盘真实流程存在物理限制应用发起读写请求文件系统计算需要访问哪些磁盘块块设备驱动将块编号转换为磁盘地址磁盘执行磁臂移动寻道→ 等待扇区旋转到磁头下方 → 读写扇区。痛点随机访问需要频繁移动磁臂寻道开销巨大。 这也是文件系统设计优化的核心动机尽量让文件数据连续存放减少磁头移动。1-5 CHS 寻址 LBA 寻址两种磁盘寻址方式用来定位磁盘上唯一扇区。CHS 寻址老式寻址模式CCylinder 柱面号HHead 磁头号SSector 扇区号 通过(柱面,磁头,扇区三维坐标定位扇区。局限寻址范围有限只能支持小容量硬盘现代系统基本淘汰。LBA 寻址现代主流寻址LBA (Logical Block Address) 逻辑块寻址抛弃柱面、磁头、扇区物理概念把磁盘所有扇区从头到尾分配连续线性编号 LBA0、LBA1、LBA2……。 操作系统只需要传入 LBA 编号磁盘固件自动翻译成底层物理位置。 优点寻址空间巨大支持大容量硬盘屏蔽硬件物理细节操作系统更容易管理磁盘。补充内核中操作系统继续在 LBA 之上封装块blockLinux 默认块大小 4096 字节由多个物理扇区组成作为文件系统操作单位。1.文件内容属性,在linux系统,内容和属性是分开存的2.一个组里面要有文件数据和管理数据的信息a.写入管理信息的过程就叫做写入文件系统b.格式化就是重新写入管理信息但是文件的文件名不属于inode的属性inode是128字节理论上一个文件一个inodels -l -istruct ext2_inode { __u16 i_mode; // 文件类型、权限 __u16 i_uid; // 用户ID __u32 i_size; // 文件大小低32位 __u32 i_atime; // 访问时间 __u32 i_ctime; // 创建/属性修改时间 __u32 i_mtime; // 修改时间 __u32 i_dtime; // 删除时间 __u16 i_gid; // 组ID __u16 i_links_count; // 硬链接计数 __u32 i_blocks; // 占用块数量 __u32 i_flags; // 文件标志 __u32 i_reserved1; // 核心块指针数组12直接 1一级 1二级 1三级 __u32 i_block[15]; __u32 i_generation; __u32 i_file_acl; __u32 i_dir_acl; __u32 i_faddr; __u8 i_frag; __u8 i_fsize; __u16 reserved2[3]; __u32 reserved3[2]; };找文件时先找inode编号-inode table里面属性里面有i_blocks -datablocks的那个块,实现属性和文件内容的相关链接如何删文件inode Bitmap对应 bit 置为0标记 inode 空闲可以分配给新文件Block Bitmap遍历 inode 内部i_block[]所有数据块指针每个对应 bit 置0回收所有数据块填写 inode 的i_dtime删除时间拷贝 需要大量读写数据块删除 只修改少量元数据位图、inode、目录项完全不读写文件本体数据。超级块本身是整个文件系统唯一的全局元数据逻辑上只有一份为了防止损坏EXT2 会在多个块组存放超级块副本但不是每一个块组都一定存在副本。