Root-Partition Filled

  • 当我在 docker 容器内 apt install 时,提示根分区即将爆满,所以查询相关内容解决问题。
  • 以下都是在 ubuntu20.04 下实验。

查找原因

关于 linux 的磁盘命令,都会使用 dhdf 命令,如果要找导致磁盘空间满的目录或文件,使用以下命令:

1
du -sh /path/to/* 2>/dev/null | sort -hr | head -10
  1. 发现 /var 的占空间太大,查询 /var 后,发现它是动态数据保存位置。主要保存缓存、日志以及软件运行所产生的文件,再次使用命令,查询 var 目录下的较大目录或文件
  2. 发现有几个目录占比非常大,lib, cache, log, tmp 等等,cache 可以直接删除,log 可以使用命令 journalctl --vacuum - time=7d,删除超过 7 天的旧日志,现在具体来看 /var/lib 目录
  3. 发现 /var/lib/docker 占 40 多个 G,原来镜像的位置保存在这个目录,当然很大,具体查看 overlay2 的性质。现在针对这个目录做一些操作。一般 /home 目录非常大,所以如果把 docker 里的镜像位置都放在 /home 目录,那么会大大减少根分区的磁盘空间,那么开始操作!

修改 Docker 镜像默认存储位置

由于系统初始分区的原因,导致操作系统中对应根分区不会太大,通过 /var 目录不会单独分区。而 docker 镜像默认存储位置是在 /var/lib/docker 下,是使根分区爆炸。
查看 docker 容器存放位置:sudo docker info | grep "Docker Root Dir"

使用软链接

解决默认存储容量不足的情况,最直接且最有效的方法就是挂载新的分区到该目录。但是在原有系统空间不变的情况下,所以采用软链接的方式,修改镜像和容器的存放路径达到同样的目的。

1
2
3
mv /var/lib/docker /path/to/docker
ln -sf /path/to/docker /var/lib/docker
systemctl restart docker

指定容器启动参数

在配置文件中指定容器启动的参数 –graph=/var/lib/docker 来指定镜像和容器存放路径。

Reference

本文作者:jujimeizuo
本文地址https://blog.jujimeizuo.cn/2024/10/07/root-partition-filled/
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0 协议。转载请注明出处!