如何在 Bazel 构建中避免 'No space left'?
How to avoid 'No space left' on Bazel build?
运行 在接近完整的设备上构建冗长的 Bazel,我遇到了这个错误:
ERROR: I/O error while writing action log: No space left on device
但是,我不能完全释放设备上的一些 space,所以我必须以某种方式操纵缓存 and/or 临时存储。我注意到 Bazel 在 ~/.cache/bazel/myproject/
的缓存可能会变得很大,所以我想知道,我可以:
- 出现错误后删除其中的一些文件吗?
- 将该缓存移到其他地方?
- 完全禁用缓存?
Bazel's User Manual 似乎表明 --[no]use_action_cache
会做第三种选择(虽然我不知道那会有多有效),但它会减慢速度。
至于暂存区,我确实有足够的位置space,所以我干脆调用了export TMPDIR=/path/to/morespace/
。因此,如果我可以移动缓存,那就是它要去的地方。
您可以使用启动选项 --output_base
指向有更多可用存储空间的位置。这将告诉 Bazel 在哪里写入它的所有输出。
$ bazel --output_base=/path/to/more/space build ...
为避免为每个命令指定它,请将其添加到您的项目 <project>/.bazelrc
或用户 ~/.bazelrc
:
startup --output_base=/path/to/more/space
运行 在接近完整的设备上构建冗长的 Bazel,我遇到了这个错误:
ERROR: I/O error while writing action log: No space left on device
但是,我不能完全释放设备上的一些 space,所以我必须以某种方式操纵缓存 and/or 临时存储。我注意到 Bazel 在 ~/.cache/bazel/myproject/
的缓存可能会变得很大,所以我想知道,我可以:
- 出现错误后删除其中的一些文件吗?
- 将该缓存移到其他地方?
- 完全禁用缓存?
Bazel's User Manual 似乎表明 --[no]use_action_cache
会做第三种选择(虽然我不知道那会有多有效),但它会减慢速度。
至于暂存区,我确实有足够的位置space,所以我干脆调用了export TMPDIR=/path/to/morespace/
。因此,如果我可以移动缓存,那就是它要去的地方。
您可以使用启动选项 --output_base
指向有更多可用存储空间的位置。这将告诉 Bazel 在哪里写入它的所有输出。
$ bazel --output_base=/path/to/more/space build ...
为避免为每个命令指定它,请将其添加到您的项目 <project>/.bazelrc
或用户 ~/.bazelrc
:
startup --output_base=/path/to/more/space