卷大小调整失败调查 | AI生成和翻译

Home 2026.06

调查:为何通过 CLI 调整卷大小失败

问题

AMD Dev Cloud(基于 DigitalOcean)的 Web UI 中,卷 volume-atl1-1780280110689 显示“增加存储大小”弹窗。在大小字段输入 200 显示“无效大小”。用户希望改用 CLI 操作。

步骤 1:检查 doctl 代码库

查看 /Users/lzwjava/projects/doctl/commands/volumes.go

发现裸写 --size 200 会被解析为 200 字节 → 除法后为 0 GiB。但这只是 CLI 的细节问题,并非 UI 问题。

步骤 2:分析 Web UI HTML

用户分享了弹窗的 HTML。关键发现:

<input type="number" min="101" max="16384" step="1" value="101">

HTML5 验证应接受 200。错误必定来自其他位置。

步骤 3:检查 API 客户端库

查看 /Users/lzwjava/projects/doctl/vendor/github.com/digitalocean/godo/storage_actions.go

步骤 4:设置 CLI 访问

步骤 5:列出卷

doctl compute volume list

结果:

ID                                      Name                         Size       Region    Droplet IDs
52743aec-...                            volume-atl1-1780280110689    100 GiB    atl1      [574422820]

当前大小:100 GiB,已挂载到 GPU Droplet 574422820(MI300X 192GB,atl1)。

步骤 6:尝试通过 CLI 调整大小

doctl compute volume-action resize 52743aec-... --size 200 --region atl1

结果:422 "error resizing volume: invalid size specified"

步骤 7:暴力测试所有大小

编写 Python 脚本测试大小 101、110、125、128、150、200、250、256、300、400、500、512、1024,通过 POST /v2/volumes/{id}/actions 发送:

每个大小均返回 422 "invalid size specified"

步骤 8:尝试先分离卷

doctl compute volume-action detach 52743aec-... 574422820 --wait
doctl compute volume-action resize 52743aec-... --size 200 --region atl1

仍然 422。之后重新挂载卷。

步骤 9:测试不同请求格式

编写另一个 Python 脚本测试:

步骤 10:测试其他区域

结论

在此账户上,所有区域的所有整数大小通过 POST /v2/volumes/{id}/actions 调整大小端点均返回 422 "invalid size specified"。这是服务端 API 限制,而非客户端代码错误。

Token 前缀 dop_v1_ 表明这是一个 DigitalOcean Partner Cloud token(AMD Dev Cloud)。标准 DO 卷调整大小 API 似乎不适用于合作伙伴/GPU 卷。Web UI 可能使用了不同的内部 API 或具有更高权限。

建议

  1. 暂时使用 Web UI(在弹窗中输入 101 以上)
  2. 联系 AMD Dev Cloud 支持,询问 CLI/API 卷调整大小问题
  3. 轮换 API token —— 该 token 已在聊天中共享

调查期间创建的文件:


Back Donate