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
相关产品推荐
相关产品推荐

