/var 目录单独分区,占用率 100%,几乎没有剩余空间,docker 无法启动。因为 docker 服务无法启动,也就无法使用 docker system df
分析工具和 prune
清理命令,在不扩展分区的前提下,如何排查并解决问题呢?
先通过几次 du -sh * | sort -hr | head -n 10,定位到是 /var/ib/docker/overlay2/xxx 目录使用了超额存储空间,overlay2 是 docker 的文件系统目录,xxx 是文件系统的标识,表示应该是容器向内部目录写入了大量数据(如果是挂载的数据目录,就不会占用 /var/lib 分区)。
xxx 目录中,主要又是 merged 目录占据了超额空间,于是我们可以先准备一个脚本,打印所有容器的 merged dir ID,两相比较,定位到是某容器出现数据堆积。
如何恢复 docker 服务呢?可以通过 find 命令找到最大的日志文件,删除以腾出空间,便可以启动 docker 了。
最后,还需要修复数据堆积的问题,一方面,出现数据堆积的容器能否做一个堆积上限?另一方面,数据应该写入到 data 目录,而非 /tmp。