章节摘要:文件系统是命令行之下不可见的一层,也是空间类故障的真正源头。本章从 inode 耗尽、句柄未释放、文件系统只读三起典型事故讲起,覆盖文件系统原理与挂载、权限与所有权、磁盘分区与故障处置。读完你能在"磁盘明明有空间却写不进文件"时从容应对,独立完成新盘的分区、格式化、挂载全流程,并读懂权限位串里的每一个字符。
阅读完本章,你应当能够:
从一块新磁盘到能存文件,中间有清晰的加工链路;故障排查则沿链路反向走。
磁盘故障的第一定律:表象在命令行,病根在链路上——分区、文件系统、挂载,逐层检查,无处藏身。
从一次 inode 耗尽事故讲起,拆解文件系统内部结构——超级块、inode 表、数据块——然后讲挂载如何把存储接入目录树,以及挂载配置文件怎么读、怎么写。
一次"服务读不了自己数据"的权限事故复盘。十位权限串逐位拆解,数字与符号两种修改方式,特殊权限位与属组协作的工程实践。
新盘上线四步曲与两大经典故障(已删不释放、文件系统只读)的完整处置流程,最后给出磁盘日常巡检清单。
三节从原理到治理到处置:3.1 建立内部结构模型,3.2 讲文件之上的人为规则,3.3 回到物理介质的全生命周期。
3.1 内部结构 ──► 3.2 权限规则 ──► 3.3 磁盘全流程 inode 块 挂载 十位串 chown 分区 格式化 挂载 │ │ │ └── 空间故障模型 ──┘ └── 处置与巡检收口
空间类故障在本章有三个高频面孔,先混个脸熟,正文详拆。
| 面孔 | 典型报错 | 一句定位 |
|---|---|---|
| 真满了 | No space left on device | df 看使用率,du 找去向 |
| inode 满了 | 同上报错但 df 显示有空间 | df 加 i 选项看 inode 使用率 |
| 句柄未释放 | df 满但 du 找不到大文件 | 查持有已删文件的进程并重启 |
磁盘是沉默的资产,它不会抱怨,只会用报错投票。学会听懂它的语言,是这一章的全部任务。
磁盘故障的排查有一个放之皆准的方法论:沿着"从请求到介质"的链路逐层定位。一次写文件失败,链路是:权限检查(第 3.2 节)→ 文件系统健康(第 3.1 节)→ 挂载状态(第 3.1 节)→ 分区与容量(第 3.3 节)→ 物理介质(第 3.3 节)。每层都有对应的观察点与工具,从上往下查,先排除软因素再怀疑硬件。这个方法论的价值在于防止跳步:直接怀疑硬件的人会白白换盘,直接怀疑权限的人会漏掉文件系统损伤。链路思维在第 2 章的"四问"里已经出现过一次,本章把它落到存储这条具体链路上——同一套思维,不同的地形,练的就是这种迁移能力。
学习本章时建议配合一台可以随意折腾的虚拟机:加盘、分区、格式化、模拟写满,每个动作都亲手做一遍。磁盘操作的手感只能在练习环境里积累,它的每一次失误在生产环境都太贵了。
还有一个建议给爱动手的读者:给自己布置三次"破坏性实验"。第一次,往一个测试分区里灌满小文件直到 inode 耗尽,亲眼看 df 两个版本输出的差异;第二次,用一个进程占住大文件再删除,复现"删了不释放",然后用定位命令找到它;第三次,构造一次非正常关机,观察文件系统检查的修复过程。三个实验覆盖本章三起事故的现场,做一遍胜过读三遍。生产环境的沉稳,来自测试环境里见过世面。
关于本章两个工具的版本差异也交代一句:分区与文件系统工具在不同发行版上的默认行为略有差别,比如日志式文件系统的默认参数、分区对齐策略。教程里的示例输出基于主流发行版的近期版本,你在自己机器上看到个别数字不同属于正常——关注结构而不是逐字对照,是使用任何技术文档的基本功。
磁盘管理的最后一课其实是预期管理:再完善的巡检也消灭不了故障,只能把故障从"深夜突袭"变成"白天预约"。抱着这个预期去用本章的清单,你会更从容。