CodeBuild Yocto 项目因 Amazon EFS 而失败 - "Too many links"

CodeBuild Yocto Project failing with Amazon EFS - "Too many links"

我们正在通过 AWS CodeBuild (Ubuntu 16.04) 构建我们的 Yocto (2.2) 项目,并尝试使用 Amazon EFS 对其进行配置,以便我们的 build/tmpbuild/sstate-cachebuild/cache 目录在后续构建之间保留。

我们使用 CodeBuild 和 EFS 的设置是将我们的存储库克隆到 EFS 中,运行 我们的 Bitbake 从那里构建。

目前没有 Amazon EFS,我们的构建 运行 没有问题,但是一旦启用 EFS 并从该文件系统 运行ning,我们的构建开始失败并出现如下错误:

Exception: OSError: [Errno 31] Too many links './usr/lib/locale/aa_DJ/LC_MEASUREMENT' -> '/codebuild/readonly/firmware_repo/repo/build/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/glibc-locale/2.24-r0/packages-split/glibc-binary-localedata-aa-dj/./usr/lib/locale/aa_DJ/LC_MEASUREMENT'

cp: cannot create hard link '/efs/firmware_repo/repo/build/tmp/deploy/licenses/glibc-locale/generic_GPLv2' to '/efs/firmware_repo/repo/build/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/glibc-locale/2.24-r0/license-destdir/glibc-locale/generic_GPLv2': Too many links

我们看到这个错误发生在 bc_1.06.bb:do_populate_lic, netbase_5.3.bb:do_populate_lic, glibc-locale_2.24.bb:do_populate_lic

我已经调查过这个问题,看起来是因为 Amazon EFS 对一个文件可以拥有的硬链接数量有上限 1。有没有什么方法可以增加文件在 Amazon EFS 中可以拥有的硬链接数量上限,或者减少文件在 Bitbake 构建过程中拥有的链接数量?

我用来研究这个问题的一些资源:

Python error OSError: [Errno 31] Too many links

Amazon EFS quotas and limits

Troubleshooting File Operation Errors

OE/Yocto 项目在 TMPDIR 中大量使用硬链接来快速有效地构建 sysroots,因此在数量限制的情况下效果不佳。

TMPDIR 设计为半一次性使用。在构建之间仅共享 sstate-cache 应该会获得非常相似的速度提升,并且不包含硬链接,所以您是否尝试过坚持它?这应该提供合理的性能。

我想说将 tmp 放在 EFS 上只会减慢速度:因为 EFS 会花费时间(因为它是网络存储)和金钱(您为其中的所有内容付费)只需将 DL_DIR、SSTATE_DIR,以及您想要保留在其中的任何其他内容。将 TMPDIR 保存在本地存储中。