docker编译安卓镜像:Error closing trace writer: write /src/out/build.trace.gz: no space left on device 处理思路

使用docker 多次编译安卓生成docker 镜像,慢慢的居然磁盘不够用了,在其中一次编译过程中提示如下错误:

Failed to write file /src/out/build_error: write /src/out/build_error.tmp: no space left on device
Failed to write file /src/out/build_progress.pb: write /src/out/build_progress.pb.tmp: no space left on device
ninja failed with: exit status 1
Error closing trace writer: write /src/out/build.trace.gz: no space left on device

安卓的编译还是比较费磁盘空间的,上面就是直接把磁盘占满了,影响后续其他操作

可以看到上面基本是吧磁盘用光了

释放磁盘或增大磁盘空间

单纯从磁盘空间角度来看,这时候有1财大气粗的方式,扩容磁盘 2精打细算的方式,清空缓存 

1扩容磁盘

如果你是使用linux虚拟机编译安卓源码,可以参照下文连接进行磁盘扩容

磁盘扩容icon-default.png?t=N7T8https://blog.csdn.net/qq_37059136/article/details/140498324 直接将根目录扩容

2.清空缓存

(该方法会删除编译生成文件,再次编译虚重头编译极其费时,只在磁盘占满的时候应急操作)

在安卓源码根目录,就是能看到out子目录的目录

执行如下命令删除缓存

OUT_DIR=out

rm -rf ${OUT_DIR}/target/common/obj
rm -rf ${OUT_DIR}/soong/.bootstrap
rm -rf ${OUT_DIR}/soong/.intermediates
rm -rf ${OUT_DIR}/target/product/generic/obj
rm -rf ${OUT_DIR}/build-*
rm -rf ${OUT_DIR}/dist
rm -rf ${OUT_DIR}/staging

可以看到能释放80G左右的缓存,当然这跟你的编译次数有关

或着干脆将out目录删了,上述清理缓存的方式跟将out目录删了的方式都需要重新全部编译,还是挺费时间的,当然了先把他们删了释放电磁盘空间便于我们后面调整

ps: 可以在编译前执行一次make clean清除下缓存

比较建议的方法是增加磁盘空间,同事在编译之前执行make clean ;不建议直接删除out目录,因为下次编译会全量编译,极其耗时,但是如果磁盘爆满影响虚拟机运行,可以先删了

查找占用磁盘的元凶

当然了,上面的两个方法只能处理磁盘占满的问题,却没有处理磁盘为何不够的问题

切换root权限进入 / 目录

看到var目录很大,进入var目录再看

进入lib目录再看

好家伙原来是docker缓存占用了磁盘空间

进入docker再看

元凶找到了,居然是/var/lib/docker/overlay2 占用了大量磁盘

docker的overlay2中存的都是什么?

存的是我们的镜像文件和容器内的文件

直接执行 如下命令给他删了

#清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像) 

docker system prune

删完再看一下

总结:docker的问题

因为使用docker编译打包安卓镜像,docker将每次的镜像都缓存起来了,导致占用磁盘越来越大

上面的命令会删除所有docker缓存,包括安卓的编译容器,所以基本上需要重新加载容器

先docker images 看下当前容器,然后docker rmi +ID 全部删了

再 docker load ; docker run 重新进入docker编译

docker ps -a                    #查看当前运行的镜像
docker rm 镜像name               #删除镜像列表信息
docker images                   #查看当前载入的docker镜像
docker rmi 镜像id                #移除已加载镜像

重新load docker容器

#从镜像加载启动docker
sudo docker load -i /home/XXX/XXX/aospbuilder.tar
 
sudo docker run -it --privileged --hostname aospbuilder --name aospbuilder -v /home/lijilei/aosp:/src aospbuilder:v1 

#进入容器执行编译命令
cd /src
. build/envsetup.sh
lunch redroid_arm64-userdebug
m

#后续进入容器使用以下命令:
docker attach aospbuilder
#如果容器没有运行执行:
docker start aospbuilder

基本上就是这么个解决思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值