### [VPS磁盘100%但找不到大文件?从df、du、inode到已删未释放文件排查](https://www.jiyueip.com/article/13247) **Published:** 2026-07-29T14:42:32 **Author:** 斑斓助理 **Excerpt:** VPS显示磁盘已满时,df和du可能因已删未释放文件、挂载点、保留空间或inode耗尽而结果不同。本文给出只读检查顺序、安全释放思路和扩容前验证项。 VPS磁盘显示100%,却用`du`找不到对应大文件,先不要盲目删除日志、数据库或容器目录。`df`观察文件系统整体已用空间,`du`统计当前目录树可见文件;已删除但仍被进程打开的文件、挂载边界、文件系统保留空间和inode耗尽,都可能让两者看起来矛盾。 ## 先确认是容量满,还是inode满 ``` df -h df -i ``` | 结果 | 含义 | 下一步 | | --- | --- | --- | | Use%接近100% | 文件系统数据块接近耗尽 | 定位目录、已删文件、保留空间和挂载 | | IUse%接近100% | 小文件数量耗尽inode | 定位缓存、会话、邮件、构建产物等小文件密集目录 | | 两者都正常 | 故障可能不在当前挂载点 | 核对应用使用的卷、容器卷与实际路径 | 磁盘容量和inode是两种不同资源。还有可用GB却无法创建文件,常见原因就是inode耗尽;反过来,inode充足也不能解决数据块已满。 ## 第一步:确定哪个文件系统真的满了 不要直接从根目录无边界扫描。先用`df -h`找到已满的挂载点,再在该文件系统内统计一级目录: ``` sudo du -x -h --max-depth=1 /目标挂载点 2>/dev/null ``` `-x`用于限制在同一文件系统内,避免把其他磁盘、网络存储或容器挂载混入结果。逐级缩小到异常目录后,再检查日志、备份、上传文件、包缓存、数据库、容器层和临时文件。 不要把`du`输出直接按名称猜测后删除。数据库数据目录、容器存储和系统日志都有各自的清理方式,绕过应用直接删除可能造成数据损坏。 ## 第二步:检查已删未释放文件 Linux进程可以继续持有已经从目录中删除的文件。目录项消失后,`du`不再统计它,但只要进程仍打开该文件,文件系统空间就不会释放。可以只读检查: ``` sudo lsof +L1 ``` 重点看文件大小、进程名、PID和挂载点。常见情形是日志文件被删除后,Web服务、数据库或其他守护进程仍向旧文件描述符写入。 处理时不要直接杀死不明进程。先确认进程角色、服务影响和可用维护窗口;对支持日志重新打开的服务使用其正式轮转或重载方式,必要时安排受控重启。完成后再次运行`df -h`,确认空间是否释放,并检查服务是否恢复正常。 ## 第三步:df和du是不是看了不同的边界 以下情况也会产生差异: - 目录下后来挂载了另一文件系统,原目录中的旧文件被挂载点遮住; - 容器使用独立层、命名空间、卷或日志驱动; - 快照、文件系统元数据或写时复制占用没有表现为普通文件; - 命令统计时文件仍在快速增长或删除; - `du`没有权限读取部分目录,错误又被忽略; - 文件系统为管理员或紧急操作保留了部分数据块。 先查看挂载关系和文件系统类型,再决定使用何种工具。不要为了让两个数字“看起来一样”而改文件系统保留比例;该空间可能用于防止根分区完全失控,修改前要理解文件系统和恢复需求。 ## 第四步:日志、容器和数据库分别查 ### 系统日志 ``` journalctl --disk-usage ``` 先查看日志总占用和轮转配置。清理前确认需要保留的审计周期,并使用日志系统支持的保留策略;直接删除正在使用的日志可能再次造成已删未释放文件。 ### 容器存储 查看镜像、容器、卷和构建缓存各自占用,并核对业务是否仍引用。所谓“未使用”要由当前编排和恢复需求确认,不能在生产机上直接执行大范围自动清理。 ### 数据库 数据库空间应从库表、日志、临时文件、归档和备份策略定位。不要在文件系统层直接删除数据文件或事务日志。先做一致性备份、确认保留规则,再通过数据库支持的方式处理。 一般的日志、Docker与数据库安全清理顺序,可继续参考[VPS磁盘空间满后的分类定位方法](https://www.jiyueip.com/article/8318)。本文重点解决的是`df`与`du`不一致的隐藏占用。 ## 第五步:inode满时怎么找小文件来源 inode耗尽通常不是一个大文件,而是大量小文件。先在已满挂载点内按目录统计文件数量,逐级缩小到缓存、会话、邮件队列、解压目录、构建产物或异常任务。 定位过程中避免跨越其他挂载点,也不要在业务高峰启动无边界的全盘`find`扫描。大量目录遍历本身会消耗I/O。找到来源后,应修复生成策略、过期机制和轮转,而不是只清一次等它再次占满。 ## 磁盘已满时的安全处置顺序 1. 暂停会继续大量写入的非关键任务,避免故障扩大; 2. 保存`df`、inode、挂载和服务状态等初始证据; 3. 优先清理明确可再生成且不被业务使用的临时数据; 4. 对日志、容器和数据库使用各自支持的清理方法; 5. 处理已删未释放文件时,安排服务重载或受控重启; 6. 释放少量空间后先确认系统、SSH和关键服务稳定; 7. 再做完整清理、扩容或数据迁移,并设置告警。 如果系统已经无法写日志、登录或启动服务,应优先通过云控制台、救援环境或服务商支持恢复最小管理能力。不要在缺少备份时尝试文件系统修复或批量删除。 ## 扩容完成为什么系统里还是原容量 云平台扩大虚拟磁盘,只是增加了块设备容量。操作系统可能仍需要扩展分区、LVM逻辑卷和文件系统。具体步骤取决于分区表、LVM、文件系统类型和根分区结构,不能把某一套命令通用于所有VPS。 扩容前应创建可恢复备份或快照,记录分区与挂载信息,并确认平台文档。快照与异地备份的恢复边界可参考[VPS快照、文件备份和异地恢复的区别](https://www.jiyueip.com/article/8622)。 ## 故障恢复后补上三类告警 - 容量阈值:监控已用百分比和可用空间趋势; - inode阈值:监控文件数量增长,尤其是缓存与会话目录; - 增长来源:监控日志、容器、数据库、备份和上传目录的日增长。 告警要留出排查时间,不应等到100%才通知。还要验证日志轮转、备份保留和临时文件清理是否真正执行,而不是只写了配置。 VPS磁盘100%而`du`找不到大文件时,正确顺序是先区分容量与inode,再锁定挂载点,检查已删未释放文件、挂载边界和专用存储,最后才决定清理或扩容。保留初始证据、一次只处理一个来源,比盲目删除更容易恢复,也能防止同类故障重复发生。 **Tags:** Linux服务器, VPS, VPS监控, 云服务器, 服务器运维 **Categories:** 网络技术 ---