You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Proxmox虚拟机中Ubuntu 22.04 Docker实例根分区满但无法定位占用原因的求助

Proxmox虚拟机中Ubuntu 22.04 Docker实例根分区满但无法定位占用原因的求助

我在Proxmox虚拟机里部署了Ubuntu Server 22.04实例,还在上面跑了Docker。最近系统提示根分区快满了,系统信息显示:

Usage of /:                       99.9% of 136.94GB

用du和df确认后,确实是根分区/dev/sda2占满了:

Filesystem                      Size  Used Avail Use% Mounted on
/dev/sda2                       137G  137G     0 100% /

但我把整个目录树都翻了一遍,愣是没找到到底是什么文件或目录占用了这么多空间,实在搞不懂问题出在哪。

我查了不少帖子,看到大家都推荐用lsof | grep deleted来排查这类“隐形”占用,执行后确实查到了apache2相关的进程信息:

apache2    1913                             root    9u      REG                0,1          0         ...

但我是新手,不太明白怎么解读这个结果。我试着停掉apache2进程,但没解决空间占用的问题。另外还有人说可能是Docker后台进程在搞事情,可我完全不知道该怎么排查这个。


以下是针对这个问题的排查和解决建议:

处理已删除但被进程占用的文件

  • 先查看该apache2进程的详细文件关联:执行lsof -p 1913(这里的1913是你查到的进程ID),可以看到这个进程打开的所有文件,重点关注标记为deleted的条目,确认它们的大小和原路径。
  • 彻底重启apache2服务:单纯停止进程可能没效果,试试sudo systemctl restart apache2,重启后进程会释放已删除文件的句柄,对应的磁盘空间应该就能释放出来。如果重启没用,直接杀掉该进程再重启:sudo kill -9 1913,然后执行sudo systemctl start apache2。

排查Docker相关的磁盘占用

Docker很容易积累大量冗余资源,你可以按以下步骤排查:

  • 查看Docker磁盘使用情况:执行docker system df,这个命令会清晰列出镜像、容器、卷、构建缓存各自的占用空间。
  • 清理未使用的Docker资源:执行docker system prune -a(注意:这个命令会删除所有未使用的镜像、容器、网络和卷,执行前请确认哪些资源是你不需要的)。
  • 检查容器日志:部分容器会生成超大的日志文件,你可以用docker logs --tail 100 <容器名/ID>查看日志情况,或者直接定位日志文件(通常在/var/lib/docker/containers/<容器ID>/<容器ID>-json.log),如果日志过大,可以清空它:sudo truncate -s 0 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log,也可以配置日志轮转来避免以后再出现这个问题。

其他实用排查工具

  • 用ncdu可视化排查:先安装sudo apt install ncdu,然后运行ncdu /,它会扫描整个根目录并按大小排序显示,能帮你直观找到占用空间大的目录或文件。
  • 检查挂载异常:如果之前有挂载过外部磁盘,后来卸载了但仍有进程访问原挂载点,也会导致空间“隐形”占用。你可以用mount查看当前挂载情况,或者用lsof | grep "(deleted)"更精准地筛选已删除文件的关联进程。

备注:内容来源于stack exchange,提问作者Diegonu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:35:29