我的 YoctoProject“fido”环境的
sstate-cache
目录大小超过 3GB。
如何删除sstate-cache
中的yocto/build-dir
目录?
使用安全吗
rm -rf
或者还有其他方法吗?
根据 Yocto 参考手册,删除整个
build/tmp
目录(包括 sstate-cache
目录)是安全的:
作为最后的手段,清理构建并从头开始 (除了下载),您可以删除 tmp 中的所有内容 目录或完全删除该目录。如果你这样做,你 还应该完全删除 build/sstate-cache 目录。 (参见 [1] 和 [2])
此外,您可以通过调用
bitbake
来删除特定配方的 do_cleansstate
的状态缓存,如下所示(请参阅 do_cleansstate)。
$ bitbake -c cleansstate recipe
请注意,共享状态缓存需要大量内存,并且它将再次增长到构建图像所需的大小。
有关共享状态缓存的更多详细信息,请参阅 Yocto 参考手册的以下部分: 共享状态缓存和sstate-cache。
删除 sstate-cache 目录是安全的,但是减小其大小的正确方法是使用
poky/scripts/sstate-cache-management.py
中的脚本,这将删除旧条目。请参阅https://git.yoctoproject.org/poky/tree/scripts/sstate-cache-management.py(旧版本中的脚本为 sstate-cache-management.sh)
我将具有减少 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 以保持有限的大小。可能有包或者包 不再使用且仅占用空间的版本。
• 虽然可以使用其他协议进行状态,例如 像 HTTP 和 FTP 一样,你应该避免这些。使用 HTTP 限制状态 只读,FTP 的性能很差。
• 此外,http/ftp 服务器上缺少 sstate 文件会导致 wget 由于重试和超时而挂起很长时间
您可以从构建中删除 sstate-cache,最常见的原因是,随着每次构建添加越来越多的缓存数据,它会不断增长。有一个简单的清洁方法,如下:
./scripts/sstate-cache-management.sh --remove-duplicated -d --cache-dir=<path to sstate-cached>
这将从缓存中删除重复的旧数据。
注意:当我们需要从头开始重建时,我们要么删除构建/ tmp 以便我们可以使用 sstate-cache 来加速构建或者我们 删除 build/tmp 和 sstate-cache 以便没有缓存 在构建过程中重复使用。