Linux 磁盘满了怎么查:从 df、du 到 inode 的只读排查顺序
下载失败、服务无法写日志、软件提示没有空间,表面看是同一个问题,实际可能发生在不同分区。电脑还有一块空硬盘,不代表程序正在写入的文件系统有空间。先确定故障路径,再看容量,通常比直接删除大文件更有效。
下面命令面向使用 GNU 工具的常见 Linux 系统,主要用于只读检查。NAS 精简系统、BusyBox 和 macOS 的选项可能不同,应先看本机帮助。命令里的路径需要换成实际目录。
第一步:检查出错目录所在的文件系统
df -h /var/log
df -i /var/log
第一条关注容量,第二条关注 inode 使用情况。inode 可以理解为文件系统跟踪文件等对象所需的一类元数据资源;大量小文件可能使它先耗尽。看到“可用容量尚多”并不能据此排除空间问题。GNU Coreutils 手册
记录输出中的设备、挂载点、可用空间和使用率。若你以为数据应写到外接盘,实际却显示根分区,先确认挂载是否正常。不要在挂载失败时继续写入同名目录,否则数据可能堆在系统盘里。
第二步:逐层缩小目录,而不是遍历所有磁盘
假设问题位于 /var,可以先看下一层:
du -x -h --max-depth=1 /var
-x 限制在同一文件系统内,避免统计时跨入其他挂载点。再针对较大的目录重复检查,例如 /var/log。这只是定位方法,不代表这些目录都可以清空。
权限不足的提示应保留。非管理员看到的统计可能不完整;不要为了让数字变大而随意修改权限。如果确实需要管理员协助,让对方针对明确目录执行检查,而不是把整个系统开放给普通用户。
大目录扫描也会产生磁盘读取负载。繁忙服务器或正在恢复的硬盘不适合无休止地重复扫描,可以先缩小范围并选择低负载时段。
第三步:理解 df 与 du 为什么不完全相等
df 看文件系统的总体账目,du 沿可访问的目录统计占用,两者不是同一个口径。一个常见例子是日志文件已经被删除,但写入它的进程仍保持打开状态:目录里找不到它,空间却可能尚未释放。GNU 关于 df 与 du 差异的说明
遇到这种情况,不要继续删除更多文件。先找服务管理员检查文件句柄与日志轮转配置,安排安全的重新打开日志或服务维护。直接重启整台机器可能影响业务,也会丢掉有价值的故障现场。
另外,快照、稀疏文件、压缩、共享数据块及保留空间都会影响“看起来多大”和“实际占多少”的关系。特殊文件系统应使用它自身的管理工具进一步核实,不能把差额一概认定为损坏。
第四步:清理必须有对象、有依据、有回退
读完统计后,把候选项分成三类:可重新下载的缓存、需要保留的用户资料、由服务管理的数据。缓存也应通过对应程序的清理机制处理;数据库、容器数据、备份仓库和系统目录不能仅凭体积删除。
一个可执行的处理记录可以这样写:某服务的临时导出文件占用较大,确认已被正式归档,先移走一小批并验证服务,再按保留周期处理其余文件。这比“删掉最大的目录”更容易审查和恢复。
最后验证什么
重新运行同一路径的 df,确认空间变化;让原先失败的程序做一次小规模写入测试;确认日志仍持续产生,挂载点没有变化。若空间很快再次下降,说明增长源尚未解决,应回到应用日志、缓存上限或轮转设置继续定位。
排查磁盘满的目标不是把使用率压到某个好看的数字,而是让程序写入正确位置,并建立可以持续维护的增长边界。
延伸阅读
如果还伴随读写错误或异常掉盘,可以继续阅读SMART 硬盘健康检查,不要只把问题当作容量不足。