【问题标题】:Bitbake build consumes more spaceBitbake 构建消耗更多空间
【发布时间】:2017-02-18 13:57:38
【问题描述】:

我最近开始使用 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"!

请提出一些建议以避免此问题。

【问题讨论】:

    标签: linux build yocto bitbake


    【解决方案1】:

    按照有效性和修复的难易程度排序:

    • 购买更多磁盘空间:将 $TMPDIR 放在自己的 SSD 上会有很大帮助,并且无需进行微观管理。
    • 删除 $TMPDIR (build/tmp): 旧映像、旧包和工作目录/sysroot 用于您当前未构建的 MACHINE 以累积并占用大量空间。您通常可以偶尔删除整个 $TMPDIR:只要您使用 sstate-cache,下一个构建应该仍然非常快。
    • 删除 $SSTATE_DIR (build/sstate-cache):如果你做了很多构建,sstate 本身会随着时间的推移而累积。删除目录是安全的,但下一次构建需要很长时间,因为所有内容都将重新构建。
    • 删除 $DL_DIR(构建/下载):如果您长时间使用构建目录(同时从 master 拉取更新或更改到较新的分支),过时的下载会继续占用磁盘空间。请记住,删除目录将意味着重新下载所有内容。在这里只查看最大的文件并删除旧版本可能是一个有用的折衷方案。

    【讨论】:

    • 非常感谢!删除 tempdir 本身释放了大约 32GB!!!而且,构建时间也没有变化!
    • 如果您沿着删除路线走,您也可以尝试将INHERIT += "rm_work" 添加到您的项目配置文件中。添加此语句会在构建配方后删除用于构建配方的工作目录。
    【解决方案2】:

    有一些官方的方法,而不是删除。

    故意删除您可能会强制进行不必要的构建和下载。构建的某些元素可能无法由 bitbake 控制,您会发现自己无法轻松地重新构建这些项目。

    通过这些建议,您可以打破每次构建 50GB 的非书面 yocto 规则:

    检查您的 IMAGE_FSTYPES 变量。我的经验表明,删除这些不是符号链接或符号链接目标的文件的所有图像是安全的。避免生成最后一个,以免破坏最后一个构建链接,以及任何与引导加载程序和配置文件相关的内容,因为它们很少会重新生成。

    如果您保留多个具有相同层集的构建,则可以使用通用下载文件夹进行构建。

    DL_DIR ?= "common_dir_across_all_builds/downloads/"

    然后:

    保持 /deploy 干净:

    RM_OLD_IMAGE:通过从 DEPLOY_DIR 变量指向的图像目录中删除相同图像的先前构建版本来回收磁盘空间。在 local.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"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 2019-09-14
      相关资源
      最近更新 更多