28 节省磁盘空间

28 在构建期间节省磁盘空间

要在构建期间节省磁盘空间,可以在 Build Directory 中项目的 build/conf/local.conf 配置文件里添加以下语句:

INHERIT += "rm_work"

添加此语句后,每个配方构建完成时,都会删除构建该配方所用的工作目录。 关于 "rm_work" 的更多信息,见 Yocto Project 参考手册的 rm_work 类。

在 Ubuntu 22.04 x86-64 系统上为 qemux86-64 机器构建 core-image-sato 镜像时,继承此类可使最终磁盘占用从 140 GB 降至 22 GB。 不过,开始时仍需要 40 GB 可用磁盘空间,以便创建随后 才会删除的临时文件。

28 清理过时的共享状态缓存文件

经过多轮构建后,共享状态(sstate)缓存可能包含同一软件包的多个缓存文件, 占用大量磁盘空间,而通常只有最新的文件才有可能被复用。

以下命令可快速清理至少指定天数未使用的所有缓存文件:

find build/sstate-cache -type f -mtime +$DAYS -delete

上述命令利用了 BitBake 的行为:当它具有缓存写权限时,访问共享状态缓存 文件会更新文件时间戳。

对于只读缓存,如果所在分区挂载时没有使用 noatime 选项,可以用 -atime 替换 -mtime。

对于更复杂的需求,OpenEmbedded-Core 还提供了更细致的命令。它可以为每种 架构仅保留最新缓存文件,还可以检查一组构建配置,删除其认为无法使用的文件。 但此命令需要完整的构建环境,跨多个发行版本时效果不佳,也无法在基于 BSD 的 NAS 等受限环境中运行:

sstate-cache-management.py --remove-duplicated --cache-dir=sstate-cache

此命令会要求确认待删除的文件。运行 sstate-cache-management.py 可了解 脚本的更多信息。

备注

此命令更加谨慎,只选择性地删除缓存文件,因此执行速度远慢于上述简单的 find 命令。若要缩减巨大的缓存目录,它可能不是最佳选择。