如何解決 AWS Batch 的「裝置上沒有剩餘空間」錯誤?

2 分的閱讀內容
0

當我的 AWS Batch 任務失敗時,我收到「裝置上沒有剩餘空間」錯誤訊息。如何解決此問題?

簡短描述

AWS Batch 可能會傳回**「裝置上沒有剩餘空間」**錯誤,原因有兩個:

  • 在 Amazon Elastic Block Store (Amazon EBS) 上託管的 Docker 磁碟區上沒有足夠的磁碟空間。
  • (僅適用於 Amazon Linux 1) 您已達到 10 GiB 的預設 Docker 儲存空間限制。

若要解決此錯誤,請先確認在 Amazon EBS 上託管的 Docker 磁碟區有足夠的磁碟空間。如果沒有足夠的磁碟空間,請增加 Amazon EBS 磁碟區的大小。如果磁碟空間足夠,請增加預設 Docker 儲存空間限制。

這兩種解決方案都需要建立新的自訂啟動範本新的運算環境。您無法將新的自訂啟動範本新增至 AWS Batch 中的現有運算環境。

**注意:**Amazon Elastic Container Service (Amazon ECS) 最佳化 Amazon Linux Amazon Machine Image (AMI) 1 已棄用。Amazon ECS 最佳化 Amazon Linux 2 AMI 是您在 AWS Batch 中建立受管運算環境時使用的預設映像。如需詳細資訊,請參閱 AMI 儲存組態。本文參考的 Amazon Linux 1 僅適用於向後相容性。

  • 如果您的 AWS Batch ComputeEnvironment 使用 ECS 最佳化 Amazon Linux 1 來啟動 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體,則最佳實務是建立新的 ComputeEnvironment。然後,AWS Batch 會在建立時使用最新可用的 ECS 最佳化 Amazon Linux 2 AMI。
  • 如果您在使用 ECS 最佳化 Amazon Linux 2 AMI 啟動的 Amazon EC2 執行個體上執行的任務看到**「裝置上沒有剩餘空間」**錯誤,請增加根磁碟區的大小 (/dev/xvda),以便為容器騰出更多儲存空間。

解決方案

**注意:**如果您在執行 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,請確認為 DeviceName 值輸入所需的 Docker 磁碟區 (/dev/xvda/dev/xvdcz)。

2.    建立使用新啟動範本的新運算環境

**注意:**當 AWS Batch 啟動執行個體時,相關聯的 Amazon EC2 執行個體會顯示新的磁碟機大小。

(僅適用於 Amazon Linux 1) 增加預設 Docker 儲存限制

1.    使用 MIME multi-part 存檔格式建立新的自訂啟動範本,以增加預設 Docker 儲存限制。如需詳細資訊,請參閱啟動範本中的 Amazon EC2 使用者資料

覆寫 AWS Batch 運算資源的預設 Docker 映像檔設定的範例 MIME multi-part 檔案

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.    建立使用新啟動範本的新運算環境


AWS 官方
AWS 官方已更新 2 年前