跳到主要内容

主机资讯与使用指南

VPS 磁盘占满怎么处理:目录定位、Docker 和日志清理

先确认空间与 inode,再定位大目录,区分应用数据、Docker 镜像和系统日志。

先看是哪块磁盘满了

磁盘满会导致数据库写入失败、应用报错或更新中断。先查看文件系统空间和 inode,确定出问题的挂载点。

df -h
df -i

容量没满但 inode 耗尽,常见于大量小文件;两种情况的处理方式不同。不要看到根目录用量高就先删除数据库或上传目录。

从大目录逐级定位

sudo du -xhd1 / 2>/dev/null
sudo du -xhd1 /var 2>/dev/null
sudo du -xhd1 /srv 2>/dev/null

从输出中占用最大的目录继续向下检查。-x 限制在同一文件系统,避免把其他挂载点一起算入;服务器数据在其他磁盘时,对那个挂载点另查。

du 需要遍历目录,大量文件会花时间。先看一级目录,再看具体项目,通常比一次列出全盘所有文件更容易定位。

Docker 占用先区分镜像与数据

sudo docker system df
sudo docker ps -a

旧镜像、构建缓存和停止容器可以按用途清理,数据卷则可能保存数据库。先确认哪些项目已经不用,再删除对应对象;不要把带 --volumes 的批量清理命令当作普通腾空间步骤。

容器日志不断增长时,安排 Docker 日志轮转并在合适时间重建容器应用配置。正在写入的日志不要随意移走;先查看是哪个服务持续产生大量日志。

查看系统日志保留量

sudo journalctl --disk-usage

确认旧日志不再需要后,可以按时间设置保留,例如 journalctl --vacuum-time=14d。日志是故障线索,处理正在发生的问题时先保存相关记录,再清理历史文件。

df 和 du 对不上时

已删除但仍被进程打开的文件,可能继续占空间;权限、挂载位置和文件系统保留空间也会造成差异。需要时用 lsof +L1 查看已删除文件的打开情况,确认对应服务后再安排重启。

清理完成后再次查看 df,并检查数据库和应用是否恢复写入。空间主要被正常数据占用时,转移旧备份、采用外部存储或扩容,比反复删除缓存更有效。

有剩余容量却不能创建文件

df -i
df -h

df -h 看容量,df -i 看 inode。大量缓存或小文件可能耗尽 inode,即使磁盘仍有 GB 空间也无法创建文件。

定位文件密集的应用目录,按应用支持的方式清理缓存和过期文件。数据库目录、容器数据卷不能当作缓存直接删除。

日志和 Docker 占用分别看

sudo journalctl --disk-usage
docker system df

系统日志与 Docker 镜像、构建缓存、容器和卷分别占空间。先确认哪些资源仍在使用,再安排清理。

docker compose down -v 会删除项目声明的卷;docker volume prune 也可能清理暂时没有容器引用但仍有数据的卷。保存备份并确认用途后才处理数据卷。

磁盘扩容后还要看文件系统

控制台云盘已经扩容,但 df 仍显示旧容量时,查看 lsblk 的磁盘与分区大小。普通分区可能还需要 growpart,之后按 ext4 或 XFS 扩展文件系统。

完整步骤见 ECS 扩容文章。其他平台也要使用实际设备名,不把示例中的 /dev/vda1 当成所有服务器固定的系统盘。

相关阅读