在Yocto中,如何删除状态缓存目录?

16

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

是否可以安全使用rm -rf命令?还有其他方法吗?

5个回答

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

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

此外,您可以通过调用do_cleansstate来删除特定配方的sstate-cache,如下所示(请参见do_cleansstate)。
$ bitbake -c cleansstate recipe

请注意,共享状态缓存需要大量内存,并且它会再次增长到构建您的镜像所需的大小。
有关共享状态缓存的更详细信息,请参阅Yocto参考手册的以下部分:共享状态缓存sstate-cache

谢谢@g0hl1n,你的意思是所有编译好的食谱数据都在sstate-cache目录中对吧。如果我删除该目录,那么所有的食谱数据都会丢失对吧? - yoctotutor.com
嗨,不是所有编译的数据都在sstate-cache中,有些也在workdir中。删除sstate-cache不会丢失任何配方。但请阅读参考手册(答案中提供链接)以获取有关该问题的更多详细信息。 - g0hl1n
不知道你的情况如何,但在我的情况下,build/tmp 不包括 sstate-cache。但是正如注释所说,如果你删除了构建文件夹中的 sstate-cache 文件夹,你也应该删除 tmp 文件夹。 - SimonSimCity

11

正确的任务是:

$ bitbake -c cleansstate <recipe-name>

参考文档:Yocto参考手册

还有更多的清理任务,可以删除sstate缓存等更多内容(例如do_cleanall)。


Yocto参考手册的新链接:https://docs.yoctoproject.org/ref-manual/tasks.html?highlight=tasks+clean#do-cleanall - minoset

7

3

您可以从构建中删除sstate-cache,这样做的最常见原因是,随着每次构建添加更多缓存数据,它会不断增长。以下是清理它的简单方法:

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

这将从缓存中删除重复和旧数据。
注意:当我们需要从头开始重建时,我们要么删除build/tmp以便使用sstate-cache加速构建,要么同时删除build/tmp和sstate-cache,以确保在构建过程中不会重用任何缓存。

3
我已经加粗了减小sstate缓存大小的命令部分;这是清理缓存的另一种方式。
Sstate:建议
• 对于复杂的系统,建议将sstate目录分开,例如本机和非本机sstate目录,以及不同的BSP和arches。
• 重用单个目录会很快变得非常庞大。使用atime删除旧文件。注意:这需要文件系统挂载在atime/relatime上,我们通常建议为了构建性能而禁用。 find ${sstate_dir} -name 'sstate*' -atime +3 -delete • 定期重新构建sstate到新目录,并删除旧的sstate目录以维护有界大小。可能有一些不再使用的软件包或软件包版本,只占用空间。
• 尽管可以使用其他协议(如HTTP和FTP)来进行sstate,但应避免使用这些协议。使用HTTP限制了sstate的只读性,而FTP提供了较差的性能。
• 另外,在http/ftp服务器上缺少sstate文件会导致wget由于重试和超时而挂起很长时间。

我不确定 'fi*' 是什么,但是没有它也能正常工作。 - vermaete

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接