如何解决 AWS Batch 中的“设备上没有剩余空间”错误?

上次更新时间:2020 年 4 月 23 日

当 AWS Batch 作业失败时,我收到错误消息“设备上没有剩余空间”。如何解决此错误?

简短描述

以下常见情形可能导致此错误:

  • 您的 Amazon Elastic Block Store (Amazon EBS) 卷 (dev/xvdcz) 上没有足够的磁盘空间。
  • 您已达到 10 GiB 的默认 Docker 存储限制。

注:以下解决方法适用于针对 Amazon Elastic Container Service (Amazon ECS) 优化的 Amazon Linux 1 Amazon 系统映像 (AMI)。当您在 AWS Batch 中创建托管计算环境时,针对 Amazon ECS 优化的 AMI 是默认使用的映像。要了解 Docker 如何使用逻辑卷管理 (LVM) 设备,见版本 2015.09.d 及更高版本

解决方法

要查看 Docker (dev/xvdcz) 的可用存储空间,请参阅 AMI 存储配置并遵循确定 Docker 的可用存储部分的说明。

若您必须为由 AWS Batch 启动的实例扩展 Amazon EBS 卷,则使用启动模板以增加 AWS Batch 中的 Amazon EBS 卷

如果扩展 Amazon EBS 卷不是所遇问题的最佳解决办法,而且您一定会超出 10 GiB 的默认存储限制,那么,对于从 Amazon Linux 1 AMI 启动的 Amazon ECS 实例增加您的 Docker 容器存储卷限制

注意:您可以使用启动模板来构建适用于由 AWS Batch 启动的全部 Amazon Elastic Compute Cloud (Amazon EC2) 实例的配置模板。借助启动模板,您可以自定义由 AWS Batch 使用的默认 Amazon ECS 优化 AMI,无需使用自定义 AMI。

如果要将用户数据添加到 Amazon EC2 控制台中的启动模板,请以纯文本格式粘贴用户数据,或从文件上传。

如果使用 AWS 命令行界面 (AWS CLI) 或 AWS 软件开发工具包,您首先必须对用户数据进行 base64 编码。然后在调用 CreateLaunchTemplate 时将该字符串作为 UserData 参数的值提交。例如,请参见以下 JSON 模板:

{
    "LaunchTemplateName": "base64-user-data",
    "LaunchTemplateData": {
        "UserData": "ewogICAgIkxhdW5jaFRlbXBsYXRlTmFtZSI6ICJpbmNyZWFzZS1jb250YWluZXItdm9sdW..."
    }
}

以下示例 MIME 多段文件覆盖了计算资源的默认 Docker 镜像设置:

Content-Type: multipart/mixed; boundary="==BOUNDARY=="
MIME-Version: 1.0

--==BOUNDARY==
Content-Type: text/cloud-boothook; charset="us-ascii"
#cloud-boothook
#!/bin/bash
cloud-init-per once docker_options echo 'OPTIONS="${OPTIONS} --storage-opt dm.basesize=20G"' >> /etc/sysconfig/docker

--==BOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
# Set any ECS agent configuration options
echo ECS_CLUSTER=default>>/etc/ecs/ecs.config
echo ECS_IMAGE_CLEANUP_INTERVAL=60m >> /etc/ecs/ecs.config
echo ECS_IMAGE_MINIMUM_CLEANUP_AGE=60m >> /etc/ecs/ecs.config
--==BOUNDARY==--

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?