【问题标题】:How should the sstate-cache directory be deleted in Yocto?Yocto中应该如何删除sstate-cache目录?
【发布时间】:2018-01-02 15:36:24
【问题描述】:

我的 YoctoProject "fido" 环境的sstate-cache 目录的大小超过 3GB。 如何删除yocto/build-dir中的sstate-cache目录?

rm -rf省钱还是有其他方法?

【问题讨论】:

    标签: yocto bitbake


    【解决方案1】:

    正确的任务是:

    $ bitbake -c cleansstate <recipe-name>
    

    见:Yocto Reference Manual

    还有更多任务需要清理,包括删除 sstate 缓存甚至更多(例如 do_cleanall)。

    【讨论】:

      【解决方案2】:

      根据 Yocto 参考手册,删除完整的 build/tmp 目录是安全的,包括 sstate-cache 目录:

      作为最后的手段,清理构建并从头开始 (除了下载),您可以删除 tmp 中的所有内容 目录或完全摆脱该目录。如果你这样做,你 还应该完全删除 build/sstate-cache 目录。 (见[1][2]

      此外,您可以通过调用do_cleansstate 来删除带有bitbake 的sstate-cache,如下所示(参见do_cleansstate)。

      $ bitbake -c cleansstate recipe
      

      请注意,共享状态缓存需要大量内存,并且会再次增长到构建图像所需的大小。

      有关共享状态缓存的更多详细信息,请参阅 Yocto 参考手册的以下部分: Shared State Cachesstate-cache

      【讨论】:

      • 谢谢@g0hl1n,你的意思是所有编译的配方数据都存在于 sstate-cache 目录中。如果我删除 dir 所有配方数据,我会丢失对吗?
      • 嗨,并非所有编译数据都在 sstate-cache 中,有些也在 workdir 中。通过删除 sstate-cache,您不会丢失任何配方。但请阅读参考手册(在答案中链接)以了解有关该问题的更多详细信息。
      • 不知道你的情况如何,但在我的情况下,build/tmp 不包括sstate-cache。但正如注释所说,如果您删除构建文件夹中的 sstate-cache 文件夹,您也应该删除 tmp 文件夹。
      【解决方案3】:

      我将具有减小 sstate 缓存大小的命令的部分加粗;这是清理缓存的另一种方法。

      https://old.yoctoproject.org/sites/default/files/yocto_devday_advanced_class_sandiego.pdf 第 37 张幻灯片

      状态:建议

      • 在复杂系统中,建议将 sstate 目录分开, 例如本地和非本地 sstate 目录,以及 不同的 BSP 和拱门。

      • 重用单个目录将很快变得非常大。使用 atime 删除旧文件。注意:这需要安装文件系统 使用我们通常建议禁用构建的 atime/relatime 表现。

      找到 ${sstate_dir} -name 'sstate*' -atime +3 -delete

      • 定期将 sstate 重建到新目录并删除旧 sstate dir 以保持有界的大小。可能有包或包 不再使用的版本只会占用空间。

      • 尽管可以为 sstate 使用其他协议,例如 作为 HTTP 和 FTP,你应该避免这些。使用 HTTP 限制 sstate 到只读且 FTP 性能较差。

      • 此外,http/ftp 服务器上缺少 sstate 文件会导致 wget 由于重试和超时而挂了很长时间

      【讨论】:

      • 我不确定 'fi*' 是什么,但没有它就可以正常工作。
      【解决方案4】:

      删除 sstate-cache 目录是安全的,但是减小其大小的正确方法是使用 poky/scripts/sstate-cache-management.sh 中的脚本,该脚本将删除旧条目。见https://git.yoctoproject.org/cgit.cgi/poky/plain/scripts/sstate-cache-management.sh

      【讨论】:

        【解决方案5】:

        您可以从构建中删除 sstate-cache,最常见的原因是,随着每次构建添加越来越多的缓存数据,它会不断增长。有一个简单的清洁方法,如下:

        ./scripts/sstate-cache-management.sh --remove-duplicated -d --cache-dir=<path to sstate-cached>
        

        这会从缓存中删除重复的旧数据。

        注意:当我们需要从头开始重建时,我们要么删除 build/ tmp 以便我们可以使用 sstate-cache 来加快构建速度,或者我们 删除 build/tmp 和 sstate-cache 以便没有缓存 在构建期间重复使用。

        【讨论】:

          猜你喜欢
          • 2019-08-04
          • 2020-06-05
          • 1970-01-01
          • 2021-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-09
          • 1970-01-01
          相关资源
          最近更新 更多