Linux 云服务器磁盘满了怎么排查?容量、inode、日志与 Docker

从 df、du 差异到已删除文件和容器占用,安全定位 No space left on device

Linux 云服务器磁盘占满排查:区分容量和 inode,使用 df、du、lsof、journalctl 与 Docker 统计定位日志、打开文件和容器数据。

先只读定位:依次运行 df -h 看容量、df -i 看 inode、du 找目录、lsof +L1 查已删除但仍占用的文件,再看 journal 和 docker system df。不要先执行递归删除或 docker system prune -a。只读检查不改数据;扩盘会收费,误删数据库和容器卷会永久丢数据。

正确顺序是先确定哪个文件系统、容量还是 inode 出问题,再定位目录和进程。不要一上来执行批量删除或清理命令。

Linux 磁盘满的判断路径

Linux 云服务器从容量、inode、目录、打开文件到容器日志的磁盘满排查路径
df 与 du 解决的问题不同;两者不一致时还要检查已删除但仍打开的文件。

先确认容量还是 inode 耗尽

以下命令为只读检查:

df -Th
df -ih
lsblk -f

df -Th 查看文件系统容量,df -ih 查看 inode。大量小文件可能让 inode 先到 100%,此时仍有 GB 空间也无法创建新文件。

怎样定位占用最大的目录

只在目标文件系统内逐层查看,避免跨入其他挂载点:

sudo du -xhd1 /
sudo du -xhd1 /var
sudo du -xhd1 /var/log

根据上一层结果继续向下,不要在大型生产盘上无边界执行全盘排序。du 统计目录树占用,df 读取文件系统整体状态,两者口径不同。

df 很满但 du 找不到大文件怎么办

进程打开日志后,即使文件路径被删除,只要文件描述符仍未关闭,空间就不会释放。可用 lsof 检查:

sudo lsof +L1

发现大文件后应先确认进程与业务,再让服务正常重新打开日志或重启对应服务。不要直接操作 /proc/PID/fd 下未知文件。

systemd 日志占用怎样处理

先查看占用:

sudo journalctl --disk-usage

确认保留需求后,可按大小或时间清理归档日志。例如下面的大小只是示例,必须根据审计与排障需求确定:

sudo journalctl --vacuum-size=TARGET_SIZE

vacuum 主要处理归档 journal,活动文件不一定立即缩小。长期控制应通过 journald 配置和日志策略完成,而不是定期人工暴力清理。

Docker 为什么容易占满磁盘

  • 容器 JSON 日志没有轮转;
  • 旧镜像和构建缓存累积;
  • 停止的容器、匿名卷和临时数据未清理;
  • 应用把大量数据写进容器可写层;
  • 数据库卷持续增长。

先查看 Docker 自身统计:

docker system df
docker ps --size

docker system prune 等清理命令可能删除仍准备复用的镜像、缓存或网络,不能作为无脑的一键修复。卷尤其可能包含业务数据。

可以直接删除日志文件吗

不建议直接删除正在写入的日志。优先确认服务的 logrotate、journald 或容器日志驱动配置,再通过正常轮转和重新打开文件释放空间。删除前要确认审计、故障分析和合规保留要求。

临时止损和长期治理怎么区分

  • 临时止损:停止异常写入、释放已确认可删除的缓存或归档日志、恢复关键服务;
  • 长期治理:日志轮转、容量告警、inode 告警、Docker 日志上限、数据库保留、快照与扩容计划;
  • 扩容:当正常业务数据确实增长时扩大云盘,再按分区与文件系统流程处理。

清理后怎样验证

df -Th
df -ih
sudo du -xhd1 /var
sudo journalctl --disk-usage

还要检查原先失败的应用是否恢复写入、数据库是否正常、日志是否继续异常增长。空间下降一次不等于根因消失。

常见问题

为什么 df 100%,du 加起来却很小?

常见原因是已删除但仍被进程打开的文件,也可能是挂载覆盖、保留块或权限导致统计口径不同。

inode 满了扩容容量有用吗?

不一定。应先定位大量小文件的来源和保留策略;扩展文件系统是否增加 inode 取决于文件系统类型和结构。

能不能定时执行 docker system prune?

不建议在不了解资源用途时自动执行。应先配置日志轮转、镜像发布和缓存治理,再对可删除对象建立明确规则。

结果对应处理

  • 容量满:从同一文件系统逐层定位,确认文件用途和保留策略。
  • inode 满:找海量小文件,不能只删一个大日志。
  • df 满但 du 小:处理 deleted-open 文件对应进程,正常重启服务释放句柄。
  • Docker:先区分镜像、可写层、日志和 volume;volume 可能是唯一数据。

验收与回退

清理后检查容量、inode、应用写入、数据库、日志轮转和 Docker 重启。长期设置日志大小、监控和扩容计划。删除前做快照/备份;误清理或应用异常时停止继续删除,从快照或应用备份恢复。

Linux 云服务器磁盘满了怎么排查现场验收单

  • 入口或命令:SSH 进入服务器,依次 df -h、df -i、du、lsof +L1、journalctl 与 docker system df
  • 提交前风险:只读检查不收费;扩盘收费,误删数据库/容器卷会丢数据
  • 不能继续时:inode 满、deleted-open、journal、Docker layer/volume、挂载点遗漏、日志继续增长
  • 完成证据:容量和 inode 恢复安全余量,应用写入/数据库/日志轮转与重启均正常
  • 退出办法:删除前快照/备份;清理失败停写,从快照/备份恢复,不继续递归删除

完成这项任务后继续检查

官方资料

如果需要确认云平台账户、充值、云盘扩容或服务器排障方向,可通过 Telegram 联系 @heishayun。提供命令结果前请遮挡主机名、IP、路径和业务标识。

云服务器教程Vue、React 单页应用刷新后 404 怎么办?Nginx History 路由与 API 分流2026-09-13云服务器教程Docker 提示 pull access denied 怎么办?镜像名、仓库权限与登录排查2026-09-13云服务器教程MySQL 报 ERROR 1205 Lock wait timeout 怎么办?阻塞事务与安全止损2026-09-12

加入开发者交流社区

与全球开发者、运维和工作室一起交流技术、分享经验、配置、账号与最新优惠信息

  • 云平台使用交流
  • 资源优惠信息
  • 最新教程与资讯
  • 开发者经验分享
联系 Telegram 客服
加入开发者交流社区