背景:
首先我在/home/nvidia/work下导入了一些镜像源码tar包。然后逐个load进去。当我 load -i dev-aarch64-18.04-20210423_2000.tar包的时候,出现
Error processing tar file(exit status 1): write /9818cf5a7cbd5a828600d9a4d4e62185a7067e2a6f2ee5629e404ed903f0f511/layer.tar: no space left on device
所以在我挂载好500G的盘之后,还是出现了空间不够的情况。
排查问题:
我在load之前和load之后的df -h情况如下
很明显,load进去的镜像存储到了/dev/mmcblk0p1里,而不是/dev/nvme0n1p1里
这是docker配置的问题
Docker 服务文件
/lib/systemd/system/docker.service
df -h 路径 //可以查看该路径挂在哪个盘,和该盘有多少可用空间
创建新的 Docker 数据目录
sudo mkdir /home/nvidia/work/DockerImagesLoad
编辑 Docker 服务文件:打开 /lib/systemd/system/docker.service
文件进行编辑。
sudo gedit /lib/systemd/system/docker.service
修改 ExecStart
行:找到包含 ExecStart
的行,并修改 --data-root
参数以指向新创建的 DockerImagesLoad
目录。
ExecStart=/usr/bin/dockerd --data-root=/home/nvidia/work/DockerImagesLoad -H fd:// --containerd=/run/containerd/containerd.sock
保存并关闭文件:保存您的更改并关闭编辑器。
重新加载 systemd 配置并重启 Docker 服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
验证更改:确认 Docker 是否正在使用新的数据目录,并检查该目录所在分区的空间情况。
df -h /home/nvidia/work/DockerImagesLoad
接下来,使用 docker load
命令加载 Docker 镜像文件了。
实际情况是:
改 docker.service文件之后,sudo docker images 就看不到任何东西了
这是正常现象,但是之前的镜像把老盘内存还是占用了
所以要清空老盘数据,把老盘内存释放出来
接着把docker.service文件改回去
又可以看到镜像了
【不建议这样做】 先不着急删除镜像,我要先把这些已下载的镜像移到新的地方去,也就是/home/nvidia/work/DockerImagesLoad/
sudo rsync -ah --progress /media/nvidia/d178aa96-a44b-44a2-ad85-d2626e1e134a1/datadd/docker/ /home/nvidia/work/DockerImagesLoad/
【建议】最好还是用docker通用的方式删除镜像
我们用 df -h 可以看到空间被释放出来了
然后再修改docker.service文件
然后再重新加载 systemd 配置sudo systemctl daemon-reload
并重启 Docker 服务 sudo systemctl restart docker
然后再一条条 sudo docker load -i 镜像。
最后sudo reboot重启
重启后验证
全部正常,至此,已解决