【发布时间】:2018-01-02 15:36:24
【问题描述】:
我的 YoctoProject "fido" 环境的sstate-cache 目录的大小超过 3GB。
如何删除yocto/build-dir中的sstate-cache目录?
用rm -rf省钱还是有其他方法?
【问题讨论】:
我的 YoctoProject "fido" 环境的sstate-cache 目录的大小超过 3GB。
如何删除yocto/build-dir中的sstate-cache目录?
用rm -rf省钱还是有其他方法?
【问题讨论】:
正确的任务是:
$ bitbake -c cleansstate <recipe-name>
还有更多任务需要清理,包括删除 sstate 缓存甚至更多(例如 do_cleanall)。
【讨论】:
根据 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 Cache 和 sstate-cache。
【讨论】:
build/tmp 不包括sstate-cache。但正如注释所说,如果您删除构建文件夹中的 sstate-cache 文件夹,您也应该删除 tmp 文件夹。
我将具有减小 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 由于重试和超时而挂了很长时间
【讨论】:
删除 sstate-cache 目录是安全的,但是减小其大小的正确方法是使用 poky/scripts/sstate-cache-management.sh 中的脚本,该脚本将删除旧条目。见https://git.yoctoproject.org/cgit.cgi/poky/plain/scripts/sstate-cache-management.sh
【讨论】:
您可以从构建中删除 sstate-cache,最常见的原因是,随着每次构建添加越来越多的缓存数据,它会不断增长。有一个简单的清洁方法,如下:
./scripts/sstate-cache-management.sh --remove-duplicated -d --cache-dir=<path to sstate-cached>
这会从缓存中删除重复的旧数据。
注意:当我们需要从头开始重建时,我们要么删除 build/ tmp 以便我们可以使用 sstate-cache 来加快构建速度,或者我们 删除 build/tmp 和 sstate-cache 以便没有缓存 在构建期间重复使用。
【讨论】: