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

上次更新日期:2022 年 1 月 10 日

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

简短描述

AWS Batch 可能会返回“设备上没有剩余空间”错误,原因有两个:

  • Amazon Elastic Block Store (Amazon EBS) 上托管的 Docker 卷上没有足够的磁盘空间。
  • (仅适用于 Amazon Linux 1)您已达到原定设置 Docker 存储限制 10 GiB。

要解决此错误,请首先验证托管在 Amazon EBS 上的 Docker 卷是否有足够的磁盘空间。如果磁盘空间不足,请增加 Amazon EBS 卷的大小。如果有足够的磁盘空间,则增加原定设置 Docker 存储限制。

这两种解决方案都需要创建新的自定义启动模板新的计算环境。您无法向 AWS Batch 中的现有计算环境添加新的自定义启动模板。

注意:Amazon Elastic Container Service (Amazon ECS) 优化的 Amazon Linux Amazon Machine Image (AMI) 1 已弃用。当您在 AWS Batch 中创建托管式计算环境时,Amazon ECS 优化的 Amazon Linux 2 AMI 是原定设置使用的镜像。有关更多信息,请参阅 AMI 存储配置。本文仅出于向后兼容性而引用亚马逊 Linux 1

解决方法

注意:如果您在运行 AWS Command Line Interface (AWS CLI) 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。您还可以使用 AWS CloudShell 运行以下命令。

验证托管在 Amazon EBS 上的 Docker 卷是否有足够的磁盘空间

按照确定 Docker 的可用存储部分或 AMI 存储配置中的说明进行操作。

如果磁盘空间不足,请参阅本文的增加 AWS Batch 中 Amazon EBS 卷的大小部分。

– 或者 –

如果有足够的磁盘空间,请参阅本文的(仅适用于 Amazon Linux 1)增加原定设置 Docker 存储限制部分。

增加 AWS Batch 中 Amazon EBS 卷的大小

1.    创建一个新的自定义启动模板,用于调整 AWS Batch 计算资源上的 Docker 数据卷(原定设置 ECS 优化的 AL2 镜像上的 /dev/xvda)的大小(添加大于当前值的 “VolumeSize”)。有关说明,请参阅启动模板支持

注意:如果您使用的是 Amazon Linux 1,请确保输入所需的 Docker 卷(/dev/xvda/dev/xvdcz)作为 DeviceName 值。

2.    创建一个新的计算环境,使用新的启动模板。

注意:相关 Amazon Elastic Compute Cloud (Amazon EC2) 实例会在 AWS Batch 启动实例时显示新的驱动器大小。

(仅适用于 Amazon Linux 1)提高原定设置 Docker 存储限制

1.    使用可提高原定设置 Docker 存储限制的 MIME 分段归档格式创建新的自定义启动模板。有关更多信息,请参阅启动模板中的 Amazon EC2 用户数据

示例 MIME 分段文件覆盖了 AWS Batch 计算资源的原定设置 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==--

重要提示:如果使用 AWS CLI 或 AWS SDK,则必须先对用户数据进行 base64 编码。然后,在调用 CreateLaunchTemplate API 时提交该字符串作为 UserData 参数的值。

2.    创建一个新的计算环境,使用新的启动模板。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?