我最近开始使用Bitbake来构建Yocto。每次我构建时,它都会消耗更多的空间,目前我的磁盘空间已经用完了。图像不会被覆盖。为每个构建创建一组带有时间戳的新文件。我已经删除了build/tmp/deploy/images/中的旧文件。但在磁盘可用空间方面没有太大的区别。还有其他地方可以删除内容吗?
我在构建过程中观察到的错误是:
WARNING: The free space of source/build/tmp (/dev/sda4) is running low (0.999GB left)
ERROR: No new tasks can be executed since the disk space monitor action is "STOPTASKS"!
WARNING: The free space of source/build/sstate-cache (/dev/sda4) is running low (0.999GB left)
ERROR: No new tasks can be executed since the disk space monitor action is "STOPTASKS"!
WARNING: The free space of source/build/downloads (/dev/sda4) is running low (0.999GB left)
ERROR: No new tasks can be executed since the disk space monitor action is "STOPTASKS"!
请提出一些建议,以避免这个问题。
3条答案
按热度按时间zsohkypk1#
按有效性和修复的容易程度排序:
***购买更多的磁盘空间:**将$TMPDIR放在自己的SSD上会有很大帮助,并且无需进行微观管理。
***删除$TMPDIR(build/tmp):**旧映像、旧软件包和您当前未构建的MACHINE的工作目录/sysroots会累积并占用大量空间。您通常可以偶尔删除整个$TMPDIR:只要你使用的是state-cache,下一次构建应该还是相当快的。
***删除$SSTATE_DIR(build/sstate-cache):**如果你做了大量的构建,sstate本身会随着时间的推移而积累。删除目录是安全的,但下一次构建将需要很长时间,因为所有内容都将重新构建。
***删除$DL_DIR(build/downloads):**如果您长时间使用一个build目录(从master中提取更新或更改到较新的分支时),过时的下载会占用磁盘空间。请记住,删除目录将意味着重新下载所有内容。只查看最大的文件并删除旧版本可能是一种有用的折衷方法。
cygmwpex2#
有一些官方的方式代替删除。
通过故意删除,您可能会强制执行不必要的构建和下载。构建的某些元素可能无法由bitbake控制,并且您可能会发现自己处于无法以简单的方式重建这些项目的情况下。
有了这些建议,你可以击败非书面的每次构建50 GB的yocto规则:
检查IMAGE_FSTYPES变量。根据我的经验,删除这些文件中不是符号链接或符号链接目标的所有图像是安全的。避免最后生成的一个,以避免破坏最后的构建链接,以及任何与引导加载程序和配置文件相关的链接,因为它们很少重新生成。
如果要保留具有同一组图层的多个版本,则可以使用一个公用下载文件夹来保存版本。
DL_DIR?=“common_dir_across_all_buildings/downloads/”
之后:
保持/deploy干净:
**RM_OLD_IMAGE:**通过从DEPLOY_DIR变量指向的镜像目录中删除同一镜像的以前构建版本来回收磁盘空间。在本地.conf文件中将此变量设置为“1”可删除以下镜像:
RM_OLD_IMAGE = "1"
IMAGE_FSTYPES删除您不打算使用的镜像类型,您可以在需要时启用特定的镜像类型:
IMAGE_FSTYPES_remove = "tar.bz2"
IMAGE_FSTYPES_remove = "rpi-sdimg"
IMAGE_FSTYPES_remove = "ext3"
对于/tmp/work,不需要所有配方的所有工作文件。您可以指定您对开发中的哪些感兴趣。
RM_WORK_EXCLUDE:启用rm_work后,此变量指定不应删除其工作目录的配方列表。有关详细信息,请参阅“rm_work.bbclass”部分。
INHERIT += "rm_work"
RM_WORK_EXCLUDE += "home-assistant widde"
gcmastyq3#
您可以使用脚本sstate-cache-management.sh(来自poky)和选项
--remove-duplicated
。删除一个包的重复的sstate缓存文件,只保留最新的一个。一个包的重复的sstate缓存文件必须具有相同的archs,这意味着具有多个archs的sstate缓存文件不被视为重复。